Skip to content

Problem with defining linear temprature in RayleighBernard2D example

OpenLB – Open Source Lattice Boltzmann Code Forums on OpenLB General Topics Problem with defining linear temprature in RayleighBernard2D example

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #7074
    navidkyo
    Participant

    Hello,

    I am trying to define linear temperature between the bottom and top in the OpenLB “RayleighBernard2D” example. In the original example, the base temperature is T_hot, the top temperature is T_cold, and the fluid temperature is equal to T_cold. I would like to change the fluid temperature so that it varies linearly from the bottom (T_hot) to the top (T_cold); However, I face the following problems.

    I set my linear function as follows and assign it to AD lattice initial parameters:

    ***AnalyticalLinear2D<T,T> T_ini( 0, (T_cold_T_hot)/ly, T_hot )= T_ini( 0, -4, 5)
    Also, I set my top and bottom temperature to 5, and 1 correspondingly.

    The results for the initial temperatures are not as I expect, it has a linear trend but the values are totally off. I appreciate your help. Here is the code:

    //*****************************************************************************************

    #include “olb2D.h”
    #include “olb2D.hh”

    using namespace olb;
    using namespace olb::descriptors;
    using namespace olb::graphics;

    typedef double T;

    typedef D2Q9<FORCE> NSDESCRIPTOR;
    typedef D2Q5<VELOCITY> TDESCRIPTOR;

    // Parameters for the simulation setup
    const T lx = 2.; // length of the channel
    const T ly = 1.; // height of the channel
    const int N = 10; // resolution of the model
    const T Ra = 1e4; // Rayleigh number
    const T Pr = 0.71; // Prandtl number
    const T maxPhysT = 1000.; // max. simulation time in s, SI unit
    const T epsilon = 1.e-5; // precision of the convergence (residuum)

    const T Thot = 5; // temperature of the lower wall in Kelvin
    const T Tcold = 1; // temperature of the fluid in Kelvin
    const T Tperturb = 1./5. * Tcold + 4./5. * Thot; // temperature of the perturbation

    /// Stores geometry information in form of material numbers
    void prepareGeometry(SuperGeometry<T,2>& superGeometry,
    ThermalUnitConverter<T, NSDESCRIPTOR, TDESCRIPTOR> &converter)
    {

    OstreamManager clout(std::cout,”prepareGeometry”);
    clout << “Prepare Geometry …” << std::endl;

    superGeometry.rename(0,2);
    superGeometry.rename(2,1,{0,1});

    std::vector<T> extend( 2, T(0) );
    extend[0] = lx;
    extend[1] = converter.getPhysLength(1);
    std::vector<T> origin( 2, T(0) );
    IndicatorCuboid2D<T> bottom(extend, origin);

    origin[1] = ly-converter.getPhysLength(1);
    IndicatorCuboid2D<T> top(extend, origin);

    origin[0] = lx/2.;
    origin[1] = converter.getPhysLength(1);
    extend[0] = converter.getPhysLength(1);
    extend[1] = converter.getPhysLength(1);
    IndicatorCuboid2D<T> perturbation(extend, origin);

    /// Set material numbers for bottom, top and pertubation
    superGeometry.rename(2,2,1,bottom);
    superGeometry.rename(2,3,1,top);
    superGeometry.rename(1,4,perturbation);

    /// Removes all not needed boundary voxels outside the surface
    superGeometry.clean();
    /// Removes all not needed boundary voxels inside the surface
    superGeometry.innerClean();
    superGeometry.checkForErrors();

    superGeometry.print();

    clout << “Prepare Geometry … OK” << std::endl;
    }

    void prepareLattice( ThermalUnitConverter<T, NSDESCRIPTOR, TDESCRIPTOR> &converter,
    SuperLattice<T, NSDESCRIPTOR>& NSlattice,
    SuperLattice<T, TDESCRIPTOR>& ADlattice,
    SuperGeometry<T,2>& superGeometry )
    {

    OstreamManager clout(std::cout,”prepareLattice”);

    T Tomega = converter.getLatticeThermalRelaxationFrequency();
    T NSomega = converter.getLatticeRelaxationFrequency();

    /// define lattice Dynamics
    clout << “defining dynamics” << std::endl;

    ADlattice.defineDynamics<NoDynamics<T,TDESCRIPTOR>>(superGeometry, 0);
    NSlattice.defineDynamics<NoDynamics<T,NSDESCRIPTOR>>(superGeometry, 0);

    ADlattice.defineDynamics<AdvectionDiffusionBGKdynamics>(superGeometry, 1);
    ADlattice.defineDynamics<AdvectionDiffusionBGKdynamics>(superGeometry, 2);
    ADlattice.defineDynamics<AdvectionDiffusionBGKdynamics>(superGeometry, 3);
    ADlattice.defineDynamics<AdvectionDiffusionBGKdynamics>(superGeometry, 4);
    NSlattice.defineDynamics<ForcedBGKdynamics>(superGeometry, 1);
    NSlattice.defineDynamics<BounceBack<T,NSDESCRIPTOR>>(superGeometry, 2);
    NSlattice.defineDynamics<BounceBack<T,NSDESCRIPTOR>>(superGeometry, 3);
    NSlattice.defineDynamics<ForcedBGKdynamics>(superGeometry, 4);

    /// sets boundary
    setAdvectionDiffusionTemperatureBoundary<T,TDESCRIPTOR>(ADlattice, Tomega, superGeometry, 2);
    setAdvectionDiffusionTemperatureBoundary<T,TDESCRIPTOR>(ADlattice, Tomega, superGeometry, 3);

    /// define initial conditions
    AnalyticalConst2D<T,T> rho(1.);
    AnalyticalConst2D<T,T> u0(0.0, 0.0);
    AnalyticalConst2D<T,T> T_cold(converter.getLatticeTemperature(Tcold));
    AnalyticalConst2D<T,T> T_hot(converter.getLatticeTemperature(Thot));
    AnalyticalConst2D<T,T> T_perturb(converter.getLatticeTemperature(Tperturb));

    //******************************************************
    AnalyticalLinear2D<T,T> T_ini( 0, -4, 5); //
    //******************************************************

    /// for each material set Rho, U and the Equilibrium
    NSlattice.defineRhoU(superGeometry, 1, rho, u0);
    NSlattice.iniEquilibrium(superGeometry, 1, rho, u0);
    NSlattice.defineRhoU(superGeometry, 2, rho, u0);
    NSlattice.iniEquilibrium(superGeometry, 2, rho, u0);
    NSlattice.defineRhoU(superGeometry, 3, rho, u0);
    NSlattice.iniEquilibrium(superGeometry, 3, rho, u0);
    NSlattice.defineRhoU(superGeometry, 4, rho, u0);
    NSlattice.iniEquilibrium(superGeometry, 4, rho, u0);

    ADlattice.defineRho(superGeometry, 1, T_ini);
    ADlattice.iniEquilibrium(superGeometry, 1, T_ini, u0);
    ADlattice.defineRho(superGeometry, 2, T_hot);
    ADlattice.iniEquilibrium(superGeometry, 2, T_hot, u0);
    ADlattice.defineRho(superGeometry, 3, T_cold);
    ADlattice.iniEquilibrium(superGeometry, 3, T_cold, u0);
    ADlattice.defineRho(superGeometry, 4, T_perturb);
    ADlattice.iniEquilibrium(superGeometry, 4, T_perturb, u0);

    NSlattice.setParameter<descriptors::OMEGA>(NSomega);
    ADlattice.setParameter<descriptors::OMEGA>(Tomega);

    /// Make the lattice ready for simulation
    NSlattice.initialize();
    ADlattice.initialize();

    clout << “Prepare Lattice … OK” << std::endl;
    }

    void setBoundaryValues(ThermalUnitConverter<T, NSDESCRIPTOR, TDESCRIPTOR> &converter,
    SuperLattice<T, NSDESCRIPTOR>& NSlattice,
    SuperLattice<T, TDESCRIPTOR>& ADlattice,
    int iT, SuperGeometry<T,2>& superGeometry)
    {
    // nothing to do here
    }

    void getResults(ThermalUnitConverter<T, NSDESCRIPTOR, TDESCRIPTOR> &converter,
    SuperLattice<T, NSDESCRIPTOR>& NSlattice,
    SuperLattice<T, TDESCRIPTOR>& ADlattice, int iT,
    SuperGeometry<T,2>& superGeometry,
    util::Timer<T>& timer,
    bool converged)
    {

    OstreamManager clout(std::cout,”getResults”);

    SuperVTMwriter2D<T> vtkWriter(“rayleighBenard2d”);
    SuperLatticePhysVelocity2D<T, NSDESCRIPTOR> velocity(NSlattice, converter);
    SuperLatticePhysPressure2D<T, NSDESCRIPTOR> presure(NSlattice, converter);
    SuperLatticePhysTemperature2D<T, NSDESCRIPTOR, TDESCRIPTOR> temperature(ADlattice, converter);
    vtkWriter.addFunctor( presure );
    vtkWriter.addFunctor( velocity );
    vtkWriter.addFunctor( temperature );

    const int saveIter = converter.getLatticeTime(10.0);

    if (iT == 0) {
    /// Writes the converter log file
    // writeLogFile(converter,”rayleighBenard2d”);

    /// Writes the geometry, cuboid no. and rank no. as vti file for visualization
    SuperLatticeGeometry2D<T, NSDESCRIPTOR> geometry(NSlattice, superGeometry);
    SuperLatticeCuboid2D<T, NSDESCRIPTOR> cuboid(NSlattice);
    SuperLatticeRank2D<T, NSDESCRIPTOR> rank(NSlattice);
    vtkWriter.write(geometry);
    vtkWriter.write(cuboid);
    vtkWriter.write(rank);

    vtkWriter.createMasterFile();
    }

    /// Writes the VTK files and prints statistics
    if (iT%saveIter == 0 || converged) {
    /// Timer console output
    timer.update(iT);
    timer.printStep();

    /// Lattice statistics console output
    NSlattice.getStatistics().print(iT,converter.getPhysTime(iT));

    vtkWriter.write(iT);

    BlockReduction2D2D<T> planeReduction(temperature, 600, BlockDataSyncMode::ReduceOnly);
    BlockGifWriter<T> gifWriter;
    gifWriter.write(planeReduction, Tcold-0.1, Thot+0.1, iT, “temperature”);
    }

    }

    int main(int argc, char *argv[])
    {

    /// === 1st Step: Initialization ===
    OstreamManager clout(std::cout,”main”);
    olbInit(&argc, &argv);
    singleton::directories().setOutputDir(“./tmp/”);

    ThermalUnitConverter<T, NSDESCRIPTOR, TDESCRIPTOR> converter(
    (T) 0.1/N, // physDeltaXf
    (T) 0.1 / (1e-5 / 0.1 * util::sqrt( Ra / Pr)) * 0.1 / N, // physDeltaT = charLatticeVelocity / charPhysVelocity * physDeltaX
    (T) 0.1, // charPhysLength
    (T) 1e-5 / 0.1 * util::sqrt( Ra / Pr ), // charPhysVelocity
    (T) 1e-5, // physViscosity
    (T) 1.0, // physDensity
    (T) 0.03, // physThermalConductivity
    (T) Pr * 0.03 / 1e-5 / 1.0, // physSpecificHeatCapacity
    (T) Ra * 1e-5 * 1e-5 / Pr / 9.81 / (Thot – Tcold) / util::pow(0.1, 3), // physThermalExpansionCoefficient
    (T) Tcold, // charPhysLowTemperature
    (T) Thot // charPhysHighTemperature
    );
    converter.print();

    /// === 2nd Step: Prepare Geometry ===
    std::vector<T> extend(2,T());
    extend[0] = lx;
    extend[1] = ly;
    std::vector<T> origin(2,T());
    IndicatorCuboid2D<T> cuboid(extend, origin);

    /// Instantiation of a cuboidGeometry with weights
    #ifdef PARALLEL_MODE_MPI
    const int noOfCuboids = singleton::mpi().getSize();
    #else
    const int noOfCuboids = 7;
    #endif
    CuboidGeometry2D<T> cuboidGeometry(cuboid, converter.getPhysDeltaX(), noOfCuboids);

    cuboidGeometry.setPeriodicity(true, false);

    HeuristicLoadBalancer<T> loadBalancer(cuboidGeometry);

    SuperGeometry<T,2> superGeometry(cuboidGeometry, loadBalancer);

    prepareGeometry(superGeometry, converter);

    /// === 3rd Step: Prepare Lattice ===

    SuperLattice<T, TDESCRIPTOR> ADlattice(superGeometry);
    SuperLattice<T, NSDESCRIPTOR> NSlattice(superGeometry);

    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
    // This coupling must be necessarily be put on the Navier-Stokes lattice!!
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//

    std::vector<T> dir{0.0, 1.0};

    T boussinesqForcePrefactor = 9.81 / converter.getConversionFactorVelocity() * converter.getConversionFactorTime() *
    converter.getCharPhysTemperatureDifference() * converter.getPhysThermalExpansionCoefficient();

    NavierStokesAdvectionDiffusionCouplingGenerator2D<T,NSDESCRIPTOR> coupling(0, converter.getLatticeLength(lx), 0, converter.getLatticeLength(ly), boussinesqForcePrefactor, converter.getLatticeTemperature(Tcold), 1., dir);

    NSlattice.addLatticeCoupling(coupling, ADlattice);
    NSlattice.addLatticeCoupling(superGeometry, 2, coupling, ADlattice);
    NSlattice.addLatticeCoupling(superGeometry, 3, coupling, ADlattice);
    NSlattice.addLatticeCoupling(superGeometry, 4, coupling, ADlattice);

    prepareLattice(converter, NSlattice, ADlattice, superGeometry);

    /// === 4th Step: Main Loop with Timer ===
    util::Timer<T> timer(converter.getLatticeTime(maxPhysT), superGeometry.getStatistics().getNvoxel() );
    timer.start();

    util::ValueTracer<T> converge(converter.getLatticeTime(50.),epsilon);
    for (std::size_t iT = 0; iT < converter.getLatticeTime(maxPhysT); ++iT) {

    if (converge.hasConverged()) {
    clout << “Simulation converged.” << std::endl;
    getResults(converter, NSlattice, ADlattice, iT, superGeometry, timer, converge.hasConverged());

    clout << “Time ” << iT << “.” << std::endl;

    break;
    }

    /// === 5th Step: Definition of Initial and Boundary Conditions ===
    setBoundaryValues(converter, NSlattice, ADlattice, iT, superGeometry);

    /// === 6th Step: Collide and Stream Execution ===
    ADlattice.collideAndStream();
    NSlattice.collideAndStream();

    NSlattice.executeCoupling();

    /// === 7th Step: Computation and Output of the Results ===
    getResults(converter, NSlattice, ADlattice, iT, superGeometry, timer, converge.hasConverged());
    converge.takeValue(ADlattice.getStatistics().getAverageEnergy(),true);
    }

    timer.stop();
    timer.printSummary();
    }

    //*****************************************************************************************

    **Also, I realized even if I assign my linear function by values, as I did in the code, the linear function is still a function of const Thot and Tcold that are defined at the top of the code, which does not make sense to me.

    I genuinely appreciate your help and time.

    Bests,

    #7100
    mathias
    Keymaster

    Did you set the values in lattice units? The unitConverter can help you here.

    #7103
    navidkyo
    Participant

    Thank you Mathias for your help. I used the following code for defining the linear function and it seems the problem is solved: (The rest f the code is the same as above)

    //*****************************************************************************************
    AnalyticalLinear2D<T,T> T_ini((T)0, (converter.getLatticeTemperature(Tcold), converter.getLatticeTemperature(Thot))/ly,converter.getLatticeTemperature(Thot) );
    //*****************************************************************************************

    However, as I checked the initial velocity at t=0, I got a linear symmetrical distribution for the initial velocity as well, and I wondered why this happened. Is it due to velocity shift by forcing term? or I did I miss a point here?

    I attached my code:

    //*****************************************************************************************

    #include “olb2D.h” //OK
    #include “olb2D.hh” //OK

    using namespace olb; //OK
    using namespace olb::descriptors; //OK
    using namespace olb::graphics; //OK

    typedef double T; //OK

    typedef D2Q9<FORCE> NSDESCRIPTOR; //OK
    typedef D2Q5<VELOCITY> TDESCRIPTOR; //OK

    // Parameters for the simulation setup

    // const int SavingIter = 10.; ///use din line 316
    const int N = 60; // resolution of the model //OK
    const T L = 0.1/N; // latticeL //OK
    const T lx = 6. ; // length of the channel //OK
    const T ly = 4.+L; // height of the channel //OK
    // const T Ra = 1e4; // Rayleigh number2000
    // const T Pr = 0.71; // Prandtl number
    const T Re = 76; //OK
    const T maxPhysT = 500; // max. simulation time in s, SI unit //OK
    const T epsilon = 1.e-5; // precision of the convergence (residuum) //NOT IN JUNWEI’S CODE*******************************

    const T Thot = 5.; // temperature of the lower wall in Kelvin //OK
    const T Tcold = 1.; // temperature of the fluid in Kelvin //OK
    const T Tave = (Thot+Tcold)/2.0; // temperature of the fluid in Kelvin //OK
    const T Tperturb = 1./5. * Tcold + 4./5. * Thot; // temperature of the perturbation //OK

    const T centerCylinderX = 2.5; //OK
    const T centerCylinderY = ly/2.0 +L/2.; //OK
    const T radiusCylinder = 0.05; //OK

    /// Stores geometry information in form of material numbers
    void prepareGeometry(SuperGeometry<T,2>& superGeometry,
    ThermalUnitConverter<T, NSDESCRIPTOR, TDESCRIPTOR> &converter)
    {

    OstreamManager clout(std::cout,”prepareGeometry”);
    clout << “Prepare Geometry …” << std::endl;

    superGeometry.rename(0,2); //OK
    superGeometry.rename(2,1,{0,1}); //original: superGeometry.rename(2,1,0,1); //OK

    std::vector<T> extend( 2, T(0) ); //OK
    std::vector<T> origin( 2, T(0) ); //OK

    origin[1] = -converter.getPhysLength(1); //OK
    extend[0] = lx ; //OK
    extend[1] = 2.*converter.getPhysLength(1); //OK
    IndicatorCuboid2D<T> bottom(extend, origin); //OK

    origin[1] = ly-converter.getPhysLength(1); //OK
    IndicatorCuboid2D<T> top(extend, origin); //OK

    superGeometry.rename(2,2,1,bottom);
    superGeometry.rename(2,3,1,top);

    // origin[0] = lx/2.;
    // origin[1] = converter.getPhysLength(1);
    // extend[0] = converter.getPhysLength(1);
    // extend[1] = converter.getPhysLength(1);
    // IndicatorCuboid2D<T> perturbation(extend, origin);

    //************************ Inflow ******************** added by me
    origin[0] = 0.0; //OK
    origin[1] = 0.0; //OK
    extend[0] = converter.getPhysLength(1.); //OK
    extend[1] = ly; //OK
    IndicatorCuboid2D<T> inflow(extend, origin); //OK
    superGeometry.rename( 1,5,inflow ); //OK

    //************************ outflow ******************** added by me
    origin[0] = lx-converter.getPhysLength(1); //OK
    extend[0] = 2.*converter.getPhysLength(1); //OK
    IndicatorCuboid2D<T> outflow(extend, origin); //OK
    superGeometry.rename( 1,6,1,outflow ); //????????????????

    //************************ Cylinder ******************** added by me

    Vector<T,2> center( centerCylinderX,centerCylinderY ); //OK
    IndicatorCircle2D<T> circle( center, radiusCylinder ); //OK
    superGeometry.rename( 1,4,circle ); //OK

    /// Removes all not needed boundary voxels outside the surface
    superGeometry.clean(); //OK
    /// Removes all not needed boundary voxels inside the surface
    superGeometry.innerClean(); //OK
    superGeometry.checkForErrors(); //OK

    superGeometry.print(); //OK

    clout << “Prepare Geometry … OK” << std::endl;
    }

    void prepareLattice( ThermalUnitConverter<T, NSDESCRIPTOR, TDESCRIPTOR> &converter,
    SuperLattice<T, NSDESCRIPTOR>& NSlattice,
    SuperLattice<T, TDESCRIPTOR>& ADlattice,
    SuperGeometry<T,2>& superGeometry )
    {

    OstreamManager clout(std::cout,”prepareLattice”); //OK

    T Tomega = converter.getLatticeThermalRelaxationFrequency(); //OK
    T NSomega = converter.getLatticeRelaxationFrequency(); //ADDED BY ME //OK

    /// define lattice Dynamics
    clout << “defining dynamics” << std::endl; //OK

    ADlattice.defineDynamics<NoDynamics>(superGeometry, 0); //OK
    ADlattice.defineDynamics<AdvectionDiffusionBGKdynamics>(superGeometry.getMaterialIndicator({1, 2, 3,5,6})); //OK
    ADlattice.defineDynamics<BounceBack>(superGeometry, 4); //OK

    NSlattice.defineDynamics<NoDynamics>(superGeometry, 0); //OK
    NSlattice.defineDynamics<ForcedBGKdynamics>(superGeometry, 1); //OK
    // NSlattice.defineDynamics<NoDynamics>(superGeometry, 2); //OK
    // setSlipBoundary(NSlattice, superGeometry, 2); //OK
    // NSlattice.defineDynamics<NoDynamics>(superGeometry, 3); //OK
    // setSlipBoundary(NSlattice, superGeometry, 3); //OK
    // NSlattice.defineDynamics<BounceBack>(superGeometry, 4); //OK

    NSlattice.defineDynamics<BounceBack>(superGeometry, 2); //OK
    NSlattice.defineDynamics<BounceBack>(superGeometry, 3); //OK

    // Define Boundaries
    setInterpolatedVelocityBoundary(NSlattice, NSomega, superGeometry, 5); //OK
    setInterpolatedVelocityBoundary(NSlattice, NSomega, superGeometry, 6); //OK
    // setLocalPressureBoundary<T,NSDESCRIPTOR>(NSlattice, NSomega, superGeometry, 6);

    setAdvectionDiffusionTemperatureBoundary<T,TDESCRIPTOR>(ADlattice, Tomega, superGeometry, 2); //OK
    setAdvectionDiffusionTemperatureBoundary<T,TDESCRIPTOR>(ADlattice, Tomega, superGeometry, 3); //OK

    Vector<T,2> center(centerCylinderX,centerCylinderY );
    IndicatorCircle2D<T> circle ( center, radiusCylinder );
    setBouzidiZeroVelocityBoundary<T,NSDESCRIPTOR>(NSlattice, superGeometry, 4, circle);

    // Vector<T,2> center( centerCylinderX,centerCylinderY );
    // IndicatorCircle2D<T> circle ( center, radiusCylinder );
    // NSlattice.defineDynamics<NoDynamics<T,NSDESCRIPTOR>>(superGeometry, 7);
    // setBouzidiZeroVelocityBoundary<T,NSDESCRIPTOR>(NSlattice, superGeometry, 7, circle);
    // ADlattice.defineDynamics<BounceBack<T,TDESCRIPTOR>>(superGeometry, 7);

    // /// Removes all not needed boundary voxels outside the surface
    // superGeometry.clean();
    // /// Removes all not needed boundary voxels inside the surface
    // superGeometry.innerClean();
    // superGeometry.checkForErrors();

    /// define initial conditions
    AnalyticalConst2D<T,T> rho(1.); //OK
    AnalyticalConst2D<T,T> u0(0.0, 0.0); //OK
    AnalyticalConst2D<T,T> T_cold(converter.getLatticeTemperature(Tcold)); //OK
    AnalyticalConst2D<T,T> T_hot(converter.getLatticeTemperature(Thot)); //OK
    AnalyticalConst2D<T,T> T_perturb(converter.getLatticeTemperature(Tperturb)); //OK
    // AnalyticalLinear2D<T,T> T_ini( 0, -0.25, 0.25); //OK&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

    AnalyticalLinear2D<T,T> T_ini((T)0, (converter.getLatticeTemperature(Tcold)-converter.getLatticeTemperature(Thot))/4.,converter.getLatticeTemperature(Thot) );

    AnalyticalConst2D<T,T> T_ave((converter.getLatticeTemperature(Thot)+converter.getLatticeTemperature(Tcold))/2); //OK

    /// for each material set Rho, U and the Equilibrium

    // NSlattice.defineU(superGeometry,5,u0); //OK
    // NSlattice.defineU(superGeometry,6,u0); //OK

    // ADlattice.defineRho(superGeometry, 1, T_ini);
    // ADlattice.iniEquilibrium(superGeometry, 1, T_ini, u0);
    // ADlattice.defineRho(superGeometry, 2, T_hot);
    // ADlattice.iniEquilibrium(superGeometry, 2, T_hot, u0);
    // ADlattice.defineRho(superGeometry, 3, T_cold);
    // ADlattice.iniEquilibrium(superGeometry, 3, T_cold, u0);

    // ADlattice.defineRho(superGeometry, 5, T_ini);
    // ADlattice.iniEquilibrium(superGeometry, 5, T_ini, u0);
    // ADlattice.defineRho(superGeometry, 6, T_ini);
    // ADlattice.iniEquilibrium(superGeometry, 6, T_ini, u0);

    ADlattice.defineRho(superGeometry, 1, T_ini);
    ADlattice.iniEquilibrium(superGeometry, 1, T_ini, u0);
    ADlattice.defineRho(superGeometry, 2, T_hot);
    ADlattice.iniEquilibrium(superGeometry, 2, T_hot, u0);
    ADlattice.defineRho(superGeometry, 3, T_cold);
    ADlattice.iniEquilibrium(superGeometry, 3, T_cold, u0);

    ADlattice.defineRho(superGeometry, 5, T_ini);
    ADlattice.iniEquilibrium(superGeometry, 5, T_ini, u0);
    ADlattice.defineRho(superGeometry, 6, T_ini);
    ADlattice.iniEquilibrium(superGeometry, 6, T_ini, u0);

    NSlattice.defineRhoU(superGeometry, 1, rho, u0); //OK
    NSlattice.iniEquilibrium(superGeometry, 1, rho, u0); //OK
    NSlattice.defineRhoU(superGeometry, 2, rho, u0); //OK
    NSlattice.iniEquilibrium(superGeometry, 2, rho, u0); //OK
    NSlattice.defineRhoU(superGeometry, 3, rho,u0); //OK
    NSlattice.iniEquilibrium(superGeometry, 3, rho, u0); //OK
    NSlattice.defineRhoU(superGeometry, 5, rho,u0); //OK
    NSlattice.iniEquilibrium(superGeometry, 5, rho, u0); //OK
    NSlattice.defineRhoU(superGeometry, 6, rho,u0); //OK
    NSlattice.iniEquilibrium(superGeometry, 6, rho, u0); //OK

    NSlattice.setParameter<descriptors::OMEGA>(NSomega);
    ADlattice.setParameter<descriptors::OMEGA>(Tomega);

    /// Make the lattice ready for simulation
    NSlattice.initialize();
    ADlattice.initialize();

    clout << “Prepare Lattice … OK” << std::endl;
    }

    void setBoundaryValues(ThermalUnitConverter<T, NSDESCRIPTOR, TDESCRIPTOR> &converter,
    SuperLattice<T, NSDESCRIPTOR>& NSlattice,
    SuperLattice<T, TDESCRIPTOR>& ADlattice,
    int iT, SuperGeometry<T,2>& superGeometry)
    {
    {

    OstreamManager clout( std::cout,”setBoundaryValues” );

    // No of time steps for smooth start-up
    int iTmaxStart = converter.getLatticeTime( maxPhysT*0.4 ); //original: int iTmaxStart = converter.getLatticeTime( maxPhysT*0.4 );
    int iTupdate = 20; ///frequency of printing max vel on the console

    if ( iT%iTupdate==0 && iT<= iTmaxStart ) {
    // Smooth start curve, sinus
    // SinusStartScale<T,int> StartScale(iTmaxStart, T(1));

    // Smooth start curve, polynomial
    PolynomialStartScale<T,T> StartScale( iTmaxStart, T( 1 ) );

    // Creates and sets the Poiseuille inflow profile using functors
    T iTvec[1] = {T( iT )};
    T frac[1] = {};
    StartScale( frac,iTvec );
    // std::vector<T> maxVelocity( 2,0 );
    T maxVelocity = converter.getCharLatticeVelocity()*frac[0];
    // T maxVelocity2 = 0.0*frac[0];
    T distance2Wall = converter.getPhysLength(1)/2.;
    Poiseuille2D<T> poiseuilleU( superGeometry, 5, maxVelocity, distance2Wall );
    // AnalyticalConst2D<T,T> poiseuilleU(maxVelocity, 0.0);

    NSlattice.defineU( superGeometry, 5, poiseuilleU );
    NSlattice.defineU( superGeometry, 6, poiseuilleU );

    NSlattice.setProcessingContext<Array<momenta::FixedVelocityMomentumGeneric::VELOCITY>>(
    ProcessingContext::Simulation);
    clout << “step=” << iT << “; maxVel=” << maxVelocity << “; (%)maxVel=” << maxVelocity/converter.getCharLatticeVelocity() << std::endl;

    }
    }

    // OstreamManager clout( std::cout,”setBoundaryValues” );

    // // No of time steps for smooth start-up
    // int iTmaxStart = converter.getLatticeTime( maxPhysT*0.4 );
    // int iTupdate = 5;

    // if ( iT%iTupdate==0 && iT<= iTmaxStart ) {
    // // Smooth start curve, sinus
    // // SinusStartScale<T,int> StartScale(iTmaxStart, T(1));

    // // Smooth start curve, polynomial
    // PolynomialStartScale<T,T> StartScale( iTmaxStart, T( 1 ) );

    // // Creates and sets the Poiseuille inflow profile using functors
    // T iTvec[1] = {T( iT )};
    // T frac[1] = {};
    // StartScale( frac,iTvec );
    // T maxVelocity = converter.getCharLatticeVelocity()/200.*frac[0]; //*************CHECK: SETS MAX INLET VELOCITY ORIGINAL: 3./20.
    // //T maxVelocity = 0.005 ; IT DOES NOT WORK LIKE THIS!!!!! maxVelocity is an ARRAY
    // T distance2Wall = converter.getPhysLength(1)/2.;
    // //Poiseuille2D<T> poiseuilleU( superGeometry, 5, maxVelocity, distance2Wall );
    // AnalyticalConst2D<T,T> poiseuilleU( maxVelocity );
    // //AnalyticalConst2D<T,T> constantU(maxVelocity, 0.0);
    // NSlattice.defineU( superGeometry, 5, poiseuilleU );
    // clout << “step=” << iT << “; maxVel=” << maxVelocity << std::endl;

    // }
    }

    void getResults(ThermalUnitConverter<T, NSDESCRIPTOR, TDESCRIPTOR> &converter,
    SuperLattice<T, NSDESCRIPTOR>& NSlattice,
    SuperLattice<T, TDESCRIPTOR>& ADlattice, int iT,
    SuperGeometry<T,2>& superGeometry,
    util::Timer<T>& timer,
    bool converged)
    {

    OstreamManager clout(std::cout,”getResults”);

    SuperVTMwriter2D<T> vtkWriter(“rayleighBenard2d”);
    SuperLatticePhysVelocity2D<T, NSDESCRIPTOR> velocity(NSlattice, converter);
    SuperLatticePhysPressure2D<T, NSDESCRIPTOR> presure(NSlattice, converter);
    SuperLatticePhysTemperature2D<T, NSDESCRIPTOR, TDESCRIPTOR> temperature(ADlattice, converter);
    vtkWriter.addFunctor( presure );
    vtkWriter.addFunctor( velocity );
    vtkWriter.addFunctor( temperature );

    SuperLatticeVelocity2D<T, NSDESCRIPTOR> velocityLatticeUnit(NSlattice);

    const int saveIter = converter.getLatticeTime(1.); //fffffffffffffffffffffffffffffff

    SuperLatticeField2D<T,NSDESCRIPTOR,olb::descriptors::FORCE> bodyForce (NSlattice); //ADDED BY ME
    vtkWriter.addFunctor( bodyForce ); //ADDED BY ME

    if (iT == 0) {
    /// Writes the converter log file
    // writeLogFile(converter,”rayleighBenard2d”);

    /// Writes the geometry, cuboid no. and rank no. as vti file for visualization
    SuperLatticeGeometry2D<T, NSDESCRIPTOR> geometry(NSlattice, superGeometry);
    SuperLatticeCuboid2D<T, NSDESCRIPTOR> cuboid(NSlattice);
    SuperLatticeRank2D<T, NSDESCRIPTOR> rank(NSlattice);
    vtkWriter.write(geometry);
    vtkWriter.write(cuboid);
    vtkWriter.write(rank);

    vtkWriter.createMasterFile();
    }

    /// Writes the VTK files and prints statistics
    if (iT%saveIter == 0 || converged) {
    /// Timer console output
    timer.update(iT);
    timer.printStep();

    /// Lattice statistics console output
    NSlattice.getStatistics().print(iT,converter.getPhysTime(iT));

    vtkWriter.write(iT);

    BlockReduction2D2D<T> planeReduction(temperature, 600, BlockDataSyncMode::ReduceOnly);
    BlockGifWriter<T> gifWriter;
    gifWriter.write(planeReduction, Tcold-0.1, Thot+0.1, iT, “temperature”);

    // &***************************** Drag, lift, pressure drop &**********************************************
    static Gnuplot<T> gplot( “drag” );
    const int vtkIter = converter.getLatticeTime( .3 );

    // Writes the vtk files
    if ( iT%vtkIter == 0 && iT > 0 ) {
    vtkWriter.write( iT );
    }

    // write pdf at last time step
    if ( iT == converter.getLatticeTime( maxPhysT )-1 ) {
    // writes pdf
    gplot.writePDF();
    }

    //******************************
    AnalyticalFfromSuperF2D<T> intpolatePressure( presure, true );
    SuperLatticePhysDrag2D<T,NSDESCRIPTOR> drag( NSlattice, superGeometry, 4, converter );

    T point1[2] = {};
    T point2[2] = {};

    point1[0] = centerCylinderX – radiusCylinder;
    point1[1] = centerCylinderY;

    point2[0] = centerCylinderX + radiusCylinder;
    point2[1] = centerCylinderY;

    T p1, p2;
    intpolatePressure( &p1,point1 );
    intpolatePressure( &p2,point2 );

    clout << “pressure1=” << p1;
    clout << “; pressure2=” << p2;

    T pressureDrop = p1-p2;
    clout << “; pressureDrop=” << pressureDrop;

    int input[3] = {};
    T _drag[drag.getTargetDim()];
    drag( _drag,input );
    clout << “; drag=” << _drag[0] << “; lift=” << _drag[1] << std::endl;

    // set data for gnuplot: input={xValue, yValue(s), names (optional), position of key (optional)}
    gplot.setData( converter.getPhysTime( iT ), {_drag[0], _drag[1]}, {“drag(openLB)”, “lift(OpenLB)”}, “bottom right”, {‘l’,’l’} );
    // writes a png in one file for every timestep, if the file is open it can be used as a “liveplot”
    gplot.writePNG();

    // every (iT%vtkIter) write an png of the plot
    if ( iT%( vtkIter ) == 0 ) {
    // writes pngs: input={name of the files (optional), x range for the plot (optional)}
    gplot.writePNG( iT, maxPhysT );
    }

    }
    }

    int main(int argc, char *argv[])
    {

    /// === 1st Step: Initialization ===
    OstreamManager clout(std::cout,”main”);
    olbInit(&argc, &argv);
    singleton::directories().setOutputDir(“./tmp/”);

    ThermalUnitConverter<T, NSDESCRIPTOR, TDESCRIPTOR> converter(
    (T) 0.1/N, // physDeltaX
    (T) 0.00043860, // physDeltaT = charLatticeVelocity / charPhysVelocity * physDeltaX
    (T) 0.1, // charPhysLength
    (T) Re*1.e-4/0.1, // charPhysVelocity
    (T) 1.e-4, // physViscosity
    (T) 1., // physDensity
    (T) 0.03, // physThermalConductivity
    (T) 210000, // physSpecificHeatCapacity
    (T) 0.000143573, // physThermalExpansionCoefficient
    (T) Tcold, // charPhysLowTemperature
    (T) Thot // charPhysHighTemperature
    );
    converter.print();
    converter.write(“olbUnitConverter”);

    /// === 2nd Step: Prepare Geometry ===
    std::vector<T> extend(2,T());
    extend[0] = lx;
    extend[1] = ly;
    std::vector<T> origin(2,T());
    IndicatorCuboid2D<T> cuboid(extend, origin);

    /// Instantiation of a cuboidGeometry with weights
    #ifdef PARALLEL_MODE_MPI
    const int noOfCuboids = singleton::mpi().getSize();
    #else
    const int noOfCuboids = 7;
    #endif
    CuboidGeometry2D<T> cuboidGeometry(cuboid, converter.getPhysDeltaX(), noOfCuboids);

    cuboidGeometry.setPeriodicity(false, false);

    HeuristicLoadBalancer<T> loadBalancer(cuboidGeometry);

    SuperGeometry<T,2> superGeometry(cuboidGeometry, loadBalancer);

    prepareGeometry(superGeometry, converter);

    /// === 3rd Step: Prepare Lattice ===

    SuperLattice<T, TDESCRIPTOR> ADlattice(superGeometry);
    SuperLattice<T, NSDESCRIPTOR> NSlattice(superGeometry);

    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
    // This coupling must be necessarily be put on the Navier-Stokes lattice!!
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//

    std::vector<T> dir{0.0, 1.0};

    T boussinesqForcePrefactor = -9.81 / converter.getConversionFactorVelocity() * converter.getConversionFactorTime() *
    converter.getCharPhysTemperatureDifference() * converter.getPhysThermalExpansionCoefficient();
    // T boussinesqForcePrefactor = 0.0 ;

    NavierStokesAdvectionDiffusionCouplingGenerator2D<T,NSDESCRIPTOR> coupling(0, converter.getLatticeLength(lx), 0, converter.getLatticeLength(ly), boussinesqForcePrefactor, (converter.getLatticeTemperature(Tcold)+converter.getLatticeTemperature(Thot))/2., 1., dir);

    NSlattice.addLatticeCoupling(coupling, ADlattice);

    prepareLattice(converter, NSlattice, ADlattice, superGeometry);

    /// === 4th Step: Main Loop with Timer ===
    util::Timer<T> timer(converter.getLatticeTime(maxPhysT), superGeometry.getStatistics().getNvoxel() );
    timer.start();

    util::ValueTracer<T> converge(converter.getLatticeTime(50.),epsilon);
    for (std::size_t iT = 0; iT < converter.getLatticeTime(maxPhysT); ++iT) {

    if (converge.hasConverged()) {
    clout << “Simulation converged.” << std::endl;
    getResults(converter, NSlattice, ADlattice, iT, superGeometry, timer, converge.hasConverged());

    clout << “Time ” << iT << “.” << std::endl;

    break;
    }

    /// === 5th Step: Definition of Initial and Boundary Conditions ===
    setBoundaryValues(converter, NSlattice, ADlattice, iT, superGeometry);

    /// === 6th Step: Collide and Stream Execution ===
    ADlattice.collideAndStream();
    NSlattice.collideAndStream();

    NSlattice.executeCoupling();

    /// === 7th Step: Computation and Output of the Results ===
    getResults(converter, NSlattice, ADlattice, iT, superGeometry, timer, converge.hasConverged());
    converge.takeValue(ADlattice.getStatistics().getAverageEnergy(),true);
    }

    timer.stop();
    timer.printSummary();
    }

    //*****************************************************************************************

    Thank you very much

    #7108
    mathias
    Keymaster

    Might be, is it small? Does it go to zero for h->0?

    #7110
    navidkyo
    Participant

    it is relatively small. in order of 1e-7

    it is zero at h=ly/2, and goes -1e-7 at h=0, and +1e-7 at h=y(top).

    Unfortunately, I cannot attach the preview screenshot but I attached the y-dir velocity distribution along a line in the y direction. The X-direction velocity is zero.

    0
    -6.17E-07
    -6.16E-07
    -6.15E-07
    -6.13E-07
    -6.12E-07
    -6.11E-07
    -6.10E-07
    -6.08E-07
    -6.07E-07
    -6.06E-07
    -6.05E-07
    -6.03E-07
    -6.02E-07
    -6.01E-07
    -6.00E-07
    -5.98E-07
    -5.97E-07
    -5.96E-07
    -5.95E-07
    -5.94E-07
    -5.92E-07
    -5.91E-07
    -5.90E-07
    -5.89E-07
    -5.87E-07
    -5.86E-07
    -5.85E-07
    -5.84E-07
    -5.82E-07
    -5.81E-07
    -5.80E-07
    -5.79E-07
    -5.77E-07
    -5.76E-07
    -5.75E-07
    -5.74E-07
    -5.72E-07
    -5.71E-07
    -5.70E-07
    -5.69E-07
    -5.68E-07
    -5.66E-07
    -5.65E-07
    -5.64E-07
    -5.63E-07
    -5.61E-07
    -5.60E-07
    -5.59E-07
    -5.58E-07
    -5.56E-07
    -5.55E-07
    -5.54E-07
    -5.53E-07
    -5.51E-07
    -5.50E-07
    -5.49E-07
    -5.48E-07
    -5.47E-07
    -5.45E-07
    -5.44E-07
    -5.43E-07
    -5.42E-07
    -5.40E-07
    -5.39E-07
    -5.38E-07
    -5.37E-07
    -5.35E-07
    -5.34E-07
    -5.33E-07
    -5.32E-07
    -5.30E-07
    -5.29E-07
    -5.28E-07
    -5.27E-07
    -5.25E-07
    -5.24E-07
    -5.23E-07
    -5.22E-07
    -5.21E-07
    -5.19E-07
    -5.18E-07
    -5.17E-07
    -5.16E-07
    -5.14E-07
    -5.13E-07
    -5.12E-07
    -5.11E-07
    -5.09E-07
    -5.08E-07
    -5.07E-07
    -5.06E-07
    -5.04E-07
    -5.03E-07
    -5.02E-07
    -5.01E-07
    -5.00E-07
    -4.98E-07
    -4.97E-07
    -4.96E-07
    -4.95E-07
    -4.93E-07
    -4.92E-07
    -4.91E-07
    -4.90E-07
    -4.88E-07
    -4.87E-07
    -4.86E-07
    -4.85E-07
    -4.83E-07
    -4.82E-07
    -4.81E-07
    -4.80E-07
    -4.78E-07
    -4.77E-07
    -4.76E-07
    -4.75E-07
    -4.74E-07
    -4.72E-07
    -4.71E-07
    -4.70E-07
    -4.69E-07
    -4.67E-07
    -4.66E-07
    -4.65E-07
    -4.64E-07
    -4.62E-07
    -4.61E-07
    -4.60E-07
    -4.59E-07
    -4.57E-07
    -4.56E-07
    -4.55E-07
    -4.54E-07
    -4.52E-07
    -4.51E-07
    -4.50E-07
    -4.49E-07
    -4.48E-07
    -4.46E-07
    -4.45E-07
    -4.44E-07
    -4.43E-07
    -4.41E-07
    -4.40E-07
    -4.39E-07
    -4.38E-07
    -4.36E-07
    -4.35E-07
    -4.34E-07
    -4.33E-07
    -4.31E-07
    -4.30E-07
    -4.29E-07
    -4.28E-07
    -4.27E-07
    -4.25E-07
    -4.24E-07
    -4.23E-07
    -4.22E-07
    -4.20E-07
    -4.19E-07
    -4.18E-07
    -4.17E-07
    -4.15E-07
    -4.14E-07
    -4.13E-07
    -4.12E-07
    -4.10E-07
    -4.09E-07
    -4.08E-07
    -4.07E-07
    -4.05E-07
    -4.04E-07
    -4.03E-07
    -4.02E-07
    -4.01E-07
    -3.99E-07
    -3.98E-07
    -3.97E-07
    -3.96E-07
    -3.94E-07
    -3.93E-07
    -3.92E-07
    -3.91E-07
    -3.89E-07
    -3.88E-07
    -3.87E-07
    -3.86E-07
    -3.84E-07
    -3.83E-07
    -3.82E-07
    -3.81E-07
    -3.80E-07
    -3.78E-07
    -3.77E-07
    -3.76E-07
    -3.75E-07
    -3.73E-07
    -3.72E-07
    -3.71E-07
    -3.70E-07
    -3.68E-07
    -3.67E-07
    -3.66E-07
    -3.65E-07
    -3.63E-07
    -3.62E-07
    -3.61E-07
    -3.60E-07
    -3.58E-07
    -3.57E-07
    -3.56E-07
    -3.55E-07
    -3.54E-07
    -3.52E-07
    -3.51E-07
    -3.50E-07
    -3.49E-07
    -3.47E-07
    -3.46E-07
    -3.45E-07
    -3.44E-07
    -3.42E-07
    -3.41E-07
    -3.40E-07
    -3.39E-07
    -3.37E-07
    -3.36E-07
    -3.35E-07
    -3.34E-07
    -3.33E-07
    -3.31E-07
    -3.30E-07
    -3.29E-07
    -3.28E-07
    -3.26E-07
    -3.25E-07
    -3.24E-07
    -3.23E-07
    -3.21E-07
    -3.20E-07
    -3.19E-07
    -3.18E-07
    -3.16E-07
    -3.15E-07
    -3.14E-07
    -3.13E-07
    -3.11E-07
    -3.10E-07
    -3.09E-07
    -3.08E-07
    -3.07E-07
    -3.05E-07
    -3.04E-07
    -3.03E-07
    -3.02E-07
    -3.00E-07
    -2.99E-07
    -2.98E-07
    -2.97E-07
    -2.95E-07
    -2.94E-07
    -2.93E-07
    -2.92E-07
    -2.90E-07
    -2.89E-07
    -2.88E-07
    -2.87E-07
    -2.85E-07
    -2.84E-07
    -2.83E-07
    -2.82E-07
    -2.81E-07
    -2.79E-07
    -2.78E-07
    -2.77E-07
    -2.76E-07
    -2.74E-07
    -2.73E-07
    -2.72E-07
    -2.71E-07
    -2.69E-07
    -2.68E-07
    -2.67E-07
    -2.66E-07
    -2.64E-07
    -2.63E-07
    -2.62E-07
    -2.61E-07
    -2.60E-07
    -2.58E-07
    -2.57E-07
    -2.56E-07
    -2.55E-07
    -2.53E-07
    -2.52E-07
    -2.51E-07
    -2.50E-07
    -2.48E-07
    -2.47E-07
    -2.46E-07
    -2.45E-07
    -2.43E-07
    -2.42E-07
    -2.41E-07
    -2.40E-07
    -2.38E-07
    -2.37E-07
    -2.36E-07
    -2.35E-07
    -2.34E-07
    -2.32E-07
    -2.31E-07
    -2.30E-07
    -2.29E-07
    -2.27E-07
    -2.26E-07
    -2.25E-07
    -2.24E-07
    -2.22E-07
    -2.21E-07
    -2.20E-07
    -2.19E-07
    -2.17E-07
    -2.16E-07
    -2.15E-07
    -2.14E-07
    -2.13E-07
    -2.11E-07
    -2.10E-07
    -2.09E-07
    -2.08E-07
    -2.06E-07
    -2.05E-07
    -2.04E-07
    -2.03E-07
    -2.01E-07
    -2.00E-07
    -1.99E-07
    -1.98E-07
    -1.96E-07
    -1.95E-07
    -1.94E-07
    -1.93E-07
    -1.91E-07
    -1.90E-07
    -1.89E-07
    -1.88E-07
    -1.87E-07
    -1.85E-07
    -1.84E-07
    -1.83E-07
    -1.82E-07
    -1.80E-07
    -1.79E-07
    -1.78E-07
    -1.77E-07
    -1.75E-07
    -1.74E-07
    -1.73E-07
    -1.72E-07
    -1.70E-07
    -1.69E-07
    -1.68E-07
    -1.67E-07
    -1.66E-07
    -1.64E-07
    -1.63E-07
    -1.62E-07
    -1.61E-07
    -1.59E-07
    -1.58E-07
    -1.57E-07
    -1.56E-07
    -1.54E-07
    -1.53E-07
    -1.52E-07
    -1.51E-07
    -1.49E-07
    -1.48E-07
    -1.47E-07
    -1.46E-07
    -1.44E-07
    -1.43E-07
    -1.42E-07
    -1.41E-07
    -1.40E-07
    -1.38E-07
    -1.37E-07
    -1.36E-07
    -1.35E-07
    -1.33E-07
    -1.32E-07
    -1.31E-07
    -1.30E-07
    -1.28E-07
    -1.27E-07
    -1.26E-07
    -1.25E-07
    -1.23E-07
    -1.22E-07
    -1.21E-07
    -1.20E-07
    -1.18E-07
    -1.17E-07
    -1.16E-07
    -1.15E-07
    -1.14E-07
    -1.12E-07
    -1.11E-07
    -1.10E-07
    -1.09E-07
    -1.07E-07
    -1.06E-07
    -1.05E-07
    -1.04E-07
    -1.02E-07
    -1.01E-07
    -9.99E-08
    -9.87E-08
    -9.75E-08
    -9.62E-08
    -9.50E-08
    -9.38E-08
    -9.25E-08
    -9.13E-08
    -9.00E-08
    -8.88E-08
    -8.76E-08
    -8.63E-08
    -8.51E-08
    -8.39E-08
    -8.26E-08
    -8.14E-08
    -8.02E-08
    -7.89E-08
    -7.77E-08
    -7.64E-08
    -7.52E-08
    -7.40E-08
    -7.27E-08
    -7.15E-08
    -7.03E-08
    -6.90E-08
    -6.78E-08
    -6.65E-08
    -6.53E-08
    -6.41E-08
    -6.28E-08
    -6.16E-08
    -6.04E-08
    -5.91E-08
    -5.79E-08
    -5.66E-08
    -5.54E-08
    -5.42E-08
    -5.29E-08
    -5.17E-08
    -5.05E-08
    -4.92E-08
    -4.80E-08
    -4.68E-08
    -4.55E-08
    -4.43E-08
    -4.30E-08
    -4.18E-08
    -4.06E-08
    -3.93E-08
    -3.81E-08
    -3.69E-08
    -3.56E-08
    -3.44E-08
    -3.31E-08
    -3.19E-08
    -3.07E-08
    -2.94E-08
    -2.82E-08
    -2.70E-08
    -2.57E-08
    -2.45E-08
    -2.32E-08
    -2.20E-08
    -2.08E-08
    -1.95E-08
    -1.83E-08
    -1.71E-08
    -1.58E-08
    -1.46E-08
    -1.34E-08
    -1.21E-08
    -1.09E-08
    -9.64E-09
    -8.40E-09
    -7.17E-09
    -5.93E-09
    -4.69E-09
    -3.45E-09
    -2.22E-09
    -9.80E-10
    2.57E-10
    1.49E-09
    2.73E-09
    3.97E-09
    5.21E-09
    6.44E-09
    7.68E-09
    8.92E-09
    1.02E-08
    1.14E-08
    1.26E-08
    1.39E-08
    1.51E-08
    1.63E-08
    1.76E-08
    1.88E-08
    2.00E-08
    2.13E-08
    2.25E-08
    2.38E-08
    2.50E-08
    2.62E-08
    2.75E-08
    2.87E-08
    2.99E-08
    3.12E-08
    3.24E-08
    3.37E-08
    3.49E-08
    3.61E-08
    3.74E-08
    3.86E-08
    3.98E-08
    4.11E-08
    4.23E-08
    4.36E-08
    4.48E-08
    4.60E-08
    4.73E-08
    4.85E-08
    4.97E-08
    5.10E-08
    5.22E-08
    5.34E-08
    5.47E-08
    5.59E-08
    5.72E-08
    5.84E-08
    5.96E-08
    6.09E-08
    6.21E-08
    6.33E-08
    6.46E-08
    6.58E-08
    6.71E-08
    6.83E-08
    6.95E-08
    7.08E-08
    7.20E-08
    7.32E-08
    7.45E-08
    7.57E-08
    7.70E-08
    7.82E-08
    7.94E-08
    8.07E-08
    8.19E-08
    8.31E-08
    8.44E-08
    8.56E-08
    8.68E-08
    8.81E-08
    8.93E-08
    9.06E-08
    9.18E-08
    9.30E-08
    9.43E-08
    9.55E-08
    9.67E-08
    9.80E-08
    9.92E-08
    1.00E-07
    1.02E-07
    1.03E-07
    1.04E-07
    1.05E-07
    1.07E-07
    1.08E-07
    1.09E-07
    1.10E-07
    1.12E-07
    1.13E-07
    1.14E-07
    1.15E-07
    1.17E-07
    1.18E-07
    1.19E-07
    1.20E-07
    1.21E-07
    1.23E-07
    1.24E-07
    1.25E-07
    1.26E-07
    1.28E-07
    1.29E-07
    1.30E-07
    1.31E-07
    1.33E-07
    1.34E-07
    1.35E-07
    1.36E-07
    1.38E-07
    1.39E-07
    1.40E-07
    1.41E-07
    1.43E-07
    1.44E-07
    1.45E-07
    1.46E-07
    1.47E-07
    1.49E-07
    1.50E-07
    1.51E-07
    1.52E-07
    1.54E-07
    1.55E-07
    1.56E-07
    1.57E-07
    1.59E-07
    1.60E-07
    1.61E-07
    1.62E-07
    1.64E-07
    1.65E-07
    1.66E-07
    1.67E-07
    1.68E-07
    1.70E-07
    1.71E-07
    1.72E-07
    1.73E-07
    1.75E-07
    1.76E-07
    1.77E-07
    1.78E-07
    1.80E-07
    1.81E-07
    1.82E-07
    1.83E-07
    1.85E-07
    1.86E-07
    1.87E-07
    1.88E-07
    1.90E-07
    1.91E-07
    1.92E-07
    1.93E-07
    1.94E-07
    1.96E-07
    1.97E-07
    1.98E-07
    1.99E-07
    2.01E-07
    2.02E-07
    2.03E-07
    2.04E-07
    2.06E-07
    2.07E-07
    2.08E-07
    2.09E-07
    2.11E-07
    2.12E-07
    2.13E-07
    2.14E-07
    2.16E-07
    2.17E-07
    2.18E-07
    2.19E-07
    2.20E-07
    2.22E-07
    2.23E-07
    2.24E-07
    2.25E-07
    2.27E-07
    2.28E-07
    2.29E-07
    2.30E-07
    2.32E-07
    2.33E-07
    2.34E-07
    2.35E-07
    2.37E-07
    2.38E-07
    2.39E-07
    2.40E-07
    2.41E-07
    2.43E-07
    2.44E-07
    2.45E-07
    2.46E-07
    2.48E-07
    2.49E-07
    2.50E-07
    2.51E-07
    2.53E-07
    2.54E-07
    2.55E-07
    2.56E-07
    2.58E-07
    2.59E-07
    2.60E-07
    2.61E-07
    2.63E-07
    2.64E-07
    2.65E-07
    2.66E-07
    2.67E-07
    2.69E-07
    2.70E-07
    2.71E-07
    2.72E-07
    2.74E-07
    2.75E-07
    2.76E-07
    2.77E-07
    2.79E-07
    2.80E-07
    2.81E-07
    2.82E-07
    2.84E-07
    2.85E-07
    2.86E-07
    2.87E-07
    2.88E-07
    2.90E-07
    2.91E-07
    2.92E-07
    2.93E-07
    2.95E-07
    2.96E-07
    2.97E-07
    2.98E-07
    3.00E-07
    3.01E-07
    3.02E-07
    3.03E-07
    3.05E-07
    3.06E-07
    3.07E-07
    3.08E-07
    3.10E-07
    3.11E-07
    3.12E-07
    3.13E-07
    3.14E-07
    3.16E-07
    3.17E-07
    3.18E-07
    3.19E-07
    3.21E-07
    3.22E-07
    3.23E-07
    3.24E-07
    3.26E-07
    3.27E-07
    3.28E-07
    3.29E-07
    3.31E-07
    3.32E-07
    3.33E-07
    3.34E-07
    3.35E-07
    3.37E-07
    3.38E-07
    3.39E-07
    3.40E-07
    3.42E-07
    3.43E-07
    3.44E-07
    3.45E-07
    3.47E-07
    3.48E-07
    3.49E-07
    3.50E-07
    3.52E-07
    3.53E-07
    3.54E-07
    3.55E-07
    3.57E-07
    3.58E-07
    3.59E-07
    3.60E-07
    3.61E-07
    3.63E-07
    3.64E-07
    3.65E-07
    3.66E-07
    3.68E-07
    3.69E-07
    3.70E-07
    3.71E-07
    3.73E-07
    3.74E-07
    3.75E-07
    3.76E-07
    3.78E-07
    3.79E-07
    3.80E-07
    3.81E-07
    3.83E-07
    3.84E-07
    3.85E-07
    3.86E-07
    3.87E-07
    3.89E-07
    3.90E-07
    3.91E-07
    3.92E-07
    3.94E-07
    3.95E-07
    3.96E-07
    3.97E-07
    3.99E-07
    4.00E-07
    4.01E-07
    4.02E-07
    4.04E-07
    4.05E-07
    4.06E-07
    4.07E-07
    4.08E-07
    4.10E-07
    4.11E-07
    4.12E-07
    4.13E-07
    4.15E-07
    4.16E-07
    4.17E-07
    4.18E-07
    4.20E-07
    4.21E-07
    4.22E-07
    4.23E-07
    4.25E-07
    4.26E-07
    4.27E-07
    4.28E-07
    4.30E-07
    4.31E-07
    4.32E-07
    4.33E-07
    4.34E-07
    4.36E-07
    4.37E-07
    4.38E-07
    4.39E-07
    4.41E-07
    4.42E-07
    4.43E-07
    4.44E-07
    4.46E-07
    4.47E-07
    4.48E-07
    4.49E-07
    4.51E-07
    4.52E-07
    4.53E-07
    4.54E-07
    4.55E-07
    4.57E-07
    4.58E-07
    4.59E-07
    4.60E-07
    4.62E-07
    4.63E-07
    4.64E-07
    4.65E-07
    4.67E-07
    4.68E-07
    4.69E-07
    4.70E-07
    4.72E-07
    4.73E-07
    4.74E-07
    4.75E-07
    4.77E-07
    4.78E-07
    4.79E-07
    4.80E-07
    4.81E-07
    4.83E-07
    4.84E-07
    4.85E-07
    4.86E-07
    4.88E-07
    4.89E-07
    4.90E-07
    4.91E-07
    4.93E-07
    4.94E-07
    4.95E-07
    4.96E-07
    4.98E-07
    4.99E-07
    5.00E-07
    5.01E-07
    5.02E-07
    5.04E-07
    5.05E-07
    5.06E-07
    5.07E-07
    5.09E-07
    5.10E-07
    5.11E-07
    5.12E-07
    5.14E-07
    5.15E-07
    5.16E-07
    5.17E-07
    5.19E-07
    5.20E-07
    5.21E-07
    5.22E-07
    5.24E-07
    5.25E-07
    5.26E-07
    5.27E-07
    5.28E-07
    5.30E-07
    5.31E-07
    5.32E-07
    5.33E-07
    5.35E-07
    5.36E-07
    5.37E-07
    5.38E-07
    5.40E-07
    5.41E-07
    5.42E-07
    5.43E-07
    5.45E-07
    5.46E-07
    5.47E-07
    5.48E-07
    5.50E-07
    5.51E-07
    5.52E-07
    5.53E-07
    5.54E-07
    5.56E-07
    5.57E-07
    5.58E-07
    5.59E-07
    5.61E-07
    5.62E-07
    5.63E-07
    5.64E-07
    5.66E-07
    5.67E-07
    5.68E-07
    5.69E-07
    5.71E-07
    5.72E-07
    5.73E-07
    5.74E-07
    5.75E-07
    5.77E-07
    5.78E-07
    5.79E-07
    5.80E-07
    5.82E-07
    5.83E-07
    5.84E-07
    5.85E-07
    5.87E-07
    5.88E-07
    5.89E-07
    5.90E-07
    5.92E-07
    5.93E-07
    5.94E-07
    5.95E-07
    5.97E-07
    5.98E-07
    5.99E-07
    6.00E-07
    6.01E-07
    6.03E-07
    6.04E-07
    6.05E-07
    6.06E-07
    6.08E-07
    6.09E-07
    6.10E-07
    6.11E-07
    6.13E-07
    6.14E-07
    6.15E-07
    6.16E-07
    6.17E-07
    0

    #7115
    mathias
    Keymaster

    What if you half dx and quarter dt? Does it get smaller?

Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.