﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:include schemaLocation="WTIGeometry.xsd" />
  <xs:include schemaLocation="WTISoilModel.xsd" />
  <xs:include schemaLocation="WTIWaternetDefinition.xsd" />
  <xs:include schemaLocation="WTIWaternet.xsd" />

  <xs:complexType name="SlipPlaneConstraintsType">
    <xs:attribute name="SlipPlaneMinDepth" type="xs:double" use="required" />
    <xs:attribute name="SlipPlaneMinLength" type="xs:double" use="required" />
    <xs:attribute name="XEntryMin" type="xs:double" use="required" />
    <xs:attribute name="XEntryMax" type="xs:double" use="required" />
    <xs:attribute name="MaxAllowedAngleBetweenSlices" type="xs:double" use="required" />
    <xs:attribute name="RequiredForcePointsInSlices" type="xs:double" use="required" />
  </xs:complexType>

  <xs:complexType name="MultiplicationFactorsCPhiForUpliftType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="MultiplicationFactorsCPhiForUplift">
        <xs:complexType>
          <xs:attribute name="UpliftFactor" type="xs:double" use="required" />
          <xs:attribute name="MultiplicationFactor" type="xs:double" use="required" />
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="UniformLoadsType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="UniformLoad">
        <xs:complexType>
          <xs:attribute name="Key" type="xs:int" use="required" />
          <xs:attribute name="Magnitude" type="xs:double" use="required" />
          <xs:attribute name="DistributionAngle" type="xs:double" use="required" />
          <xs:attribute name="LoadType" type="xs:string" use="required" />
          <xs:attribute name="XStart" type="xs:double" use="required" />
          <xs:attribute name="XEnd" type="xs:double" use="required" />
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="SlipPlanePositionType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="High" />
      <xs:enumeration value="Low" />
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="SpencerSlipPlanesType">
    <xs:sequence>
      <xs:element name="UpperSlipPlane">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Point" type="PointType"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="LowerSlipPlane">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Point" type="PointType"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="Auto" type="xs:boolean" use="required" />
    <xs:attribute name="SlipPlanePosition" type="SlipPlanePositionType" use="required" />
  </xs:complexType>

  <xs:complexType name="CalculationGridType">
    <xs:attribute name="GridXLeft" type="xs:double" use="required" />
    <xs:attribute name="GridXRight" type="xs:double" use="required" />
    <xs:attribute name="GridZTop" type="xs:double" use="required" />
    <xs:attribute name="GridZBottom" type="xs:double" use="required" />
    <xs:attribute name="GridXNumber" type="xs:int" use="required" />
    <xs:attribute name="GridZNumber" type="xs:int" use="required" />
    <xs:attribute name="ZIntervalNumber" type="xs:int" use="required" />
    <xs:attribute name="XIntervalNumber" type="xs:int" use="required" />
  </xs:complexType>

  <xs:simpleType name="ActiveSideType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Left" />
      <xs:enumeration value="Right" />
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="UpliftVanCalculationGridType">
    <xs:sequence>
      <xs:element name="LeftGrid" type="CalculationGridType"/>
      <xs:element name="RightGrid" type="CalculationGridType"/>
      <xs:element name="TangentLines">
        <xs:complexType>
          <xs:attribute name="MaxSpacingBetweenBoundaries" type="xs:double" use="required" />
          <xs:attribute name="TangentLineZTop" type="xs:double" use="required" />
          <xs:attribute name="TangentLineZBottom" type="xs:double" use="required" />
          <xs:attribute name="TangentLineNumber" type="xs:int" use="required" />
          <xs:attribute name="AutomaticAtBoundaries" type="xs:boolean" use="required" />
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="Auto" type="xs:boolean" use="required" />
    <xs:attribute name="Orientation" type="xs:string" use="required" />
    <xs:attribute name="ActiveSide" type="ActiveSideType" use="required" />
  </xs:complexType>

  <xs:complexType name="GeneticAlgorithmOptionsType">
    <xs:attribute name="EliteCount" type="xs:int" use="required" />
    <xs:attribute name="PopulationCount" type="xs:int" use="required" />
    <xs:attribute name="GenerationCount" type="xs:int" use="required" />
    <xs:attribute name="MutationRate" type="xs:double" use="required" />
    <xs:attribute name="CrossOverScatterFraction" type="xs:double" use="required" />
    <xs:attribute name="CrossOverSinglePointFraction" type="xs:double" use="required" />
    <xs:attribute name="CrossOverDoublePointFraction" type="xs:double" use="required" />
    <xs:attribute name="MutationJumpFraction" type="xs:double" use="required" />
    <xs:attribute name="MutationCreepFraction" type="xs:double" use="required" />
    <xs:attribute name="MutationInverseFraction" type="xs:double" use="required" />
    <xs:attribute name="MutationCreepReduction" type="xs:double" use="required" />
    <xs:attribute name="Seed" type="xs:int" use="required" />
  </xs:complexType>

  <xs:complexType name="LevenbergMarquardtOptionsType">
    <xs:attribute name="IterationCount" type="xs:int" use="required" />
    <xs:attribute name="Shift" type="xs:double" use="required" />
    <xs:attribute name="DriftGrant" type="xs:double" use="required" />
    <xs:attribute name="ParameterCount" type="xs:int" use="required" />
    <xs:attribute name="VariableCount" type="xs:int" use="required" />
  </xs:complexType>

  <xs:simpleType name="ModelOptionType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Bishop" />
      <xs:enumeration value="Spencer" />
      <xs:enumeration value="UpliftVan" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="SearchAlgorithmType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Grid" />
      <xs:enumeration value="Genetic" />
      <xs:enumeration value="LevenbergMarquardt" />
      <xs:enumeration value="GeneticAndLevenbergMarquardt" />
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="WTIStabilityModelType">
    <xs:sequence>
      <xs:element name="SoilModel" type="SoilModelType"/>
      <xs:element name="SoilProfile" type="SoilProfileType"/>
      <xs:element name="SurfaceLine" type="SurfaceLineType" />
      <xs:element name="Location" type="LocationType"/>
      <xs:element name="PreconsolidationStresses" type="PreconsolidationStressListType"/>
      <xs:element name="UniformLoads" type="UniformLoadsType"/>
      <xs:element name="ConsolidationValues" type="ConsolidationValuesType"/>
      <xs:element name="MultiplicationFactorsCPhiForUplift" type="MultiplicationFactorsCPhiForUpliftType"/>
      <xs:element name="Waternet" type="WaternetType"/>
      <xs:element name="SpencerSlipPlanes" type="SpencerSlipPlanesType"/>
      <xs:element name="UpliftVanCalculationGrid" type="UpliftVanCalculationGridType"/>
      <xs:element name="SlipPlaneConstraints" type="SlipPlaneConstraintsType"/>
      <xs:element name="GeneticAlgorithmOptions" type="GeneticAlgorithmOptionsType"/>
      <xs:element name="LevenbergMarquardtOptions" type="LevenbergMarquardtOptionsType" />
    </xs:sequence>
    <xs:attribute name="ModelUncertaintyParameter" type="xs:double" use="required" />
    <xs:attribute name="OnlyMinimumSafetyCurve" type="xs:boolean" use="required" />
    <xs:attribute name="ModelOption" type="ModelOptionType" use="required" />
    <xs:attribute name="SearchAlgorithm" type="SearchAlgorithmType" use="required" />
    <xs:attribute name="MaximumSliceWidth" type="xs:double" use="required" />
    <xs:attribute name="MoveGrid" type="xs:boolean" use="required" />
  </xs:complexType>

  <xs:element name="WTIStabilityModel" type="WTIStabilityModelType" />

</xs:schema>