From 6b361fc90873d10a2c3fcbe93921b6fd9a8497b0 Mon Sep 17 00:00:00 2001
From: mattijs <mattijs@hunt.opencfd.co.uk>
Date: Fri, 2 May 2008 08:50:14 +0100
Subject: [PATCH] New fvMotionSolver. Small fix to foamDebugSwitches

---
 .../foamDebugSwitches/Make/options            |   35 +-
 etc/controlDict                               | 1426 +++++++++--------
 .../autoHexMeshDriverLayers.C                 |    3 +-
 src/fvMotionSolver/Make/files                 |    1 +
 .../displacementInterpolationFvMotionSolver.C |  465 ++++++
 .../displacementInterpolationFvMotionSolver.H |  156 ++
 6 files changed, 1424 insertions(+), 662 deletions(-)
 create mode 100644 src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.C
 create mode 100644 src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.H

diff --git a/applications/utilities/miscellaneous/foamDebugSwitches/Make/options b/applications/utilities/miscellaneous/foamDebugSwitches/Make/options
index 2c19af49770..161b9c3c8ee 100644
--- a/applications/utilities/miscellaneous/foamDebugSwitches/Make/options
+++ b/applications/utilities/miscellaneous/foamDebugSwitches/Make/options
@@ -1,26 +1,43 @@
 EXE_LIBS = \
-    -lLESfilters \
-    -lODE \
-    -lcompressibleLESmodels \
-    \
+    -lautoMesh \
     -lbasicThermophysicalModels \
-    -lfiniteVolume \
+    -lchemistryModel \
     -lcombustionThermophysicalModels \
+    -lcompressibleLESmodels \
     -lcompressibleTurbulenceModels \
+    -ldecompositionMethods \
     -ldieselSpray \
+    -ldynamicFvMesh \
+    -ldynamicMesh \
     -ledgeMesh \
     -lengine \
     -lerrorEstimation \
-    -ldynamicMesh \
+    -lfiniteVolume \
+    -lforces \
+    -lfvMotionSolvers \
+    -lincompressibleLESmodels \
     -lincompressibleTransportModels \
     -lincompressibleTurbulenceModels \
-    -lincompressibleLESmodels \
+    -linterfaceProperties \
+    -llagrangianIntermediate \
     -llagrangian \
     -llaminarFlameSpeedModels \
+    -lLESdeltas \
+    -lLESfilters \
+    -lliquidMixture \
     -lliquids \
+    -lmeshTools \
+    -lODE \
+    -lOpenFOAM \
+    -lpdf \
+    -lphaseModel \
+    -lradiation \
     -lrandomProcesses \
     -lsampling \
+    -lsolidMixture \
+    -lsolids \
     -lspecie \
     -lthermophysicalFunctions \
