using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using Deltares.Geotechnics;
using Deltares.Standard;
using Deltares.Standard.Attributes;
using Deltares.Standard.EventPublisher;
using Deltares.Standard.Units;
using Deltares.Standard.Validation;
namespace Deltares.DeltaModel
{
///
/// Revetment Top Layer Data Object
/// TODO: Comment
///
public class BlockRevetmentTopLayerData : ICloneable
{
private double averageBlockLength;
private double averageBlockWidth;
private double characteristicOpenDiameter;
private double d15Inwas;
private double dOneffen;
private YesNoQuestionMark goedGeklemd;
private List holes = new List();
private double ingegotenToplaagDiepte;
private double ingegotenToplaagVgd;
private bool ingewassen;
private double omega;
private double rho;
private double spleetBreedteLangsVoeg;
private double spleetBreedteStootVoeg;
private TopLayerType topLayerMaterial;
private double topLayerThickness;
public BlockRevetmentTopLayerData()
{
topLayerMaterial = Deltares.DeltaModel.TopLayerType.GetTopLayerTypeByCode(1, 0, 0);
}
///
/// Gets or sets the type of the revetment top layer.
///
///
/// The type of the top layer.
///
[Unit(UnitType.None)]
[Minimum(0)]
[Maximum(1E9)]
[Label("Type")]
[Description("Type")]
[Format("F3")]
[Category("Toplaag")]
public string TopLayerType
{
get
{
return topLayerMaterial.FormattedCode();
}
}
///
/// Gets or sets the top layer thickness.
///
///
/// The top layer thickness.
///
[Unit(UnitType.Length)]
[Minimum(0)]
[Maximum(1E9)]
[Label("D")]
[Description("D")]
[Format("F3")]
[Category("Toplaag")]
public double TopLayerThickness
{
get
{
return topLayerThickness;
}
set
{
this.SetAndNotify2(out topLayerThickness, value, d => d.TopLayerThickness);
}
}
///
/// Gets or sets the average width of the blocks.
///
///
/// The average width of the blocks.
///
[Unit(UnitType.Length)]
[Minimum(0)]
[Maximum(1E9)]
[Label("BBlok")]
[Description("BBlok")]
[Format("F3")]
[Category("Toplaag")]
[Clearable]
public double AverageBlockWidth
{
get
{
return averageBlockWidth;
}
set
{
this.SetAndNotify2(out averageBlockWidth, value, d => d.AverageBlockWidth);
}
}
///
/// Gets or sets the average length of the blocks.
///
///
/// The average length of the blocks.
///
[Unit(UnitType.Length)]
[Minimum(0)]
[Maximum(1E9)]
[Label("LBlok")]
[Description("LBlok")]
[Format("F3")]
[Category("Toplaag")]
[Clearable]
public double AverageBlockLength
{
get
{
return averageBlockLength;
}
set
{
this.SetAndNotify2(out averageBlockLength, value, d => d.AverageBlockLength);
}
}
///
/// Relative open surface
// Dutch original text:
// Relatief open oppervlakt.
///
///
/// The omega.
///
[Unit(UnitType.Fractions)]
[Minimum(0)]
[Maximum(1)]
[Label("Omega")]
[Description("Omega")]
[Format("F3")]
[Category("Toplaag")]
[Clearable]
public double Omega
{
get
{
return omega;
}
set
{
this.SetAndNotify2(out omega, value, d => d.Omega);
}
}
///
/// List containing one or more instances of class hole, which characterize holes in toplayer.
///
[Category("Toplaag")]
public List Holes
{
get
{
return holes;
}
set
{
this.SetAndNotify2(out holes, value, d => d.Holes);
}
}
///
/// Characteristical diamater of the relative large holes in the settlement
/// (Average size of hole per squaremeter of settlement).
/// This is used for the testing of the mechanism material transport
/// from the granular layer.
/// TODO: Comment
//
// Dutch original text:
// Karakteristiek diameter van de relatief grote gaten in
// de zetting (gemiddelde van grootste gat per vierkante meter zetting).
// Dit wordt gebruikt voor de toetsing van
// het mechanisme materiaaltransport vanuit de granulaire laag.
///
[Unit(UnitType.TinyLength)]
[Minimum(0)]
[Maximum(1E9)]
[Label("Opening")]
[Description("Opening")]
[Format("F3")]
[Category("Toplaag")]
[Clearable]
public double CharacteristicOpenDiameter
{
get
{
return characteristicOpenDiameter;
}
set
{
this.SetAndNotify2(out characteristicOpenDiameter, value, d => d.CharacteristicOpenDiameter);
}
}
///
/// Specific mass of the blocks in the top layer.
/// if empty, the value from the worksheet 'Info' will be used.
/// TODO: Comment
//
// Dutch original text:
// Soortelijke massa van de stenen in de toplaag.
// Als blanco, dan wordt waarde uit werkblad 'Info' aangehouden.
///
[Minimum(0)]
[Maximum(1E9)]
[Label("Rho")]
[Description("Rho")]
[Format("F3")]
[Category("Toplaag")]
[Clearable]
public double Rho
{
get
{
return rho;
}
set
{
this.SetAndNotify2(out rho, value, d => d.Rho);
}
}
///
/// Whether slits (and holes) in the top layer are washed-in with
/// granular material such as stone chippings. Fill in yes in case the slits are
/// on average at least for a half the height of the slit washed-in.
/// TODO: Comment
//
// Dutch original text:
// Of de spleten (en gaten) in de tolaag zijn ingewassen met granulair
// materiaal, zoals steenslag. Vul ja in als de spleten gemiddeld
// voor ten minste de halve spleethoogte zijn ingewassen.
///
[Label("Ingewassen")]
[Description("Ingewassen")]
[Category("Toplaag")]
[Clearable]
public bool Ingewassen
{
get
{
return ingewassen;
}
set
{
this.SetAndNotify2(out ingewassen, value, d => d.Ingewassen);
}
}
///
/// Grain-size of the washed in material (granular material in the
/// slits and holes), that will be undershot by 15 weight percent.
/// TODO: Comment
//
// Dutch original text:
// Korrelgrootte van het inwasmateriaal
// (granulair materiaal in de spleten en gaten),
// dat door 15 gewichtsprocenten wordt onderschreden.
///
[Unit(UnitType.TinyLength)]
[Minimum(0)]
[Maximum(1E9)]
[Label("D15Inwas")]
[Description("D15Inwas")]
[Format("F3")]
[Category("Toplaag")]
[Clearable]
public double D15Inwas
{
get
{
return d15Inwas;
}
set
{
this.SetAndNotify2(out d15Inwas, value, d => d.D15Inwas);
}
}
///
/// For a well washed-in (closely set) blocksettlement, the interaction between the blocks is good.
/// This is also called a well clamped settlement. The slits need to be filled for at least half the
/// slit height with stone chippings. Sand and mud do not contribute to the clamping.
/// Rectangle blocks with no washing-ins are not well clamped.
/// TODO: Comment
//
// Dutch original text:
// Voor een goed ingewassen (dicht gezette) steenzetting geldt dat de
// interactie tussen de stenen goed is. Men spreekt dan van een goed
// geklemde zetting. De spleten moeten minstens voor de helft van de
// spleethoogte gevuld zijn met steenslag. Zand en slib dragen niet bij aan
// de klemming. Rechthoekige blokken zonder inwassing zijn niet goed geklemd
///
[Unit(UnitType.None)]
[Label("GoedGeklemd")]
[Description("GoedGeklemd")]
[Category("Toplaag")]
[Clearable]
public YesNoQuestionMark GoedGeklemd
{
get
{
return goedGeklemd;
}
set
{
this.SetAndNotify2(out goedGeklemd, value, d => d.GoedGeklemd);
}
}
///
/// The degree in which blocks are settled and/or the blocks stick out of the surrounding blocks.
/// This is only relevant for stone settlements on the crown and the inner slope of the harbor dam.
/// It is about the height of the highest standing edge in the settlement, against which the waves
/// can splash, formed by the two stones in the following lines.
/// TODO: Comment
//
// Dutch original text:
// De mate waarin stenen verzakt zijn en of stenen boven de omliggende stenen uitsteken.
// Dit is slechts relevant voor steenzettingen op de kruin en het binnentalud
// van een havendam. Het gaat om de hoogte van de grootste opstaande rand in de
// zetting, waartegen de golfoverslag kan aanstromen, gevormd door twee stenen in
// opeenvolgende rijen.
///
[Unit(UnitType.Length)]
[Minimum(0)]
[Maximum(1E9)]
[Label("DOneffen")]
[Description("DOneffen")]
[Format("F3")]
[Category("Toplaag")]
[Clearable]
public double DOneffen
{
get
{
return dOneffen;
}
set
{
this.SetAndNotify2(out dOneffen, value, d => d.DOneffen);
}
}
///
/// The depth until which the cast between the blocks has permeated.
/// The average penetration depth in the larger opening around the block is to be measured.
/// That is done on several locations, whereas the smallest value is of relevance.
/// Don't fill in anything if the top layer is not cast.
/// TODO: Comment
//
// Dutch original text:
// De diepte tot waar de ingieting tussen de stenen is doorgedrongen.
// Men dient de gemiddelde penetratiediepte in de grotere openingen
// rondom een steen te meten. Dit doet men vervolgens op meerdere locaties,
// waarbij de kleinste waarde maatgevend is. Vul niets in als de toplaag
// niet is ingegoten.
///
[Unit(UnitType.Length)]
[Minimum(0)]
[Maximum(1E9)]
[Label("IngegotenToplaagDiepte")]
[Description("IngegotenToplaagDiepte")]
[Format("F3")]
[Category("IngegotenToplaag")]
[Clearable]
public double IngegotenToplaagDiepte
{
get
{
return ingegotenToplaagDiepte;
}
set
{
this.SetAndNotify2(out ingegotenToplaagDiepte, value, d => d.IngegotenToplaagDiepte);
}
}
///
/// Value for the measurement of the VGD ("valgewichtdeflectie") in MegaPascal. On each level where
/// this is measured, the average value is determined per approximately 10m of the dike.
/// The lowest value is relevant. Dont fill in anything if there has been no VGD measurement.
/// TODO: Comment
//
// Dutch original text:
// Waarde van de valgewichtdeflectiemeting in megapascal. Op elk niveau waar dit
// gemeten wordt, bepaald men de gemiddelde waarde per ca 10 m dijkstrekking.
// De laagste waarde is vervolgens maatgevend.
// Vul niets in als er geen VGD meting is uitgevoerd.
///
[Unit(UnitType.Pressure)] // GPa
[Minimum(0)]
[Label("IngegotenToplaagVGD")]
[Description("IngegotenToplaagVGD")]
[Format("F3")]
[Category("IngegotenToplaag")]
[Clearable]
public double IngegotenToplaagVgd
{
get
{
return ingegotenToplaagVgd;
}
set
{
this.SetAndNotify2(out ingegotenToplaagVgd, value, d => d.IngegotenToplaagDiepte);
}
}
///
/// Average slit width of the slits which run up along the slope. In case of
/// Block settlements with very varying slits (such as basalt) it can also be sufficient to
/// fill in only the relative open surface. This cell then stays empty.
/// TODO: Comment
//
// Dutch original text:
// Gemiddelde spleetbreedte van de spleten die langs het talud
// omhoog lopen. In geval van steenzetting met erg varierende spleten
// (zoals basalt) kan ook volstaan worden met het invoeren van alleen het
// relatieve open oppervlak. Deze cel blijft dan blanco.
///
[Unit(UnitType.TinyLength)]
[Minimum(0)]
[Maximum(1E9)]
[Label("SpleetBreedteStootVoeg")]
[Description("SpleetBreedteStootVoeg")]
[Format("F3")]
[Category("SpleetBreedte")]
[Clearable]
public double SpleetBreedteStootVoeg
{
get
{
return spleetBreedteStootVoeg;
}
set
{
this.SetAndNotify2(out spleetBreedteStootVoeg, value, d => d.SpleetBreedteStootVoeg);
}
}
///
/// Average "slit width of the slits which run parllel to the waterline. In case of
/// block settlements with very varying slits (such as basalt) it can also be sufficient to
/// fill in only the relative open surface. This cell then stays empty.
/// TODO: Comment
//
// Dutch original text:
// Gemiddelde spleetbreedte van de spleten die evenwijdig aan
// de waterlijn lopen. In geval van steenzetting met erg varierende spleten (zoals basalt)
// kan ook volstaan worden met het invoeren van alleen
// het relatieve open oppervlak. Deze cel blijft dan blanco.
///
[Unit(UnitType.TinyLength)]
[Minimum(0)]
[Maximum(1E9)]
[Label("SpleetBreedteLangsVoeg")]
[Description("SpleetBreedteLangsVoeg")]
[Format("F3")]
[Category("SpleetBreedte")]
[Clearable]
public double SpleetBreedteLangsVoeg
{
get
{
return spleetBreedteLangsVoeg;
}
set
{
this.SetAndNotify2(out spleetBreedteLangsVoeg, value, d => d.SpleetBreedteLangsVoeg);
}
}
///
/// The coding of the type top layer can be found on the worksheet 'Info', for example 26.0 for basalt
/// or 28.51 for casting asfalt with granit. Fill this code in as a number. See Chapter 1 in the
/// 'TR-Steenzettingen'.
/// TODO: Comment
//
// Dutch original text:
// De codering van het type toplaag is te vinden op het werkblad 'Info',
// bijvoorbeeld 26.0 voor basalt of 28.51 voor met gietasfalt ingegoten graniet.
// Vul de code in als getal. Zie ook hoofdstuk 1 in TR-Steenzettingen.
///
[Label("TopLaagType")]
[Description("TopLaagType")]
[Category("Type")]
[Clearable]
public TopLayerType TopLayerMaterial
{
get
{
return topLayerMaterial;
}
set
{
this.SetAndNotify2(out topLayerMaterial, value, x => x.TopLayerMaterial);
}
}
///
/// Returns a that represents this instance.
///
///
/// "Top Layer Data"
///
public override string ToString()
{
return "Top Layer Data";
}
public object Clone()
{
return new BlockRevetmentTopLayerData
{
topLayerThickness = topLayerThickness,
averageBlockWidth = averageBlockWidth,
averageBlockLength = averageBlockLength,
omega = omega,
characteristicOpenDiameter = characteristicOpenDiameter,
rho = rho,
ingewassen = ingewassen,
d15Inwas = d15Inwas,
goedGeklemd = goedGeklemd,
dOneffen = dOneffen,
ingegotenToplaagDiepte = ingegotenToplaagDiepte,
ingegotenToplaagVgd = ingegotenToplaagVgd,
spleetBreedteStootVoeg = spleetBreedteStootVoeg,
spleetBreedteLangsVoeg = spleetBreedteLangsVoeg,
topLayerMaterial = (TopLayerType) topLayerMaterial.Clone(),
holes = holes.Select(h => h.Clone()).Cast().ToList()
};
}
}
}