-    -ltriSurface \
-    -lpdf
+    -ltopoChangerFvMesh \
+    -ltriSurface
+
diff --git a/etc/controlDict b/etc/controlDict
index f27014e5f87..9017bbdd3a1 100644
--- a/etc/controlDict
+++ b/etc/controlDict
@@ -75,657 +75,781 @@ Documentation
 
 DebugSwitches
 {
-    aC11H10         0;
-    addCell         0;
-    addFace         0;
-    addPoint        0;
-    algebraicPair   0;
-    amgCoupledInterface 0;
-    amgInterfaceField 0;
-    anisotropic     0;
-    APIdiffCoefFunc 0;
-    Ar              0;
-    areaScalarField 0;
-    areaTensorField 0;
-    areaVectorField 0;
-    atomizationModel 0;
-    attachDetach    0;
-    backward        0;
-    basePatch       0;
-    basicMesh       0;
-    basicMixture    0;
-    basicThermo     0;
-    bC11H10         0;
-    BDCG            0;
-    BICCG           0;
-    BirdCarreau     0;
-    blended         0;
-    blobsSheetAtomization 0;
-    blobsSwirlInjector 0;
-    booleanSurface  0;
-    boundaryCutter  0;
-    boundaryMesh    0;
-    boundaryToFace  0;
-    bounded         0;
-    boundedBackward 0;
-    boxToCell       0;
-    boxToFace       0;
-    boxToPoint      0;
-    breakupModel    0;
-    C10H22          0;
-    C12H26          0;
-    C13H28          0;
-    C14H30          0;
-    C16H34          0;
-    C2H5OH          0;
-    C2H6            0;
-    C2H6O           0;
-    C3H6O           0;
-    C3H8            0;
-    C4H10O          0;
-    C6H14           0;
-    C6H6            0;
-    C7H16           0;
-    C7H8            0;
-    C8H10           0;
-    C8H18           0;
-    C9H20           0;
-    calculated      0;
-    CallbackRegistry 0;
-    Cartesian       0;
-    cell            0;
-    cellClassification 0;
-    cellCuts        0;
-    cellDistFuncs   0;
-    cellLimited     0;
-    cellList        0;
-    cellLooper      0;
-    cellMDLimited   0;
-    cellModeller    0;
-    cellPoint       0;
-    cellPointFace   0;
-    cellSet         0;
-    cellToCell      0;
-    cellToFace      0;
-    cellToPoint     0;
-    cellZone        0;
-    CH3OH           0;
-    chemistryReader 0;
-    chemkinReader   0;
-    ChomiakInjector 0;
-    clippedLinear   0;
-    Cloud           0;
-    CoEuler         0;
-    CoGamma2        0;
-    collisionModel  0;
-    commonRailInjector 0;
-    commSchedule    0;
-    componentMixed  0;
-    compound        0;
-    const           0;
-    constant        0;
-    constInjector   0;
-    coordinateSystem 0;
-    corrected       0;
-    coupled         0;
-    CrankNicholson  0;
-    CrossPowerLaw   0;
-    cubeRootVol     0;
-    cubic           0;
-    cubicCorrection 0;
-    cyclic          0;
-    cyclicLduCoupledInterface 0;
-    cyclicLduInterface 0;
-    cyclicLduInterfaceField 0;
-    cylindrical     0;
-    database        0;
-    dataSchedule    0;
-    DCG             0;
-    DeardorffDiffStress 0;
-    default         0;
-    definedHollowConeInjector 0;
-    definedInjector 0;
-    definedPressureSwirlInjector 0;
-    deformationEnergy 0;
-    diagonal        0;
-    diagonalSolver  0;
-    diagTensorField 0;
-    DIC             0;
-    DICGaussSeidel  0;
-    dictionary      0;
-    DILU            0;
-    dimensionedTypes 0;
-    dimensionSet    1;
-    directCombineFaces 0;
-    directDuplicatePoints 0;
-    directHexRef8   0;
-    directionMixed  0;
-    directMappedPatch 0;
-    directMeshCutAndRemove 0;
-    directPolyTopoChange 0;
-    directRemoveCells 0;
-    directRemoveFaces 0;
-    directRemovePoints 0;
-    disallowGenericFvPatchField 0;
-    disallowGenericPolyPatch 0;
-    dispersionLESModel 0;
-    dispersionModel 0;
-    dispersionRASModel 0;
-    distortionEnergy 0;
-    downwind        0;
-    dragModel       0;
-    dynMixedSmagorinsky 0;
-    dynOneEqEddy    0;
-    dynSmagorinsky  0;
-    edgeInterpolation 0;
-    edgeIntersections 0;
-    edgeList        0;
-    edgeScalarField 0;
-    edgeSurface     0;
-    edgeTensorField 0;
-    edgeVectorField 0;
-    elementScalarField 0;
-    elementTensorField 0;
-    elementVectorField 0;
-    empty           0;
-    engineMesh      0;
-    enrichedPatch   0;
-    entry           0;
-    ETAB            0;
-    Euler           0;
-    evaporationModel 0;
-    exponential     0;
-    extendedLeastSquares 0;
-    extendedLeastSquaresVectors 0;
-    fa              0;
-    faBoundaryMesh  0;
-    faceAreaPair    0;
-    FaceCellWave    0;
-    faceCoupleInfo  0;
-    faceLimited     0;
-    faceList        0;
-    faceMDLimited   0;
-    faceSet         0;
-    faceToCell      0;
-    faceToFace      0;
-    faceToPoint     0;
-    faceZone        0;
-    faMesh          0;
-    faPatchField    0;
-    faScalarMatrix  0;
-    faSchemes       0;
-    fastLduTriLookup 0;
-    faTensorMatrix  0;
-    faVectorMatrix  0;
-    FDIC            0;
-    featureEdgeMesh 0;
-    features        0;
-    fields          0;
-    fieldToCell     0;
-    file            0;
-    fileName        2;
-    finiteVolume    0;
-    fixedEnthalpy   0;
-    fixedFluxBuoyantPressure 0;
-    fixedFluxPressure 0;
-    fixedGradient   0;
-    fixedNormalSlip 0;
-    fixedUnburntEnthalpy 0;
-    fixedValue      0;
-    fixedValueOutflow 0;
-    fluxCorrectedVelocity 0;
-    foamChemistryReader 0;
-    FoamX           0;
-    FoamXError      0;
-    fourth          0;
-    freestream      0;
-    freestreamPressure 0;
-    fv              0;
-    fvMatrix        0;
-    fvMesh          0;
-    fvMeshDistribute 0;
-    fvMotionSolver  0;
-    fvPatchField    0;
-    fvScalarMatrix  0;
-    fvSchemes       0;
-    fvSolution      0;
-    fvSphericalTensorMatrix 0;
-    fvSymmTensorMatrix 0;
-    fvTensorMatrix  0;
-    fvVectorMatrix  0;
-    GAMG            0;
-    gamgAgglomeration 0;
-    gamgInterface   0;
-    gamgInterfaceField 0;
-    Gamma           0;
-    Gamma01         0;
-    Gamma2          0;
-    Gamma201        0;
-    Gamma2Limit     0;
-    Gamma2V         0;
-    GammaLimit      0;
-    GammaV          0;
-    Gauss           0;
-    GaussSeidel     0;
-    general         0;
-    geomCellLooper  0;
-    geometricFields 0;
-    geometricSurfacePatch 0;
-    global          0;
-    globalMeshData  0;
-    globalPoints    0;
-    globalProcessor 0;
-    gnuplot         0;
-    gradientDispersionRAS 0;
-    gradientEnthalpy 0;
-    gradientUnburntEnthalpy 0;
-    Gulders         0;
-    GuldersEGR      0;
-    H2O             0;
-    harmonic        0;
-    hashTable       0;
-    HashTable       0;
-    hCombustionThermo 0;
-    heatTransferModel 0;
-    hexCellLooper   0;
-    hexRef8         0;
-    hhuCombustionThermo 0;
-    hhuMixtureThermo<egrMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>> 0;
-    hhuMixtureThermo<egrMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>> 0;
-    hhuMixtureThermo<homogeneousMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>> 0;
-    hhuMixtureThermo<homogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>> 0;
-    hhuMixtureThermo<inhomogeneousMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>> 0;
-    hhuMixtureThermo<inhomogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>> 0;
-    hhuMixtureThermo<veryInhomogeneousMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>> 0;
-    hhuMixtureThermo<veryInhomogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>> 0;
-    hMixtureThermo<dieselMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>> 0;
-    hMixtureThermo<homogeneousMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>> 0;
-    hMixtureThermo<homogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>> 0;
-    hMixtureThermo<inhomogeneousMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>> 0;
-    hMixtureThermo<inhomogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>> 0;
-    hMixtureThermo<multiComponentMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>> 0;
-    hMixtureThermo<reactingMixture> 0;
-    hMixtureThermo<veryInhomogeneousMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>> 0;
-    hMixtureThermo<veryInhomogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>> 0;
-    hollowConeInjector 0;
-    hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>> 0;
-    hThermo<pureMixture<sutherlandTransport<specieThermo<hConstThermo<perfectGas>>>>> 0;
-    hThermo<pureMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>> 0;
-    IC8H18          0;
-    ICCG            0;
-    IDEA            0;
-    IFstream        0;
-    indexedOctree   0;
-    indexedParticle 0;
-    injectorModel   0;
-    injectorType    0;
-    inletOutlet     0;
-    interpolations  0;
-    intersectedSurface 0;
-    inverseLinear   0;
-    IOobject        0;
-    IOptrList<injector> 0;
-    IOPtrList<injector> 0;
-    IOPtrList<MRFZone> 0;
-    IOPtrList<porousZone> 0;
-    jplot           0;
-    kEpsilon        0;
-    kOmegaSST       0;
-    KRR4            0;
-    labelField      0;
-    labelList       0;
-    labelListList   0;
-    labelToCell     0;
-    labelToFace     0;
-    labelToPoint    0;
-    LamBremhorstKE  0;
-    laminar         0;
-    laminarFlameSpeed 0;
-    laplace         0;
-    LaunderGibsonRSTM 0;
-    LaunderSharmaKE 0;
-    layerAdditionRemoval 0;
-    layered         0;
-    lduCoupledInterface 0;
-    lduInterface    0;
-    lduInterfaceField 0;
-    lduMatrix       1;
-    lduMesh         0;
-    leastSquares    0;
-    leastSquaresVectors 0;
-    LESdelta        0;
-    LESfilter       0;
-    LESmodel        0;
-    level           2;
-    licence         0;
-    LienCubicKE     0;
-    LienCubicKELowRe 0;
-    LienLeschzinerLowRe 0;
-    limited         0;
-    limitedCubic    0;
-    limitedCubic01  0;
-    limitedCubicV   0;
-    limitedGamma    0;
-    limitedLimitedCubic 0;
-    limitedLimitedLinear 0;
-    limitedLinear   0;
-    limitedLinear01 0;
-    limitedLinearV  0;
-    limitedMUSCL    0;
-    LimitedMUSCL    0;
-    limitedSuperBee 0;
-    limitedSurfaceInterpolationScheme 0;
-    limitedVanLeer  0;
-    linear          0;
-    linearUpwind    0;
-    linearUpwindV   0;
-    liquid          0;
-    LISA            0;
-    localBlended    0;
-    localMax        0;
-    localMin        0;
-    localPointRegion 0;
-    locDynOneEqEddy 0;
-    lowReOneEqEddy  0;
-    LRR             0;
-    LRRDiffStress   0;
-    MB              0;
-    mesh            0;
-    meshCutAndRemove 0;
-    meshCutter      0;
-    meshModifier    0;
-    meshMorphEngine 0;
-    meshSearch      0;
-    meshToMesh      0;
-    meshWave        0;
-    MeshWave        0;
-    midPoint        0;
-    minMod          0;
-    mixed           0;
-    mixedEnthalpy   0;
-    mixedSmagorinsky 0;
-    mixedUnburntEnthalpy 0;
-    modifyCell      0;
-    modifyFace      0;
-    modifyPoint     0;
-    motionDiff      0;
-    motionSmoother  0;
-    motionSolver    0;
-    movingWallVelocity 0;
-    multiDirRefinement 0;
-    multivariateSelection 0;
-    MUSCL           0;
-    MUSCL01         0;
-    muSgsWallFunction 0;
-    N2              0;
-    nbrToCell       0;
-    nearestToCell   0;
-    Newtonian       0;
-    noDragModel     0;
-    none            0;
-    NonlinearKEShih 0;
-    normal          0;
-    normalToFace    0;
-    NSRDSfunc0      0;
-    NSRDSfunc1      0;
-    NSRDSfunc14     0;
-    NSRDSfunc2      0;
-    NSRDSfunc3      0;
-    NSRDSfunc4      0;
-    NSRDSfunc5      0;
-    NSRDSfunc6      0;
-    NSRDSfunc7      0;
-    nuSgsWallFunction 0;
-    nutStandardRoughWallFunction 0;
-    nutStandardWallFunction 0;
-    nutWallFunction 0;
-    objectRegistry  0;
-    octree          0;
-    octreeDataEdges 0;
-    octreeDataFace  0;
-    octreeDataFaceList 0;
-    octreeDataTriSurface 0;
-    ODESolver       0;
-    off             0;
-    OFstream        0;
-    oneEqEddy       0;
-    orientedSurface 0;
-    ORourke         0;
-    oscillatingFixedValue 0;
-    outletInlet     0;
-    outletStabilised 0;
-    PackedList      0;
-    pair            0;
-    parabolicCylindrical 0;
-    parallelInfo    0;
-    parcel          0;
-    ParSortableList 0;
-    partialSlip     0;
-    passiveParticle 0;
-    patch           0;
-    patchEnhanced   0;
-    patchFields     0;
-    patchToFace     0;
-    PatchToPatchInterpolation 0;
-    patchZones      0;
-    PBiCG           0;
-    PCG             0;
-    pdf             0;
-    perfectInterface 0;
-    Phi             0;
-    PointEdgeWave   0;
-    pointIndexHitList 0;
-    PointPatchField 0;
-    pointPatchInterpolation 0;
-    pointScalarField 0;
-    pointScalarField::DimensionedInternalField 0;
-    pointSet        0;
-    pointSphericalTensorField 0;
-    pointSphericalTensorField::DimensionedInternalField 0;
-    pointSymmTensorField 0;
-    pointSymmTensorField::DimensionedInternalField 0;
-    pointTensorField 0;
-    pointTensorField::DimensionedInternalField 0;
-    pointToCell     0;
-    pointToFace     0;
-    pointToPoint    0;
-    pointVectorField 0;
-    pointVectorField::DimensionedInternalField 0;
-    pointZone       0;
-    polyBoundaryMesh 0;
-    polyMesh        0;
-    polyMeshMorphEngine 0;
-    polyTopoChange  0;
-    polyTopoChanger 0;
-    Prandtl         0;
-    pressureDirectedInletOutletVelocity 0;
-    pressureDirectedInletVelocity 0;
-    pressureInletOutletVelocity 0;
-    pressureInletUniformVelocity 0;
-    pressureInletVelocity 0;
-    pressureSwirlInjector 0;
-    pressureTransmissive 0;
-    primitiveMesh   0;
-    PrimitivePatch  0;
-    probes          0;
-    processor       0;
-    processorLduCoupledInterface 0;
-    processorLduInterface 0;
-    processorLduInterfaceField 0;
-    pseudoSolid     0;
-    Pstream         0;
-    pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>> 0;
-    pureMixture<sutherlandTransport<specieThermo<hConstThermo<perfectGas>>>> 0;
-    pureMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>> 0;
-    quadratic       0;
-    QUICK           0;
-    QZeta           0;
-    RanzMarshall    0;
-    raw             0;
-    reaction        0;
-    realizableKE    0;
-    refinementHistory 0;
-    refinementIterator 0;
-    reflect         0;
-    regionSplit     0;
-    regIOobject     0;
-    ReitzDiwakar    0;
-    ReitzKHRT       0;
-    remove          0;
-    removeCell      0;
-    removeCells     0;
-    removeFace      0;
-    removeFaces     0;
-    removePoint     0;
-    repatchPolyMesh 0;
-    reverseLinear   0;
-    rhoMUSCL        0;
-    RK              0;
-    RNGkEpsilon     0;
-    RosinRammler    0;
-    rotatedBoxToCell 0;
-    rotatingPressureInletOutletVelocity 0;
-    rotatingTotalPressure 0;
-    RutlandFlashBoil 0;
-    saturateEvaporationModel 0;
-    scalarField     0;
-    scaleSimilarity 0;
-    setUpdater      0;
-    SFCD            0;
-    SFCDV           0;
-    shapeList       0;
-    shapeToCell     0;
-    SHF             0;
-    SIBS            0;
-    simple          0;
-    skewCorrected   0;
-    skewCorrectionVectors 0;
-    skewLinear      0;
-    sliced          0;
-    slidingInterface 0;
-    slip            0;
-    Smagorinsky     0;
-    Smagorinsky2    0;
-    smooth          0;
-    smoothSolver    0;
-    solution        0;
-    SpalartAllmaras 0;
-    spectEddyVisc   0;
-    spherical       0;
-    sphericalTensorField 0;
-    standardDragModel 0;
-    standardEvaporationModel 0;
-    static          0;
-    StaticHashTable 0;
-    steadyState     0;
-    stochasticDispersionRAS 0;
-    string          0;
-    SuperBee        0;
-    SuperBee01      0;
-    supersonicFreestream 0;
-    surfaceFeatures 0;
-    surfaceInterpolation 0;
-    surfaceInterpolationScheme 0;
-    surfaceIntersection 0;
-    surfaceNormalFixedValue 0;
-    surfacePatch    0;
-    surfacePatchIOList 0;
-    surfaceScalarField 0;
-    surfaceScalarField::DimensionedInternalField 0;
-    surfaceSnap     0;
-    surfaceSphericalTensorField 0;
-    surfaceSphericalTensorField::DimensionedInternalField 0;
-    surfaceSymmTensorField 0;
-    surfaceSymmTensorField::DimensionedInternalField 0;
-    surfaceTensorField 0;
-    surfaceTensorField::DimensionedInternalField 0;
-    surfaceToCell   0;
-    surfaceToPoint  0;
-    surfaceVectorField 0;
-    surfaceVectorField::DimensionedInternalField 0;
-    swirlInjector   0;
-    symmetryPlane   0;
-    symmTensorField 0;
-    syringePressure 0;
-    TAB             0;
-    tensorField     0;
-    tetFemMatrix    0;
-    tetFemScalarMatrix 0;
-    tetFemTensorMatrix 0;
-    tetFemVectorMatrix 0;
-    tetPointScalarField 0;
-    tetPointTensorField 0;
-    tetPointVectorField 0;
-    tetPolyMesh     0;
-    tetPolyPatchFields 0;
-    thermo          0;
-    thermophysicalFunction 0;
-    time            0;
-    timer           0;
-    timeVaryingMappedFixedValue 0;
-    timeVaryingUniformFixedValue 0;
-    topoAction      0;
-    topoCellLooper  0;
-    topoSet         0;
-    topoSetSource   0;
-    toroidal        0;
-    totalPressure   0;
-    totalTemperature 0;
-    trajectory      0;
-    transform       0;
-    transportModel  0;
-    treeDataTriSurface 0;
-    treeLeaf        0;
-    treeNode        0;
-    triSurface      0;
-    turbulenceModel 0;
-    turbulentInlet  0;
-    UMIST           0;
-    uncorrected     0;
-    undoableMeshCutter 0;
-    uniform         0;
-    uniformFixedValue 0;
-    unitInjector    0;
-    unix            0;
-    Unix            0;
-    upwind          0;
-    value           0;
-    valueStored     0;
-    vanDriest       0;
-    vanLeer         0;
-    vanLeer01       0;
-    vanLeerV        0;
-    vector          0;
-    vector2DField   0;
-    vectorField     0;
-    viscosityModel  0;
-    volPointInterpolation 0;
-    volScalarField  0;
-    volScalarField::DimensionedInternalField 0;
-    volSphericalTensorField 0;
-    volSphericalTensorField::DimensionedInternalField 0;
-    volSymmTensorField 0;
-    volSymmTensorField::DimensionedInternalField 0;
-    volTensorField  0;
-    volTensorField::DimensionedInternalField 0;
-    volVectorField  0;
-    volVectorField::DimensionedInternalField 0;
-    walkPatch       0;
-    wall            0;
-    wallBuoyantPressure 0;
-    wallHeatTransfer 0;
-    wallLayerCells  0;
-    wallModel       0;
-    waveTransmissive 0;
-    wedge           0;
-    weighted        0;
-    word            2;
-    writer          0;
-    xmgr            0;
-    zeroGradient    0;
-    zoneToCell      0;
-    zoneToFace      0;
-    zoneToPoint     0;
+    APIdiffCoefFunc
+    Ar
+    BICCG
+    BirdCarreau
+    C10H22
+    C12H26
+    C13H28
+    C14H30
+    C16H34
+    C2H5OH
+    C2H6
+    C2H6O
+    C3H6O
+    C3H8
+    C4H10O
+    C6H14
+    C6H6
+    C7H16
+    C7H8
+    C8H10
+    C8H18
+    C9H20
+    CH3OH
+    CallbackRegistry
+    CarnahanStarling
+    ChomiakInjector
+    Cloud<indexedParticle>
+    Cloud<kinematicParcel>
+    Cloud<parcel>
+    Cloud<passiveParticle>
+    Cloud<reactingParcel>
+    Cloud<thermoParcel>
+    Cloud<trackedParticle>
+    CoEuler
+    CompositionModel
+    ConstantRateDevolatilisation
+    CrankNicholson
+    CrossPowerLaw
+    Cs
+    DIC
+    DICGaussSeidel
+    DILU
+    DILUGaussSeidel
+    DeardorffDiffStress
+    DispersionModel
+    DispersionRASModel
+    DragModel
+    ETAB
+    Ergun
+    Euler
+    EulerImplicit
+    EulerRotation
+    FDIC
+    FaceCellWave
+    GAMG
+    GAMGAgglomeration
+    GAMGInterface
+    GAMGInterfaceField
+    Gamma
+    Gamma01
+    GammaV
+    Gauss
+    GaussSeidel
+    Gibilaro
+    Gidaspow
+    GidaspowErgunWenYu
+    GidaspowSchillerNaumann
+    GradientDispersionRAS
+    Gulders
+    GuldersEGR
+    H2O
+    HashTable
+    HeatTransferModel
+    HrenyaSinclair
+    IC8H18
+    ICCG
+    IDEA
+    IFstream
+    IOPtrList<MRFZone>
+    IOPtrList<coordinateSystem>
+    IOPtrList<injector>
+    IOPtrList<porousZone>
+    IOobject
+    InjectionModel
+    JohnsonJackson
+    KRR4
+    KinematicCloud<kinematicParcel>
+    KinematicCloud<reactingParcel>
+    KinematicCloud<thermoParcel>
+    KinematicParcel<reactingParcel>
+    KinematicParcel<thermoParcel>
+    LESdelta
+    LESfilter
+    LESmodel
+    LISA
+    LRR
+    LRRDiffStress
+    LamBremhorstKE
+    LaunderGibsonRSTM
+    LaunderSharmaKE
+    LduMatrix
+    LienCubicKE
+    LienCubicKELowRe
+    LienLeschzinerLowRe
+    List<bool>
+    List<complex>
+    List<complexVector>
+    List<edge>
+    List<label>
+    List<scalar>
+    List<sphericalTensor>
+    List<symmTensor>
+    List<tensor>
+    List<vector>
+    Lun
+    LunSavage
+    MB
+    MC
+    MCV
+    MUSCL
+    MUSCL01
+    MUSCLV
+    ManualInjection
+    MarshakRadiation
+    MarshakRadiationFixedT
+    MassTransferModel
+    MeshWave
+    Minmod
+    MinmodV
+    N2
+    NSRDSfunc0
+    NSRDSfunc1
+    NSRDSfunc14
+    NSRDSfunc2
+    NSRDSfunc3
+    NSRDSfunc4
+    NSRDSfunc5
+    NSRDSfunc6
+    NSRDSfunc7
+    Newtonian
+    NoDispersion
+    NoDrag
+    NoHeatTransfer
+    NoInjection
+    NoMassTransfer
+    NoSurfaceReaction
+    NonlinearKEShih
+    ODE
+    ODESolver
+    OFstream
+    ORourke
+    OSPRE
+    OSPREV
+    P1
+    PBiCG
+    PCG
+    PackedList
+    ParSortableList
+    PatchToPatchInterpolation
+    Phi
+    PointEdgeWave
+    Prandtl
+    PrimitivePatch
+    Pstream
+    QUICK
+    QUICKV
+    QZeta
+    RK
+    RNGkEpsilon
+    RanzMarshall
+    ReactingCloud<reactingParcel>
+    ReactingParcel<reactingParcel>
+    Rebound
+    ReitzDiwakar
+    ReitzKHRT
+    RosinRammler
+    RutlandFlashBoil
+    SDA
+    SFCD
+    SFCDV
+    SHF
+    SIBS
+    SKA
+    SLTS
+    STARCDRotation
+    Schaeffer
+    SchillerNaumann
+    SinclairJackson
+    SingleKineticRateDevolatilisation
+    SingleMixtureFraction
+    Smagorinsky
+    SmoothSolver
+    SpalartAllmaras
+    SphereDrag
+    StandardWallInteraction
+    StaticHashTable
+    StochasticDispersionRAS
+    SuperBee
+    SuperBeeV
+    SurfaceReactionModel
+    Syamlal
+    SyamlalOBrien
+    SyamlalRogersOBrien
+    TAB
+    ThermoCloud<reactingParcel>
+    ThermoCloud<thermoParcel>
+    ThermoParcel<reactingParcel>
+    ThermoParcel<thermoParcel>
+    UMIST
+    UMISTV
+    Unix
+    WallInteractionModel
+    WenYu
+    aC11H10
+    absorptionEmissionModel
+    addCell
+    addFace
+    addPatchCellLayer
+    addPoint
+    advective
+    algebraicPair
+    angularOscillatingDisplacement
+    angularOscillatingVelocity
+    anisotropic
+    ash
+    atomizationModel
+    attachDetach
+    autoHexMeshDriver
+    bC11H10
+    backward
+    basePatch
+    basicKinematicCloud
+    basicMixture
+    basicReactingCloud
+    basicThermo
+    basicThermoCloud
+    binaryAbsorptionEmission
+    blended
+    blobsSheetAtomization
+    blobsSwirlInjector
+    booleanSurface
+    boundaryCutter
+    boundaryMesh
+    boundaryToFace
+    boundedBackward
+    boxToCell
+    boxToFace
+    boxToPoint
+    breakupModel
+    calculated
+    cartesian
+    cell
+    cellClassification
+    cellCuts
+    cellDistFuncs
+    cellLimited
+    cellList
+    cellLooper
+    cellMDLimited
+    cellMotion
+    cellPoint
+    cellPointFace
+    cellPointWeight
+    cellSet
+    cellToCell
+    cellToFace
+    cellToPoint
+    cellZone
+    chemistryReader
+    chemistrySolver
+    chemkinReader
+    clippedLinear
+    cloud
+    cloudAbsorptionEmission
+    cloudScatter
+    collisionModel
+    combineFaces
+    commSchedule
+    commonRailInjector
+    compound
+    conductivityModel
+    constInjector
+    constant
+    constantAbsorptionEmission
+    constantGammaContactAngle
+    constantScatter
+    coordinateRotation
+    coordinateSystem
+    corrected
+    coupled
+    cubeRootVol
+    cubic
+    curve
+    cyclic
+    cyclicLduInterface
+    cyclicLduInterfaceField
+    cylindrical
+    dataSchedule
+    decompositionMethod
+    definedHollowConeInjector
+    definedInjector
+    definedPressureSwirlInjector
+    diagTensorField
+    diagonal
+    dictionary
+    dimensionSet
+    directMapped
+    directMappedPatch
+    directionMixed
+    directional
+    disallowDefaultFvsPatchField
+    disallowGenericFvPatchField
+    disallowGenericPointPatchField
+    disallowGenericPolyPatch
+    dispersionLESModel
+    dispersionModel
+    dispersionRASModel
+    displacementComponentLaplacian
+    displacementInterpolation
+    displacementLaplacian
+    displacementSBRStress
+    downwind
+    dragModel
+    duplicatePoints
+    dx
+    dynMixedSmagorinsky
+    dynOneEqEddy
+    dynSmagorinsky
+    dynamicFvMesh
+    dynamicGammaContactAngle
+    dynamicInkJetFvMesh
+    dynamicMotionSolverFvMesh
+    dynamicRefineFvMesh
+    edgeIntersections
+    edgeList
+    edgeSurface
+    empty
+    engineMesh
+    enrichedPatch
+    errorDrivenRefinement
+    evaporationModel
+    exponential
+    extendedLeastSquares
+    extendedLeastSquaresVectors
+    face
+    faceAreaPair
+    faceCoupleInfo
+    faceLimited
+    faceList
+    faceMDLimited
+    faceSet
+    faceToCell
+    faceToFace
+    faceToPoint
+    faceZone
+    fan
+    featureEdgeMesh
+    fieldToCell
+    file
+    fileName
+    filteredLinear
+    filteredLinear2
+    filteredLinear2V
+    fixedEnthalpy
+    fixedFluxBuoyantPressure
+    fixedFluxPressure
+    fixedGradient
+    fixedNormalSlip
+    fixedUnburntEnthalpy
+    fixedValue
+    fluxCorrectedVelocity
+    foamChemistryReader
+    foamFile
+    forceCoeffs
+    forces
+    fourth
+    freestream
+    freestreamPressure
+    frictionalStressModel
+    functionObject
+    fv
+    fvMesh
+    fvMeshDistribute
+    fvMotionSolver
+    fvPatchField
+    fvScalarMatrix
+    fvSchemes
+    fvSphericalTensorMatrix
+    fvSymmTensorMatrix
+    fvTensorMatrix
+    fvVectorMatrix
+    fvsPatchField
+    gammaContactAngle
+    gammaFixedPressure
+    general
+    generic
+    genericPatch
+    geomCellLooper
+    geometricSurfacePatch
+    global
+    globalMeshData
+    globalPoints
+    gnuplot
+    gradientDispersionRAS
+    gradientEnthalpy
+    gradientUnburntEnthalpy
+    granularPressureModel
+    hCombustionThermo
+    hMixtureThermo<dieselMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>
+    hMixtureThermo<homogeneousMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>
+    hMixtureThermo<homogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>
+    hMixtureThermo<inhomogeneousMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>
+    hMixtureThermo<inhomogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>
+    hMixtureThermo<multiComponentMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>
+    hMixtureThermo<reactingMixture>
+    hMixtureThermo<veryInhomogeneousMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>
+    hMixtureThermo<veryInhomogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>
+    hThermo<pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>
+    hThermo<pureMixture<sutherlandTransport<specieThermo<hConstThermo<perfectGas>>>>>
+    hThermo<pureMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>
+    harmonic
+    heatTransferModel
+    hexCellLooper
+    hexRef8
+    hhuCombustionThermo
+    hhuMixtureThermo<egrMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>
+    hhuMixtureThermo<egrMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>
+    hhuMixtureThermo<homogeneousMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>
+    hhuMixtureThermo<homogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>
+    hhuMixtureThermo<inhomogeneousMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>
+    hhuMixtureThermo<inhomogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>
+    hhuMixtureThermo<veryInhomogeneousMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>>
+    hhuMixtureThermo<veryInhomogeneousMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>>
+    hierarchical
+    hollowConeInjector
+    include
+    indexedOctree
+    indexedParticle
+    injectorModel
+    injectorType
+    inletOutlet
+    inletOutletTotalTemperature
+    inputMode
+    interfaceCompression
+    intersectedSurface
+    inverseDistance
+    inverseFaceDistance
+    inversePointDistance
+    inverseVolume
+    jplot
+    jumpCyclic
+    kEpsilon
+    kOmegaSST
+    kinematicCloud
+    kinematicParcel
+    labelField
+    labelList
+    labelListList
+    labelToCell
+    labelToFace
+    labelToPoint
+    laminar
+    laminarFlameSpeed
+    laplace
+    layerAdditionRemoval
+    layered
+    lduInterface
+    lduInterfaceField
+    lduMatrix
+    lduMesh
+    leastSquares
+    leastSquaresVectors
+    level
+    limited
+    limitedCubic
+    limitedCubic01
+    limitedCubicV
+    limitedGamma
+    limitedLimitedCubic
+    limitedLimitedLinear
+    limitedLinear
+    limitedLinear01
+    limitedLinearV
+    limitedMUSCL
+    limitedSurfaceInterpolationScheme
+    limitedVanLeer
+    linear
+    linearUpwind
+    linearUpwindV
+    liquid
+    locDynOneEqEddy
+    localBlended
+    localMax
+    localMin
+    localPointRegion
+    lowReOneEqEddy
+    manual
+    massFlowRateInletVelocity
+    meshCutAndRemove
+    meshCutter
+    meshModifier
+    meshRefinement
+    meshSearch
+    meshToMesh
+    metis
+    midPoint
+    midPointAndFace
+    mixed
+    mixedEnthalpy
+    mixedSmagorinsky
+    mixedUnburntEnthalpy
+    mixerFvMesh
+    modifyCell
+    modifyFace
+    modifyPoint
+    motionDiffusivity
+    motionDirectional
+    motionSmoother
+    motionSolver
+    movingConeTopoFvMesh
+    movingWallVelocity
+    muSgsWallFunction
+    multiDirRefinement
+    multivariateSelection
+    mutStandardRoughWallFunction
+    nbrToCell
+    nearestToCell
+    noAbsorptionEmission
+    noDragModel
+    noRadiation
+    none
+    normal
+    normalToFace
+    nuSgsWallFunction
+    null
+    nutStandardRoughWallFunction
+    nutStandardWallFunction
+    nutWallFunction
+    objectRegistry
+    octree
+    octreeDataEdges
+    octreeDataFace
+    octreeDataFaceList
+    octreeDataTriSurface
+    off
+    offsetTriSurfaceMesh
+    oneEqEddy
+    orientedSurface
+    oscillatingDisplacement
+    oscillatingFixedValue
+    oscillatingVelocity
+    outletInlet
+    outletStabilised
+    pair
+    parabolicCylindrical
+    parcel
+    partialSlip
+    passiveParticle
+    patch
+    patchToFace
+    patchZones
+    pdf
+    perfectInterface
+    pointIndexHitList
+    pointPatchField
+    pointPatchInterpolation
+    pointScalarField
+    pointScalarField::DimensionedInternalField
+    pointSet
+    pointSphericalTensorField
+    pointSphericalTensorField::DimensionedInternalField
+    pointSymmTensorField
+    pointSymmTensorField::DimensionedInternalField
+    pointTensorField
+    pointTensorField::DimensionedInternalField
+    pointToCell
+    pointToFace
+    pointToPoint
+    pointVectorField
+    pointVectorField::DimensionedInternalField
+    pointZone
+    polyBoundaryMesh
+    polyMesh
+    polyMeshGeometry
+    polyMeshInfo
+    polyTopoChange
+    polyTopoChanger
+    pressureDirectedInletOutletVelocity
+    pressureDirectedInletVelocity
+    pressureInletOutletVelocity
+    pressureInletUniformVelocity
+    pressureInletVelocity
+    pressureSwirlInjector
+    primitiveMesh
+    primitiveMeshGeometry
+    probes
+    processor
+    processorLduInterface
+    processorLduInterfaceField
+    pureMixture<constTransport<specieThermo<hConstThermo<perfectGas>>>>
+    pureMixture<sutherlandTransport<specieThermo<hConstThermo<perfectGas>>>>
+    pureMixture<sutherlandTransport<specieThermo<janafThermo<perfectGas>>>>
+    quadratic
+    radialModel
+    radiationModel
+    raw
+    reactingCloud
+    reactingParcel
+    reaction
+    realizableKE
+    refinementHistory
+    refinementIterator
+    reflect
+    regIOobject
+    regionSplit
+    remove
+    removeCell
+    removeCells
+    removeFace
+    removeFaces
+    removePoint
+    removePoints
+    reverseLinear
+    rotatedBoxToCell
+    rotatingPressureInletOutletVelocity
+    rotatingTotalPressure
+    sampledPatch
+    sampledPlane
+    sampledSet
+    sampledSurface
+    saturateEvaporationModel
+    scalarAverageField
+    scalarField
+    scalarRange
+    scaleSimilarity
+    scatterModel
+    searchableBox
+    searchableSurface
+    sequential
+    setUpdater
+    sets
+    shapeList
+    shapeToCell
+    simple
+    skewCorrected
+    skewCorrectionVectors
+    sliced
+    slidingInterface
+    slip
+    smooth
+    smoothSolver
+    solid
+    solidBodyMotionFunction
+    solidBodyMotionFvMesh
+    solution
+    spectEddyVisc
+    sphereToCell
+    spherical
+    sphericalTensorAverageField
+    sphericalTensorField
+    standardDragModel
+    standardEvaporationModel
+    static
+    staticFvMesh
+    steadyState
+    stl
+    stochasticDispersionRAS
+    string
+    supersonicFreestream
+    surfaceFeatures
+    surfaceInterpolation
+    surfaceInterpolationScheme
+    surfaceIntersection
+    surfaceNormalFixedValue
+    surfacePatch
+    surfacePatchIOList
+    surfaceScalarField
+    surfaceScalarField::DimensionedInternalField
+    surfaceSlipDisplacement
+    surfaceSphericalTensorField
+    surfaceSphericalTensorField::DimensionedInternalField
+    surfaceSymmTensorField
+    surfaceSymmTensorField::DimensionedInternalField
+    surfaceTensorField
+    surfaceTensorField::DimensionedInternalField
+    surfaceToCell
+    surfaceToPoint
+    surfaceVectorField
+    surfaceVectorField::DimensionedInternalField
+    surfaceWriter
+    surfaces
+    swirlInjector
+    symmTensorAverageField
+    symmTensorField
+    symmetryPlane
+    syringePressure
+    tensorAverageField
+    tensorField
+    thermoCloud
+    thermoParcel
+    thermophysicalFunction
+    time
+    timeVaryingGammaContactAngle
+    timeVaryingMappedFixedValue
+    timeVaryingUniformFixedValue
+    timer
+    topoAction
+    topoCellLooper
+    topoChangerFvMesh
+    topoSet
+    topoSetSource
+    toroidal
+    totalPressure
+    totalTemperature
+    trackedParticle
+    trajectory
+    transform
+    treeDataCell
+    treeDataFace
+    treeDataTriSurface
+    treeLeaf
+    treeNode
+    triSurface
+    triSurfaceMesh
+    triSurfaceMeshes
+    turbulenceModel
+    turbulentInlet
+    turbulentIntensityKineticEnergyInlet
+    turbulentMixingLengthDissipationRateInlet
+    uncorrected
+    undoableMeshCutter
+    uniform
+    uniformFixedValue
+    unitInjector
+    upwind
+    value
+    vanAlbada
+    vanAlbadaV
+    vanDriest
+    vanLeer
+    vanLeer01
+    vanLeerV
+    vector2DField
+    vectorAverageField
+    vectorField
+    velocityComponentLaplacian
+    velocityLaplacian
+    viscosityModel
+    volPointInterpolation
+    volScalarField
+    volScalarField::DimensionedInternalField
+    volSphericalTensorField
+    volSphericalTensorField::DimensionedInternalField
+    volSymmTensorField
+    volSymmTensorField::DimensionedInternalField
+    volTensorField
+    volTensorField::DimensionedInternalField
+    volVectorField
+    volVectorField::DimensionedInternalField
+    vtk
+    walkPatch
+    wall
+    wallHeatTransfer
+    wallLayerCells
+    wallModel
+    waveTransmissive
+    wedge
+    weighted
+    word
+    writer
+    xmgr
+    zeroGradient
+    zoneToCell
+    zoneToFace
+    zoneToPoint
 }
 
 InfoSwitches
diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriverLayers.C b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriverLayers.C
index a21b589ba3c..dcca9fa93d1 100644
--- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriverLayers.C
+++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriverLayers.C
@@ -2882,8 +2882,7 @@ void Foam::autoHexMeshDriver::addLayers
 
         if (debug_)
         {
-            Info<< "*** Writing layer mesh to "
-                << mesh_.time().timeName() << endl;
+            Info<< "Writing layer mesh to " << mesh_.time().timeName() << endl;
             newMesh.write();
             cellSet addedCellSet
             (
diff --git a/src/fvMotionSolver/Make/files b/src/fvMotionSolver/Make/files
index 8be9c4796c2..a49366e8adc 100644
--- a/src/fvMotionSolver/Make/files
+++ b/src/fvMotionSolver/Make/files
@@ -1,5 +1,6 @@
 fvMotionSolvers/fvMotionSolver/fvMotionSolver.C
 fvMotionSolvers/velocity/laplacian/velocityLaplacianFvMotionSolver.C
+fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.C
 fvMotionSolvers/displacement/laplacian/displacementLaplacianFvMotionSolver.C
 fvMotionSolvers/displacement/SBRStress/displacementSBRStressFvMotionSolver.C
 
diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.C b/src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.C
new file mode 100644
index 00000000000..8dc0dc5db05
--- /dev/null
+++ b/src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.C
@@ -0,0 +1,465 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software; you can 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.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+\*---------------------------------------------------------------------------*/
+
+#include "displacementInterpolationFvMotionSolver.H"
+#include "addToRunTimeSelectionTable.H"
+#include "SortableList.H"
+#include "IOList.H"
+#include "Tuple2.H"
+#include "mapPolyMesh.H"
+#include "interpolateXY.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+    defineTypeNameAndDebug(displacementInterpolationFvMotionSolver, 0);
+
+    addToRunTimeSelectionTable
+    (
+        fvMotionSolver,
+        displacementInterpolationFvMotionSolver,
+        dictionary
+    );
+
+    template<>
+    const word IOList<Tuple2<scalar, vector> >::typeName("scalarVectorTable");
+}
+
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::displacementInterpolationFvMotionSolver::
+displacementInterpolationFvMotionSolver
+(
+    const polyMesh& mesh,
+    Istream& msData
+)
+:
+    fvMotionSolver(mesh),
+    points0_
+    (
+        pointIOField
+        (
+            IOobject
+            (
+                "points",
+                mesh.time().constant(),
+                polyMesh::meshSubDir,
+                mesh,
+                IOobject::MUST_READ,
+                IOobject::NO_WRITE,
+                false
+            )
+        )
+    ),
+    dynamicMeshCoeffs_
+    (
+        IOdictionary
+        (
+            IOobject
+            (
+                "dynamicMeshDict",
+                mesh.time().constant(),
+                mesh,
+                IOobject::MUST_READ,
+                IOobject::NO_WRITE,
+                false
+            )
+        ).subDict(typeName + "Coeffs")
+    )
+{
+    // Get zones and their interpolation tables for displacement
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    List<Pair<word> > faceZoneToTable
+    (
+        dynamicMeshCoeffs_.lookup("interpolationTables")
+    );
+
+    const faceZoneMesh& fZones = mesh.faceZones();
+
+    times_.setSize(fZones.size());
+    displacements_.setSize(fZones.size());
+
+    forAll(faceZoneToTable, i)
+    {
+        const word& zoneName = faceZoneToTable[i][0];
+        label zoneI = fZones.findZoneID(zoneName);
+
+        if (zoneI == -1)
+        {
+            FatalErrorIn
+            (
+                "displacementInterpolationFvMotionSolver::"
+                "displacementInterpolationFvMotionSolver(const polyMesh&,"
+                "Istream&)"
+            )   << "Cannot find zone " << zoneName << endl
+                << "Valid zones are " << mesh.faceZones().names()
+                << exit(FatalError);
+        }
+
+        const word& tableName = faceZoneToTable[i][1];
+
+        IOList<Tuple2<scalar, vector> > table
+        (
+            IOobject
+            (
+                tableName,
+                mesh.time().constant(),
+                "tables",
+                mesh,
+                IOobject::MUST_READ,
+                IOobject::NO_WRITE,
+                false
+            )
+        );
+
+        // Copy table
+        times_[zoneI].setSize(table.size());
+        displacements_[zoneI].setSize(table.size());
+
+        forAll(table, j)
+        {
+            times_[zoneI][j] = table[j].first();
+            displacements_[zoneI][j] = table[j].second();
+        }
+    }
+
+
+
+    // Sort points into bins according to position relative to faceZones
+    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    // Done in all three directions.
+
+    for (direction dir = 0; dir < vector::nComponents; dir++)
+    {
+        // min and max coordinates of all faceZones
+        SortableList<scalar> zoneCoordinates(2*faceZoneToTable.size());
+
+        forAll(faceZoneToTable, i)
+        {
+            const word& zoneName = faceZoneToTable[i][0];
+            label zoneI = fZones.findZoneID(zoneName);
+            const faceZone& fz = fZones[zoneI];
+
+            scalarField fzCoords = fz().localPoints().component(dir);
+
+            zoneCoordinates[2*i] = gMin(fzCoords);
+            zoneCoordinates[2*i+1] = gMax(fzCoords);
+        }
+        zoneCoordinates.sort();
+
+        // Slightly tweak min and max face zone so points sort within
+        zoneCoordinates[0] -= SMALL;
+        zoneCoordinates[zoneCoordinates.size()-1] += SMALL;
+
+        // Check if we have static min and max mesh bounds
+        const scalarField meshCoords = points0_.component(dir);
+
+        scalar minCoord = gMin(meshCoords);
+        scalar maxCoord = gMax(meshCoords);
+
+        if (debug)
+        {
+            Pout<< "direction " << dir << " : "
+                << "mesh ranges from coordinate " << minCoord << " to "
+                << maxCoord << endl;
+        }
+
+        // Make copy of zoneCoordinates; include min and max of mesh
+        // if necessary. Mark min and max with zoneI=-1.
+        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+        labelList& rangeZone = rangeToZone_[dir];
+        labelListList& rangePoints = rangeToPoints_[dir];
+        List<scalarField>& rangeWeights = rangeToWeights_[dir];
+
+        scalarField rangeToCoord(zoneCoordinates.size());
+        rangeZone.setSize(zoneCoordinates.size());
+        label rangeI = 0;
+
+        if (minCoord < zoneCoordinates[0])
+        {
+            label sz = rangeZone.size();
+            rangeToCoord.setSize(sz+1);
+            rangeZone.setSize(sz+1);
+            rangeToCoord[rangeI] = minCoord-SMALL;
+            rangeZone[rangeI] = -1;
+
+            if (debug)
+            {
+                Pout<< "direction " << dir << " : "
+                    << "range " << rangeI << " at coordinate "
+                    << rangeToCoord[rangeI] << " from min of mesh "
+                    << rangeZone[rangeI] << endl;
+            }
+            rangeI = 1;
+        }
+        forAll(zoneCoordinates, i)
+        {
+            rangeToCoord[rangeI] = zoneCoordinates[i];
+            rangeZone[rangeI] = zoneCoordinates.indices()[i]/2;
+
+            if (debug)
+            {
+                Pout<< "direction " << dir << " : "
+                    << "range " << rangeI << " at coordinate "
+                    << rangeToCoord[rangeI]
+                    << " from zone " << rangeZone[rangeI] << endl;
+            }
+            rangeI++;
+        }
+        if (maxCoord > zoneCoordinates[zoneCoordinates.size()-1])
+        {
+            label sz = rangeToCoord.size();
+            rangeToCoord.setSize(sz+1);
+            rangeZone.setSize(sz+1);
+            rangeToCoord[sz] = maxCoord+SMALL;
+            rangeZone[sz] = -1;
+
+            if (debug)
+            {
+                Pout<< "direction " << dir << " : "
+                    << "range " << rangeI << " at coordinate "
+                    << rangeToCoord[sz] << " from max of mesh "
+                    << rangeZone[sz] << endl;
+            }
+        }
+
+
+        // Sort the points
+        // ~~~~~~~~~~~~~~~
+
+        // Count all the points inbetween rangeI and rangeI+1
+        labelList nRangePoints(rangeToCoord.size(), 0);
+
+        forAll(meshCoords, pointI)
+        {
+            label rangeI = findLower(rangeToCoord, meshCoords[pointI]);
+
+            if (rangeI == -1 || rangeI == rangeToCoord.size()-1)
+            {
+                FatalErrorIn
+                (
+                    "displacementInterpolationFvMotionSolver::"
+                    "displacementInterpolationFvMotionSolver"
+                    "(const polyMesh&, Istream&)"
+                )   << "Did not find point " << points0_[pointI]
+                    << " coordinate " << meshCoords[pointI]
+                    << " in ranges " << rangeToCoord
+                    << abort(FatalError);
+            }
+            nRangePoints[rangeI]++;
+        }
+
+        if (debug)
+        {
+            for (label rangeI = 0; rangeI < rangeToCoord.size()-1; rangeI++)
+            {
+                // Get the two zones bounding the range
+                Pout<< "direction " << dir << " : "
+                    << "range from " << rangeToCoord[rangeI]
+                    << " to " << rangeToCoord[rangeI+1]
+                    << " contains " << nRangePoints[rangeI]
+                    << " points." << endl;
+            }
+        }
+
+        // Sort
+        rangePoints.setSize(nRangePoints.size());
+        rangeWeights.setSize(nRangePoints.size());
+        forAll(rangePoints, rangeI)
+        {
+            rangePoints[rangeI].setSize(nRangePoints[rangeI]);
+            rangeWeights[rangeI].setSize(nRangePoints[rangeI]);
+        }
+        nRangePoints = 0;
+        forAll(meshCoords, pointI)
+        {
+            label rangeI = findLower(rangeToCoord, meshCoords[pointI]);
+            label& nPoints = nRangePoints[rangeI];
+            rangePoints[rangeI][nPoints] = pointI;
+            rangeWeights[rangeI][nPoints] =
+                (meshCoords[pointI]-rangeToCoord[rangeI])
+              / (rangeToCoord[rangeI+1]-rangeToCoord[rangeI]);
+            nPoints++;
+        }
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::displacementInterpolationFvMotionSolver::~displacementInterpolationFvMotionSolver()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+Foam::tmp<Foam::pointField>
+Foam::displacementInterpolationFvMotionSolver::curPoints() const
+{
+    if (mesh().nPoints() != points0_.size())
+    {
+        FatalErrorIn
+        (
+            "displacementInterpolationFvMotionSolver::curPoints() const"
+        )   << "The number of points in the mesh seems to have changed." << endl
+            << "In constant/polyMesh there are " << points0_.size()
+            << " points; in the current mesh there are " << mesh().nPoints()
+            << " points." << exit(FatalError);
+    }
+
+    tmp<pointField> tcurPoints(new pointField(points0_));
+    pointField& curPoints = tcurPoints();
+
+    // Interpolate the diplacement of the face zones.
+    vectorField zoneDisp(displacements_.size(), vector::zero);
+    forAll(zoneDisp, zoneI)
+    {
+        if (times_[zoneI].size() > 0)
+        {
+            zoneDisp[zoneI] = interpolateXY
+            (
+                mesh().time().value(),
+                times_[zoneI],
+                displacements_[zoneI]
+            );
+        }
+    }
+    if (debug)
+    {
+        Pout<< "Zone displacements:" << zoneDisp << endl;
+    }
+
+
+    // Interpolate the point location
+    for (direction dir = 0; dir < vector::nComponents; dir++)
+    {
+        const labelList& rangeZone = rangeToZone_[dir];
+        const labelListList& rangePoints = rangeToPoints_[dir];
+        const List<scalarField>& rangeWeights = rangeToWeights_[dir];
+
+        for (label rangeI = 0; rangeI < rangeZone.size()-1; rangeI++)
+        {
+            const labelList& rPoints = rangePoints[rangeI];
+            const scalarField& rWeights = rangeWeights[rangeI];
+
+            // Get the two zones bounding the range
+            label minZoneI = rangeZone[rangeI];
+            //vector minDisp =
+            //    (minZoneI == -1 ? vector::zero : zoneDisp[minZoneI]);
+            scalar minDisp = (minZoneI == -1 ? 0.0 : zoneDisp[minZoneI][dir]);
+            label maxZoneI = rangeZone[rangeI+1];
+            //vector maxDisp =
+            //    (maxZoneI == -1 ? vector::zero : zoneDisp[maxZoneI]);
+            scalar maxDisp = (maxZoneI == -1 ? 0.0 : zoneDisp[maxZoneI][dir]);
+
+            forAll(rPoints, i)
+            {
+                label pointI = rPoints[i];
+                scalar w = rWeights[i];
+                //curPoints[pointI] += (1.0-w)*minDisp+w*maxDisp;
+                curPoints[pointI][dir] += (1.0-w)*minDisp+w*maxDisp;
+            }
+        }
+    }
+    return tcurPoints;
+}
+
+
+void Foam::displacementInterpolationFvMotionSolver::updateMesh
+(
+    const mapPolyMesh& mpm
+)
+{
+    fvMotionSolver::updateMesh(mpm);
+
+    // Map points0_. Bit special since we somehow have to come up with
+    // a sensible points0 position for introduced points.
+    // Find out scaling between points0 and current points
+
+    // Get the new points either from the map or the mesh
+    const pointField& points =
+    (
+        mpm.hasMotionPoints()
+      ? mpm.preMotionPoints()
+      : fvMesh_.points()
+    );
+
+    // Note: boundBox does reduce
+    const boundBox bb0(points0_, true);
+    const vector span0(bb0.max()-bb0.min());
+    const boundBox bb(points, true);
+    const vector span(bb.max()-bb.min());
+
+    vector scaleFactors(cmptDivide(span0, span));
+
+    pointField newPoints0(mpm.pointMap().size());
+
+    forAll(newPoints0, pointI)
+    {
+        label oldPointI = mpm.pointMap()[pointI];
+    
+        if (oldPointI >= 0)
+        {
+            label masterPointI = mpm.reversePointMap()[oldPointI];
+
+            if (masterPointI == pointI)
+            {
+                newPoints0[pointI] = points0_[oldPointI];
+            }
+            else
+            {
+                // New point. Assume motion is scaling.
+                newPoints0[pointI] =
+                    points0_[oldPointI]
+                  + cmptMultiply
+                    (
+                        scaleFactors,
+                        points[pointI]-points[masterPointI]
+                    );
+            }
+        }
+        else
+        {
+            FatalErrorIn
+            (
+                "displacementLaplacianFvMotionSolver::updateMesh"
+                "(const mapPolyMesh& mpm)"
+            )   << "Cannot work out coordinates of introduced vertices."
+                << " New vertex " << pointI << " at coordinate "
+                << points[pointI] << exit(FatalError);
+        }
+    }
+    points0_.transfer(newPoints0);
+}
+
+
+// ************************************************************************* //
diff --git a/src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.H b/src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.H
new file mode 100644
index 00000000000..c3ad1b6d0e7
--- /dev/null
+++ b/src/fvMotionSolver/fvMotionSolvers/displacement/interpolation/displacementInterpolationFvMotionSolver.H
@@ -0,0 +1,156 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2007 OpenCFD Ltd.
+     \\/     M anipulation  |
+-------------------------------------------------------------------------------
+License
+    This file is part of OpenFOAM.
+
+    OpenFOAM is free software; you can 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.
+
+    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with OpenFOAM; if not, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+Class
+    Foam::displacementInterpolationFvMotionSolver
+
+Description
+    Mesh motion solver for an fvMesh. Scales inbetween motion prescribed on
+    faceZones. Works out per point the distance between the bounding
+    face zones (in all three directions) at the start and then every time
+    step
+    - moves the faceZones based on tables
+    - interpolates the displacement of all points based on the
+    faceZone motion.
+
+    Tables are in the constant/tables directory.
+
+    Note: could be a motionSolver - does not use any fvMesh structure.
+
+SourceFiles
+    displacementInterpolationFvMotionSolver.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef displacementInterpolationFvMotionSolver_H
+#define displacementInterpolationFvMotionSolver_H
+
+#include "fvMotionSolver.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+        Class displacementInterpolationFvMotionSolver Declaration
+\*---------------------------------------------------------------------------*/
+
+class displacementInterpolationFvMotionSolver
+:
+    public fvMotionSolver
+{
+    // Private data
+
+        //- Reference point field
+        pointField points0_;
+
+        //- Additional settings for motion solver
+        dictionary dynamicMeshCoeffs_;
+
+
+        // Face zone information (note: could pack these to only contain
+        // used zones)
+
+            //- Interpolation table. From faceZone to times.
+            List<scalarField> times_;
+
+            //- Interpolation table. From faceZone to displacements.
+            List<vectorField> displacements_;
+
+        // Range information.
+
+            //- Per direction, per range the index of the lower
+            //  faceZone
+            FixedList<labelList, 3> rangeToZone_;
+
+            //- Per direction, per range the points that are in it
+            FixedList<labelListList, 3> rangeToPoints_;
+
+            //- Per direction, per range the weight of the points relative
+            //  to this and the next range.
+            FixedList<List<scalarField>, 3> rangeToWeights_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        displacementInterpolationFvMotionSolver
+        (
+            const displacementInterpolationFvMotionSolver&
+        );
+
+        //- Disallow default bitwise assignment
+        void operator=(const displacementInterpolationFvMotionSolver&);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("displacementInterpolation");
+
+
+    // Constructors
+
+        displacementInterpolationFvMotionSolver
+        (
+            const polyMesh& mesh,
+            Istream& msData
+        );
+
+
+    // Destructor
+
+        ~displacementInterpolationFvMotionSolver();
+
+
+    // Member Functions
+
+        //- Return reference to the reference field
+        const pointField& points0() const
+        {
+            return points0_;
+        }
+
+        //- Return point location obtained from the current motion field
+        virtual tmp<pointField> curPoints() const;
+
+        //- Solve for motion
+        virtual void solve()
+        {}
+
+        //- Update topology
+        virtual void updateMesh(const mapPolyMesh&);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
-- 
GitLab