From efe20ba27f2a2299876944c26d931e5cbd60aa15 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Wed, 24 Apr 2024 16:38:48 +0200 Subject: [PATCH 001/142] feat: Add possibility to customize skin variable in CalculateNodalDistanceToSkinProcess --- .../linear_solvers/fallback_linear_solver.h | 897 ++++++++++++++++++ 1 file changed, 897 insertions(+) create mode 100644 kratos/linear_solvers/fallback_linear_solver.h diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h new file mode 100644 index 000000000000..52f1b8acec88 --- /dev/null +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -0,0 +1,897 @@ +// +// | / | +// ' / __| _` | __| _ \ __| +// . \ | ( | | ( |\__ ` +// _|\_\_| \__,_|\__|\___/ ____/ +// Multi-Physics +// +// License: BSD License +// Kratos default license: kratos/license.txt +// +// Main authors: Vicente Mataix Ferrandiz +// + +#pragma once + +// System includes +#include + +// External includes + +// Project includes +#include "includes/kratos_parameters.h" +#include "linear_solvers/linear_solver.h" +#include "factories/linear_solver_factory.h" + +namespace Kratos +{ +///@name Kratos Globals +///@{ + +///@} +///@name Type Definitions +///@{ + +///@} +///@name Enum's +///@{ + +///@} +///@name Functions +///@{ + +///@} +///@name Kratos Classes +///@{ + +/** + * @class FallbackLinearSolver + * @ingroup KratosCore + * @brief This is a simple linear solver that tries to solve the system using a list of solvers in order, until one of them succeeds. + * @details Stores a vector of solvers and tries to solve the system using the first one. If the solver fails, it tries the next one, and so on. + * @tparam TSparseSpaceType which specify type of the unknowns, coefficients, sparse matrix, vector of unknowns, right hand side vector and their respective operators. + * @tparam TDenseMatrixType which specify type of the matrices used as temporary matrices or multi solve unknowns and right hand sides and their operators. + * @tparam TReordererType which specify type of the Orderer that performs the reordering of matrix to optimize the solution. + * @see SparseSpace + * @see DenseSpace + * @see Reorderer + * @author Vicente Mataix Ferrandiz + */ +template> +class FallbackLinearSolver + : public LinearSolver { +public: + ///@name Type Definitions + ///@{ + + /// Pointer definition of LinearSolver + KRATOS_CLASS_POINTER_DEFINITION(FallbackLinearSolver); + + /// Definition of the base class + using BaseType = LinearSolver; + + /// Definition of the base type pointer + using LinearSolverPointer = typename BaseType::Pointer; + + /// The definition of the linear solver factory + using LinearSolverFactoryType = LinearSolverFactory; + + /// Type definition for sparse matrix + using SparseMatrixType = typename BaseType::SparseMatrixType; + + /// Type definition for pointer to sparse matrix + using SparseMatrixPointerType = typename BaseType::SparseMatrixPointerType; + + /// Type definition for vector + using VectorType = typename BaseType::VectorType; + + /// Type definition for pointer to vector + using VectorPointerType = typename BaseType::VectorPointerType; + + /// Type definition for dense matrix + using DenseMatrixType = typename BaseType::DenseMatrixType; + + /// Type definition for dense vector + using DenseVectorType = typename BaseType::DenseVectorType; + + /// Type definition for size + using SizeType = std::size_t; + + /// Type definition for index + using IndexType = std::size_t; + + ///@} + ///@name Life Cycle + ///@{ + + /** + * @brief This is the default constructor + * @param ThisParameters The configuration parameters + */ + FallbackLinearSolver(Parameters ThisParameters = Parameters(R"({})")) + : mParameters(ThisParameters) + { + // Set the default parameters + mParameters.ValidateAndAssignDefaults(GetDefaultParameters()); + + // Define the solvers + const SizeType number_of_solver_parameters = mParameters["solvers"].size(); + KRATOS_ERROR_IF(number_of_solver_parameters == 0) << "No solvers defined in the parameters" << std::endl; + mSolvers.reserve(number_of_solver_parameters); + for (IndexType i = 0; i < number_of_solver_parameters; ++i) { + mSolvers.push_back(ConstructLinearSolverFromSettings(mParameters["solvers"][i])); + } + + // Set some member variables from the parameters + CommonSettingsFromParameters(); + } + + /** + * @brief Constructor with two solvers + * @param pSolver1 The first LinearSolverPointer to set. + * @param pSolver2 The second LinearSolverPointer to set. + * @param ThisParameters The configuration parameters + */ + FallbackLinearSolver( + LinearSolverPointer pSolver1, + LinearSolverPointer pSolver2, + Parameters ThisParameters = Parameters(R"({})") + ) : mSolvers({pSolver1, pSolver2}), + mParameters(ThisParameters) + { + // Set the default parameters + mParameters.ValidateAndAssignDefaults(GetDefaultParameters()); + + // Fill the parameters with the solvers + FillParametersFromSolver(pSolver1); + FillParametersFromSolver(pSolver2); + + // Set some member variables from the parameters + CommonSettingsFromParameters(); + } + + /** + * @brief Constructor with a list of solvers + * @param rSolvers A vector of LinearSolverPointer to set. + * @param ThisParameters The configuration parameters + */ + FallbackLinearSolver( + const std::vector& rSolvers, + Parameters ThisParameters = Parameters(R"({})") + ) : mSolvers(rSolvers), + mParameters(ThisParameters) + { + // Set the default parameters + mParameters.ValidateAndAssignDefaults(GetDefaultParameters()); + + // Fill the parameters with the solvers + for (auto& p_solver : mSolvers) { + FillParametersFromSolver(p_solver); + } + + // Set some member variables from the parameters + CommonSettingsFromParameters(); + } + + /// Copy constructor. + FallbackLinearSolver(const FallbackLinearSolver& rOther) + : mSolvers(rOther.mSolvers), + mParameters(rOther.mParameters), + mCurrentSolverIndex(rOther.mCurrentSolverIndex) + { + } + + /// Destructor. + ~FallbackLinearSolver() override = default; + + ///@} + ///@name Operators + ///@{ + + /// Assignment operator. + FallbackLinearSolver& operator=(const FallbackLinearSolver& rOther) + { + mSolvers = rOther.mSolvers; + mParameters = rOther.mParameters; + mCurrentSolverIndex = rOther.mCurrentSolverIndex; + return *this; + } + + ///@} + ///@name Operations + ///@{ + + /** + * @brief This function is designed to be called as few times as possible. + * @details It creates the data structures that only depend on the connectivity of the matrix (and not on its coefficients) so that the memory can be allocated once and expensive operations can be done only when strictly needed + * @param rA. System matrix + * @param rX. Solution vector. it's also the initial guess for iterative linear solvers. + * @param rB. Right hand side vector. + */ + void Initialize( + SparseMatrixType& rA, + VectorType& rX, + VectorType& rB + ) override + { + // TODO: Decide if call all solvers or just the current one + // NOTE: We assume that initializes internal data of solvers, not system of equations + for (auto& p_solver : mSolvers) { + p_solver->Initialize(rA, rX, rB); + } + // GetCurrentSolver()->Initialize(rA, rX, rB); + } + + /** + * @brief This function is designed to be called every time the coefficients change in the system that is, normally at the beginning of each solve. + * @details For example if we are implementing a direct solver, this is the place to do the factorization + * so that then the backward substitution can be performed effectively more than once + * @param rA. System matrix + * @param rX. Solution vector. it's also the initial guess for iterative linear solvers. + * @param rB. Right hand side vector. + */ + void InitializeSolutionStep( + SparseMatrixType& rA, + VectorType& rX, + VectorType& rB + ) override + { + // TODO: Decide if call all solvers or just the current one + // NOTE: We assume it may modify the system of equations, therefore we call just in the current solver + // for (auto& p_solver : mSolvers) { + // p_solver->InitializeSolutionStep(rA, rX, rB); + // } + GetCurrentSolver()->InitializeSolutionStep(rA, rX, rB); + } + + /** + * @brief This function is designed to be called at the end of the solve step. + * @details for example this is the place to remove any data that we do not want to save for later + * @param rA. System matrix + * @param rX. Solution vector. it's also the initial guess for iterative linear solvers. + * @param rB. Right hand side vector. + */ + void FinalizeSolutionStep( + SparseMatrixType& rA, + VectorType& rX, + VectorType& rB + ) override + { + // TODO: Decide if call all solvers or just the current one + // NOTE: We assume it may modify the system of equations, therefore we call just in the current solver + // for (auto& p_solver : mSolvers) { + // p_solver->FinalizeSolutionStep(rA, rX, rB); + // } + GetCurrentSolver()->FinalizeSolutionStep(rA, rX, rB); + } + + /** + * @brief This function actually performs the solution work, eventually taking advantage of what was done before in the Initialize and InitializeSolutionStep functions. + * @param rA. System matrix + * @param rX. Solution vector. it's also the initial guess for iterative linear solvers. + * @param rB. Right hand side vector. + */ + void PerformSolutionStep( + SparseMatrixType& rA, + VectorType& rX, + VectorType& rB + ) override + { + GetCurrentSolver()->PerformSolutionStep(rA, rX, rB); + } + + /** + * @brief This function is designed to clean up all internal data in the solver. + * @details Clear is designed to leave the solver object as if newly created. After a clear a new Initialize is needed + */ + void Clear() override + { + // Call all clears + for (auto& p_solver : mSolvers) { + p_solver->Clear(); + } + + // Clear the data + mCurrentSolverIndex = 0; + } + + /** + * @brief Normal solve method. + * @details Solves the linear system Ax=b and puts the result on SystemVector& rX. + rX is also th initial guess for iterative methods. + * @param rA. System matrix + * @param rX. Solution vector. it's also the initial + guess for iterative linear solvers. + * @param rB. Right hand side vector. + */ + bool Solve( + SparseMatrixType& rA, + VectorType& rX, + VectorType& rB + ) override + { + if (mResetSolverIndexEachTry) mCurrentSolverIndex = 0; + bool success = false; + while (!success && mCurrentSolverIndex < mSolvers.size()) { + success = GetCurrentSolver()->Solve(rA, rX, rB); + // In case of failure + if (!success) { + // First, update the counter + UpdateCounterSolverIndex(); + + // Call initialize methods + InitializeSolutionStep(rA, rX, rB); + } + } + return success; + } + + /** + * @brief Multi solve method for solving a set of linear systems with same coefficient matrix. + * @details Solves the linear system Ax=b and puts the result on SystemVector& rX. rX is also th initial guess for iterative methods. + * @param rA. System matrix + * @param rX. Solution vector. it's also the initial + guess for iterative linear solvers. + * @param rB. Right hand side vector. + */ + bool Solve( + SparseMatrixType& rA, + DenseMatrixType& rX, + DenseMatrixType& rB + ) override + { + if (mResetSolverIndexEachTry) mCurrentSolverIndex = 0; + bool success = false; + while (!success && mCurrentSolverIndex < mSolvers.size()) { + success = GetCurrentSolver()->Solve(rA, rX, rB); + // In case of failure + if (!success) { + // First, update the counter + UpdateCounterSolverIndex(); + + // // Call initialize methods (NOTE: does not exist the method for dense matrices) + // InitializeSolutionStep(rA, rX, rB); + } + } + return success; + } + + /** + * @brief Eigenvalue and eigenvector solve method for derived eigensolvers + * @param K The stiffness matrix + * @param M The mass matrix + * @param Eigenvalues The vector containing the eigen values + * @param Eigenvectors The matrix containing the eigen vectors + */ + void Solve( + SparseMatrixType& K, + SparseMatrixType& M, + DenseVectorType& Eigenvalues, + DenseMatrixType& Eigenvectors + ) override + { + KRATOS_ERROR << "This is designed for linear system only, not for eigen values calculation" << std::endl; + } + + /** + * @brief Checks if additional physical data is needed by the solver. + * @details Some solvers may require a minimum degree of knowledge of the structure of the matrix. + * For instance, when solving a mixed u-p problem, it is important to identify the row associated with v and p. + * Another example is the automatic prescription of rotation null-space for smoothed-aggregation solvers, + * which require knowledge of the spatial position of the nodes associated with a given degree of freedom (DOF). + * @return True if additional physical data is needed, false otherwise. + */ + bool AdditionalPhysicalDataIsNeeded() override + { + return GetCurrentSolver()->AdditionalPhysicalDataIsNeeded(); + } + + /** + * @brief Provides additional physical data required by the solver. + * @details Some solvers may require a minimum degree of knowledge of the structure of the matrix. + * For example, when solving a mixed u-p problem, it is important to identify the row associated with v and p. + * Another example is the automatic prescription of rotation null-space for smoothed-aggregation solvers, + * which require knowledge of the spatial position of the nodes associated with a given degree of freedom (DOF). + * This function provides the opportunity to provide such data if needed. + * @param rA The sparse matrix. + * @param rX The solution vector. + * @param rB The right-hand side vector. + * @param rDoFSet The set of degrees of freedom. + * @param rModelPart The model part. + */ + void ProvideAdditionalData( + SparseMatrixType& rA, + VectorType& rX, + VectorType& rB, + typename ModelPart::DofsArrayType& rDoFSet, + ModelPart& rModelPart + ) override + { + GetCurrentSolver()->ProvideAdditionalData(rA, rX, rB, rDoFSet, rModelPart); + } + + /** + * @brief Add a linear solver to the collection. + * @details This function adds a linear solver to the collection without extending parameters. + * @param pSolver Pointer to the linear solver to be added. + */ + void AddSolver(LinearSolverPointer pSolver) + { + // Increase the solvers vector + mSolvers.push_back(pSolver); + } + + /** + * @brief Add a linear solver to the collection with additional parameters. + * @details This function adds a linear solver to the collection and extends the parameters. + * @param pSolver Pointer to the linear solver to be added. + * @param ThisParameters Parameters associated with the linear solver. + * @note This function extends parameters, but the interface for this is yet to be decided. + */ + void AddSolver( + LinearSolverPointer pSolver, + const Parameters ThisParameters + ) + { + // Increase the solvers vector + AddSolver(pSolver); + + // Extend the parameters + FillParametersFromSolver(pSolver); + } + + ///@} + ///@name Access + ///@{ + + /** + * @brief Get the Solvers list. + * @return const std::vector& Reference to the vector of solvers. + */ + const std::vector& GetSolvers() const + { + return mSolvers; + } + + /** + * @brief Set the Solvers list. + * @param rSolvers A vector of LinearSolverPointer to set. + */ + void SetSolvers(const std::vector& rSolvers) + { + mSolvers = rSolvers; + } + + /** + * @brief Check if the solver index should be reset for each try. + * @return true If the solver index is reset for each try. + * @return false Otherwise. + */ + bool& GetResetSolverIndexEachTry() + { + return mResetSolverIndexEachTry; + } + + /** + * @brief Set whether the solver index should be reset for each try. + * @param Reset Flag indicating whether to reset the solver index each try. + */ + void SetResetSolverIndexEachTry(const bool Reset) + { + mResetSolverIndexEachTry = Reset; + } + + /** + * @brief Get the Parameters. + * @return Parameters copy to the Parameters object. + */ + Parameters GetParameters() const + { + return mParameters; + } + + /** + * @brief Set the Parameters. + * @param parameters A Parameters object to set. + */ + void SetParameters(const Parameters ThisParameters) + { + mParameters = ThisParameters; + } + + /** + * @brief Get the Current Solver Index. + * @return IndexType The current solver index. + */ + IndexType& GetCurrentSolverIndex() + { + return mCurrentSolverIndex; + } + + /** + * @brief Set the Current Solver Index. + * @param index The new solver index to set. + */ + void SetCurrentSolverIndex(const IndexType Index) + { + mCurrentSolverIndex = Index; + } + + ///@} + ///@name Inquiry + ///@{ + + /** + * @brief Get the number of solvers. + * @details This function returns the number of solvers currently stored. + * @return std::size_t The number of solvers. + */ + std::size_t NumberOfSolvers() const + { + return mSolvers.size(); + } + + /** + * @brief This method checks if the dimensions of the system of equations are consistent + * @param rA The LHS of the system of equations + * @param rX The vector containing the unknowns + * @param rB The RHS of the system of equations + * @return True if consistent, false otherwise + */ + bool IsConsistent( + SparseMatrixType& rA, + VectorType& rX, + VectorType& rB + ) override + { + return GetCurrentSolver()->IsConsistent(rA, rX, rB); + } + + /** + * @brief This method checks if the dimensions of the system of equations are consistent (dense matrix for RHS and unknowns version) + * @param rA The LHS of the system of equations + * @param rX The matrix containing the unknowns + * @param rB The matrix containing the RHSs of the system of equations + * @return True if consistent, false otherwise + */ + bool IsConsistent( + SparseMatrixType& rA, + DenseMatrixType& rX, + DenseMatrixType& rB + ) override + { + return GetCurrentSolver()->IsConsistent(rA, rX, rB); + } + + /** + * @brief This method checks if the dimensions of the system of equations are not consistent + * @param rA The LHS of the system of equations + * @param rX The vector containing the unknowns + * @param rB The RHS of the system of equations + * @return False if consistent, true otherwise + */ + bool IsNotConsistent( + SparseMatrixType& rA, + VectorType& rX, + VectorType& rB + ) override + { + return GetCurrentSolver()->IsNotConsistent(rA, rX, rB); + } + + /** + * @brief This method checks if the dimensions of the system of equations are not consistent + * @param rA The LHS of the system of equations + * @param rX The matrix containing the unknowns + * @param rB The matrix containing the RHSs of the system of equations + * @return False if consistent, true otherwise + */ + bool IsNotConsistent( + SparseMatrixType& rA, + DenseMatrixType& rX, + DenseMatrixType& rB + ) override + { + return GetCurrentSolver()->IsNotConsistent(rA, rX, rB); + } + + ///@} + ///@name Input and output + ///@{ + + /// Turn back information as a string. + std::string Info() const override + { + return "Simple linear solver fallback"; + } + + /// Print information about this object. + void PrintInfo(std::ostream& rOStream) const override + { + rOStream << "Simple linear solver fallback"; + } + + /// Print object's data. + void PrintData(std::ostream& rOStream) const override + { + rOStream << "Simple linear solver fallback data: "; + for (auto& p_solver : mSolvers) { + rOStream << "\nSolver: " << p_solver->Info() << "\n:"; + p_solver->PrintData(rOStream); + } + rOStream << "\nReset solver index each try: " << mResetSolverIndexEachTry; + rOStream << "\nGlobal parameters: " << mParameters; + rOStream << "\nCurrent solver index: " << mCurrentSolverIndex << std::endl; + } + + ///@} + ///@name Friends + ///@{ + + ///@} +protected: + ///@name Protected static Member Variables + ///@{ + + ///@} + ///@name Protected member Variables + ///@{ + + /// The list of solvers to try + std::vector mSolvers; + + /// Flag to reset the solver index each try + bool mResetSolverIndexEachTry = false; + + /// The parameters + Parameters mParameters; + + /// The current solver index + IndexType mCurrentSolverIndex = 0; + + ///@} + ///@name Protected Operators + ///@{ + + ///@} + ///@name Protected Operations + ///@{ + + /** + * @brief Constructs a linear solver based on the provided settings. + * @details This function is responsible for instantiating a linear solver object using the configuration specified in the `Settings` parameter. It leverages a factory pattern to select and construct the appropriate solver type based on the parameters provided. The selection process considers the solver type, tolerance, maximum iterations, and other solver-specific parameters contained within `Settings`. + * The factory supports constructing various types of solvers, such as Conjugate Gradient, LU Decomposition, and others, depending on the `solver_type` parameter within `Settings`. It throws a `std::invalid_argument` exception if the settings specify an unsupported solver type or if required parameters for the selected solver type are missing or invalid. + * @param Settings A `Parameters` object containing the configuration settings for the linear solver to be constructed. This includes type, tolerance, maximum iterations, and other solver-specific parameters. + * @return Returns a `LinearSolverPointer` pointing to the newly constructed linear solver instance. If the factory implementation cannot find a matching solver type or if essential parameters are missing or invalid, it throws an exception. + * @exception std::invalid_argument Thrown if the settings specify an unsupported solver type or if required parameters are missing or invalid. + */ + LinearSolverPointer ConstructLinearSolverFromSettings(const Parameters Settings) + { + // Implementation that delegates to a factory method. + // The factory method 'Create' is responsible for parsing 'Settings' + // and constructing the appropriate solver. + const auto linear_solver_factory = LinearSolverFactoryType(); + Parameters linear_solver_settings(Settings); + const std::string linear_solver_type = linear_solver_settings["solver_type"].GetString(); + // If the solver type is a faster direct solver, try to use it + if (linear_solver_type == "faster_direct_solver") { + std::vector faster_direct_solvers; + if constexpr (TSparseSpaceType::IsDistributed()) { + faster_direct_solvers = std::vector({ // May need to be updated and reordered. In fact I think it depends of the size of the equation system + "mumps2", // Amesos2 (if compiled with MUMPS-support) + "mumps", // Amesos (if compiled with MUMPS-support) + "super_lu_dist2", // Amesos2 SuperLUDist (if compiled with MPI-support) + "super_lu_dist", // Amesos SuperLUDist (if compiled with MPI-support) + "amesos2", // Amesos2 + "amesos", // Amesos + "klu2", // Amesos2 KLU + "klu", // Amesos KLU + "basker" // Amesos2 Basker + }); + } else { + faster_direct_solvers = std::vector({ + "pardiso_lu", // LinearSolversApplication (if compiled with Intel-support) + "pardiso_ldlt", // LinearSolversApplication (if compiled with Intel-support) + "sparse_lu", // LinearSolversApplication + "skyline_lu_factorization" // In Core, always available, but slow + }); + } + for (const std::string& r_solver_name : faster_direct_solvers) { + if (linear_solver_factory.Has(r_solver_name)) { + linear_solver_settings["solver_type"].SetString(r_solver_name); + } + } + } + return linear_solver_factory.Create(linear_solver_settings); + } + + /** + * @brief Adds solver parameters to the mParameters object. + * @details This function generates a new set of parameters for a solver and adds it to the 'solvers' array within the mParameters object. Each new solver parameter set is given a unique identifier based on the current count of existing solvers. The function updates the 'solver_type' field with information from the provided solver, marking the settings as unknown. + * @param pSolver A pointer to the solver from which information is extracted to fill the new parameters. This solver provides its own description through the Info() method, which is included in the 'solver_type'. + * @throw std::invalid_argument If pSolver is nullptr, indicating an invalid solver pointer was provided. + * @note The function assumes mParameters is properly initialized and contains a 'solvers' key that supports adding new values. + */ + void FillParametersFromSolver(LinearSolverPointer pSolver) + { + // Ensure the solver pointer is not null + if (!pSolver) { + throw std::invalid_argument("Solver pointer is null."); + } + + // Initialize dummy parameters for the new solver + Parameters dummy_parameters = Parameters(R"({ + "solver_type": "a_name_for_the_solver" + })"); + + // Set the solver type to include the solver's information + dummy_parameters["solver_type"].SetString(pSolver->Info() + " (settings unknown)"); + + // Generate a unique key and add the new solver parameters to the collection + mParameters["solvers"].Append(dummy_parameters); + } + + /** + * @brief Updates common settings from the parameter set. + * @details This method reads and applies common configuration settings from the `mParameters` member variable. It is designed to be called to update the object's configuration state based on external parameters, typically at the initialization stage or when parameters are updated. + * @note This function currently updates settings related to resetting the solver index for each try. It can + * be extended to include more common settings as needed. + * @see `mParameters` for the structure and expected parameters. + */ + void CommonSettingsFromParameters() + { + // Set the member variables + mResetSolverIndexEachTry = mParameters["reset_solver_index_each_try"].GetBool(); + } + + /** + * @brief Get the default parameters for this solver. + * @details This function returns the default parameters for configuring this solver. + * @return Default parameters for the solver. + */ + const Parameters GetDefaultParameters() const + { + return Parameters(R"({ + "solver_type": "fallback_linear_solver", + "solvers" : [ + // Empty in defaults. Should be filled with the solvers to try. For example: + // { + // "solver_type": "amgcl" + // }, + // { + // "solver_type": "skyline_lu_factorization" + // } + // Label of the solver is solver_x, where x is the index in the list + ], + "reset_solver_index_each_try": false + })"); + } + + /** + * @brief Updates the solver index counter and logs transitions between solvers. + * @details This method increments the current solver index to switch to the next solver in a sequence of fallback solvers. + * It logs both the settings of the solver that failed (if any) and the settings of the next solver to be used. + * The method is designed to facilitate easy tracking and debugging of solver transitions within a sequence. + * @note This method now includes safety checks to prevent out-of-bounds access to the solver array. It also + * outlines a placeholder for enhanced future functionality, such as more comprehensive logging or + * additional transition actions. + */ + void UpdateCounterSolverIndex() + { + // Safety check to ensure we have solvers to work with + if (mSolvers.empty()) { + KRATOS_WARNING("FallbackLinearSolver") << "No solvers are configured." << std::endl; + return; + } + + // Log the settings of the current (failing) solver, if applicable + if (mCurrentSolverIndex < mSolvers.size()) { + KRATOS_INFO("FallbackLinearSolver") << "Current solver " << GetCurrentSolver()->Info() << " failed with the following settings: " << mParameters["solvers"][mCurrentSolverIndex].PrettyPrintJsonString() << std::endl; + } else { + KRATOS_WARNING("FallbackLinearSolver") << "Current solver index is out of bounds." << std::endl; + return; + } + + // Increment the counter + mCurrentSolverIndex++; + + // Print the new solver settings + if (mCurrentSolverIndex < mSolvers.size()) { + KRATOS_INFO("FallbackLinearSolver") << "Switching to new solver " << GetCurrentSolver()->Info() << " with the following settings: " << mParameters["solvers"][mCurrentSolverIndex].PrettyPrintJsonString() << std::endl; + } else { + KRATOS_WARNING("FallbackLinearSolver") << "New solver index is out of bounds." << std::endl; + return; + } + } + + /** + * @brief Get the current linear solver. + * @details This function returns the current linear solver being used. + * @return A pointer to the current linear solver. + * @note If the current solver index is out of range, an error is thrown. + */ + LinearSolverPointer GetCurrentSolver() + { + // Safety check to ensure we have solvers to work with + if (mCurrentSolverIndex < mSolvers.size()) { + return mSolvers[mCurrentSolverIndex]; + } else { // Throw an error if the index is out of bounds + KRATOS_ERROR << "Invalid solver index: " << mCurrentSolverIndex << std::endl; + } + } + + ///@} + ///@name Protected Access + ///@{ + + ///@} + ///@name Protected Inquiry + ///@{ + + ///@} + ///@name Protected LifeCycle + ///@{ + + ///@} +private: + ///@name Static Member Variables + ///@{ + + ///@} + ///@name Member Variables + ///@{ + + ///@} + ///@name Private Operators + ///@{ + + ///@} + ///@name Private Operations + ///@{ + + ///@} + ///@name Private Access + ///@{ + + ///@} + ///@name Private Inquiry + ///@{ + + ///@} + ///@name Un accessible methods + ///@{ + + ///@} +}; // Class FallbackLinearSolver + +///@} + +///@name Type Definitions +///@{ + +///@} +///@name Input and output +///@{ + +/// input stream function +template +inline std::istream& operator >> (std::istream& IStream, + FallbackLinearSolver& rThis) +{ + return IStream; +} + +/// output stream function +template +inline std::ostream& operator << (std::ostream& rOStream, + const FallbackLinearSolver& rThis) +{ + rThis.PrintInfo(rOStream); + rOStream << std::endl; + rThis.PrintData(rOStream); + + return rOStream; +} +///@} + +} // namespace Kratos. From d794f45e1d35813b51c0067b204b03acf29e31f4 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Wed, 24 Apr 2024 16:39:01 +0200 Subject: [PATCH 002/142] feat: Add possibility to customize skin variable in CalculateNodalDistanceToSkinProcess --- .../python/add_linear_solvers_to_python.cpp | 76 ++++++++++++------- 1 file changed, 49 insertions(+), 27 deletions(-) diff --git a/kratos/python/add_linear_solvers_to_python.cpp b/kratos/python/add_linear_solvers_to_python.cpp index 76b8f059eae3..9ff1baff2641 100644 --- a/kratos/python/add_linear_solvers_to_python.cpp +++ b/kratos/python/add_linear_solvers_to_python.cpp @@ -31,6 +31,7 @@ #include "linear_solvers/skyline_lu_factorization_solver.h" #include "linear_solvers/skyline_lu_custom_scalar_solver.h" #include "linear_solvers/scaling_solver.h" +#include "linear_solvers/fallback_linear_solver.h" #include "linear_solvers/preconditioner.h" #include "linear_solvers/diagonal_preconditioner.h" @@ -55,26 +56,26 @@ void AddLinearSolversToPython(pybind11::module& m) { namespace py = pybind11; - typedef UblasSpace> SpaceType; - typedef UblasSpace LocalSpaceType; - typedef TUblasSparseSpace> ComplexSpaceType; - typedef TUblasDenseSpace> ComplexLocalSpaceType; - - typedef LinearSolver LinearSolverType; - typedef IterativeSolver IterativeSolverType; - typedef CGSolver CGSolverType; - typedef DeflatedCGSolver DeflatedCGSolverType; - typedef BICGSTABSolver BICGSTABSolverType; - typedef TFQMRSolver TFQMRSolverType; - typedef ScalingSolver ScalingSolverType; - typedef PowerIterationEigenvalueSolver PowerIterationEigenvalueSolverType; - typedef PowerIterationHighestEigenvalueSolver PowerIterationHighestEigenvalueSolverType; - typedef RayleighQuotientIterationEigenvalueSolver RayleighQuotientIterationEigenvalueSolverType; - - typedef TLinearSolverType, std::complex> ComplexLinearSolverType; - typedef TLinearSolverType> MixedLinearSolverType; - typedef TDirectSolverType> ComplexDirectSolverType; - typedef SkylineLUCustomScalarSolver ComplexSkylineLUSolverType; + using SpaceType = UblasSpace>; + using LocalSpaceType = UblasSpace; + using ComplexSpaceType = TUblasSparseSpace>; + using ComplexLocalSpaceType = TUblasDenseSpace>; + + using LinearSolverType = LinearSolver; + using IterativeSolverType = IterativeSolver; + using CGSolverType = CGSolver; + using DeflatedCGSolverType = DeflatedCGSolver; + using BICGSTABSolverType = BICGSTABSolver; + using TFQMRSolverType = TFQMRSolver; + using ScalingSolverType = ScalingSolver; + using PowerIterationEigenvalueSolverType = PowerIterationEigenvalueSolver; + using PowerIterationHighestEigenvalueSolverType = PowerIterationHighestEigenvalueSolver; + using RayleighQuotientIterationEigenvalueSolverType = RayleighQuotientIterationEigenvalueSolver; + + using ComplexLinearSolverType = TLinearSolverType, std::complex>; + using MixedLinearSolverType = TLinearSolverType>; + using ComplexDirectSolverType = TDirectSolverType>; + using ComplexSkylineLUSolverType = SkylineLUCustomScalarSolver; bool (LinearSolverType::*pointer_to_solve)(LinearSolverType::SparseMatrixType& rA, LinearSolverType::VectorType& rX, LinearSolverType::VectorType& rB) = &LinearSolverType::Solve; void (LinearSolverType::*pointer_to_solve_eigen)(LinearSolverType::SparseMatrixType& rK, LinearSolverType::SparseMatrixType& rM,LinearSolverType::DenseVectorType& Eigenvalues, LinearSolverType::DenseMatrixType& Eigenvectors) = &LinearSolverType::Solve; @@ -85,26 +86,26 @@ void AddLinearSolversToPython(pybind11::module& m) //**************************************************************************************************** //preconditioners //**************************************************************************************************** - typedef Preconditioner PreconditionerType; + using PreconditionerType = Preconditioner; py::class_(m,"Preconditioner") .def(py::init< >() ) .def("__str__", PrintObject) ; - typedef DiagonalPreconditioner DiagonalPreconditionerType; + using DiagonalPreconditionerType = DiagonalPreconditioner; py::class_(m,"DiagonalPreconditioner") .def(py::init< >() ) .def("__str__", PrintObject) ; - typedef ILUPreconditioner ILUPreconditionerType; + using ILUPreconditionerType = ILUPreconditioner; py::class_(m,"ILUPreconditioner") .def(py::init< >() ) .def("__str__", PrintObject) ; - typedef ILU0Preconditioner ILU0PreconditionerType; + using ILU0PreconditionerType = ILU0Preconditioner; py::class_(m,"ILU0Preconditioner") .def(py::init< >() ) .def("__str__", PrintObject) @@ -191,9 +192,9 @@ void AddLinearSolversToPython(pybind11::module& m) .def(py::init()) ; - typedef Reorderer ReordererType; - typedef DirectSolver DirectSolverType; - typedef SkylineLUFactorizationSolver SkylineLUFactorizationSolverType; + using ReordererType = Reorderer; + using DirectSolverType = DirectSolver; + using SkylineLUFactorizationSolverType = SkylineLUFactorizationSolver; py::class_(m,"Reorderer") .def(py::init< >() ) @@ -237,6 +238,27 @@ void AddLinearSolversToPython(pybind11::module& m) .def("__str__", PrintObject) ; + using FallbackLinearSolverType = FallbackLinearSolver; + py::class_(m, "FallbackLinearSolver") + .def(py::init()) + .def(py::init()) + .def(py::init&, Parameters>()) + .def("AddSolver", [](FallbackLinearSolverType& rSelf, LinearSolverType::Pointer pSolver) { + rSelf.AddSolver(pSolver); + }) + .def("AddSolver", [](FallbackLinearSolverType& rSelf, LinearSolverType::Pointer pSolver, const Parameters ThisParameters) { + rSelf.AddSolver(pSolver, ThisParameters); + }) + .def("GetSolvers", &FallbackLinearSolverType::GetSolvers) + .def("SetSolvers", &FallbackLinearSolverType::SetSolvers) + .def("GetResetSolverIndexEachTry", &FallbackLinearSolverType::GetResetSolverIndexEachTry) + .def("SetResetSolverIndexEachTry", &FallbackLinearSolverType::SetResetSolverIndexEachTry) + .def("GetParameters", &FallbackLinearSolverType::GetParameters) + .def("SetParameters", &FallbackLinearSolverType::SetParameters) + .def("GetCurrentSolverIndex", &FallbackLinearSolverType::GetCurrentSolverIndex) + .def("SetCurrentSolverIndex", &FallbackLinearSolverType::SetCurrentSolverIndex) + ; + } } // namespace Kratos::Python. From b0b694086260e76bf40834c8bccebececb654c01 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Wed, 24 Apr 2024 16:39:10 +0200 Subject: [PATCH 003/142] feat: Add FallbackLinearSolver to standard linear solver factory --- .../standard_linear_solver_factory.cpp | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/kratos/factories/standard_linear_solver_factory.cpp b/kratos/factories/standard_linear_solver_factory.cpp index 7b19290d4e6a..a2feb44235e4 100644 --- a/kratos/factories/standard_linear_solver_factory.cpp +++ b/kratos/factories/standard_linear_solver_factory.cpp @@ -26,6 +26,7 @@ #include "linear_solvers/amgcl_solver.h" #include "linear_solvers/amgcl_ns_solver.h" #include "linear_solvers/scaling_solver.h" +#include "linear_solvers/fallback_linear_solver.h" #include "linear_solvers/monotonicity_preserving_solver.h" #include "linear_solvers/skyline_lu_custom_scalar_solver.h" #include "spaces/ublas_space.h" @@ -34,23 +35,24 @@ namespace Kratos { void RegisterLinearSolvers() { - typedef TUblasSparseSpace SpaceType; - typedef TUblasDenseSpace LocalSpaceType; - typedef TUblasSparseSpace> ComplexSpaceType; - typedef TUblasDenseSpace> ComplexLocalSpaceType; -// typedef LinearSolver LinearSolverType; -// typedef IterativeSolver IterativeSolverType; - typedef CGSolver CGSolverType; - typedef DeflatedCGSolver DeflatedCGSolverType; - typedef BICGSTABSolver BICGSTABSolverType; - typedef TFQMRSolver TFQMRSolverType; - typedef SkylineLUFactorizationSolver SkylineLUFactorizationSolverType; - typedef AMGCLSolver AMGCLSolverType; - typedef AMGCL_NS_Solver AMGCL_NS_SolverType; - typedef SkylineLUCustomScalarSolver SkylineLUComplexSolverType; + using SpaceType = TUblasSparseSpace; + using LocalSpaceType = TUblasDenseSpace; + using ComplexSpaceType = TUblasSparseSpace>; + using ComplexLocalSpaceType = TUblasDenseSpace>; + // using LinearSolverType = LinearSolver; + // using IterativeSolverType = IterativeSolver; + using CGSolverType = CGSolver; + using DeflatedCGSolverType = DeflatedCGSolver; + using BICGSTABSolverType = BICGSTABSolver; + using TFQMRSolverType = TFQMRSolver; + using SkylineLUFactorizationSolverType = SkylineLUFactorizationSolver; + using AMGCLSolverType = AMGCLSolver; + using AMGCL_NS_SolverType = AMGCL_NS_Solver; + using SkylineLUComplexSolverType = SkylineLUCustomScalarSolver; - typedef ScalingSolver ScalingSolverType; - typedef MonotonicityPreservingSolver MonotonicityPreservingSolverType; + using ScalingSolverType = ScalingSolver; + using FallbackLinearSolverType = FallbackLinearSolver; + using MonotonicityPreservingSolverType = MonotonicityPreservingSolver; //NOTE: here we must create persisting objects for the linear solvers static auto CGSolverFactory = StandardLinearSolverFactory(); @@ -61,6 +63,7 @@ namespace Kratos static auto AMGCLSolverFactory= StandardLinearSolverFactory(); static auto AMGCL_NS_SolverFactory= StandardLinearSolverFactory(); static auto ScalingSolverFactory= StandardLinearSolverFactory(); + static auto FallbackLinearSolverFactory = StandardLinearSolverFactory(); static auto MonotonicityPreservingSolverFactory= StandardLinearSolverFactory(); static auto SkylineLUComplexSolverFactory = StandardLinearSolverFactory(); @@ -74,6 +77,7 @@ namespace Kratos KRATOS_REGISTER_LINEAR_SOLVER("amgcl", AMGCLSolverFactory); KRATOS_REGISTER_LINEAR_SOLVER("amgcl_ns",AMGCL_NS_SolverFactory ); KRATOS_REGISTER_LINEAR_SOLVER("scaling",ScalingSolverFactory ); + KRATOS_REGISTER_LINEAR_SOLVER("fallback_linear_solver", FallbackLinearSolverFactory); KRATOS_REGISTER_LINEAR_SOLVER("monotonicity_preserving",MonotonicityPreservingSolverFactory ); KRATOS_REGISTER_COMPLEX_LINEAR_SOLVER("skyline_lu_complex", SkylineLUComplexSolverFactory); From e4d61353f0dbae3a5a57ad109a85dd979cb44015 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Wed, 24 Apr 2024 16:39:21 +0200 Subject: [PATCH 004/142] feat: Add test for FallbackLinearSolver --- .../test_fallback_linear_solver.cpp | 167 ++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp diff --git a/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp b/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp new file mode 100644 index 000000000000..833a0005e05b --- /dev/null +++ b/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp @@ -0,0 +1,167 @@ +// +// | / | +// ' / __| _` | __| _ \ __| +// . \ | ( | | ( |\__ ` +// _|\_\_| \__,_|\__|\___/ ____/ +// Multi-Physics +// +// License: BSD License +// Kratos default license: kratos/license.txt +// +// Main authors: Vicente Mataix Ferrandiz +// + +// System includes + +// External includes + +// Project includes +#include "testing/testing.h" +#include "spaces/ublas_space.h" +#include "linear_solvers/fallback_linear_solver.h" + +namespace Kratos::Testing +{ + +template > +class DummyLinearSolver + : public LinearSolver +{ +public: + ///@name Type Definitions + ///@{ + + using BaseType = LinearSolver; + using SparseMatrixType = typename BaseType::SparseMatrixType; + using VectorType = typename BaseType::VectorType; + + /// Pointer definition of DummyLinearSolver + KRATOS_CLASS_POINTER_DEFINITION(DummyLinearSolver); + + ///@} + ///@name Life Cycle + ///@{ + + /// Default constructor. + DummyLinearSolver() : BaseType() {} + + /// Destructor. + ~DummyLinearSolver() override = default; + + ///@} + ///@name Operators + ///@{ + + ///@} + ///@name Operations + ///@{ + + /// Override Solve method to always return false + bool Solve(SparseMatrixType& rA, VectorType& rX, VectorType& rB) override + { + return false; // Indicate that the solver didn't actually solve anything + } + + ///@} + +}; // Class DummyLinearSolver + +// Define the types of spaces +using SpaceType = UblasSpace, boost::numeric::ublas::vector>; +using LocalSpaceType = UblasSpace, DenseVector>; + +// Define the vector and matrix types +using SparseMatrixType = typename SpaceType::MatrixType; +using VectorType = typename SpaceType::VectorType; +using DenseMatrixType = typename LocalSpaceType::MatrixType; +using DenseVectorType = typename LocalSpaceType::VectorType; + +// Define the types of solvers +using LinearSolverType = LinearSolver; +using DummyLinearSolverType = DummyLinearSolver; +using FallbackLinearSolverType = FallbackLinearSolver; +using LinearSolverFactoryType = LinearSolverFactory; + +KRATOS_TEST_CASE_IN_SUITE(FallbackLinearSolverConstructorSolvers, AltairExtensionApplicationFastSuite) +{ + // Create the solvers + auto p_solver1 = Kratos::make_shared(); + Parameters amgcl_parameters = Parameters(R"({ + "solver_type": "amgcl" + })"); + auto p_solver2 = LinearSolverFactoryType().Create(amgcl_parameters); + + // Create the matrix and vectors + const std::size_t size = 3; + SparseMatrixType A(size, size); + // Push back 1.0 in the diagonal + for (std::size_t i = 0; i < size; ++i) { + A.push_back(i, i, 1.0); + } + VectorType b(size); + VectorType x(size); + + // Create a simple fallback solver + FallbackLinearSolverType simple_fallback_solver_1(p_solver1, p_solver2); + + // Solve the system + bool solved = simple_fallback_solver_1.Solve(A, x, b); + + // Check that the system was solved + KRATOS_EXPECT_TRUE(solved); + + // Check index is 1 (solve 0 failed) + KRATOS_EXPECT_EQ(simple_fallback_solver_1.GetCurrentSolverIndex(), 1); + + // Create a simple fallback solver + std::vector solvers = {p_solver1, p_solver2}; + FallbackLinearSolverType simple_fallback_solver_2(solvers); + + // Solve the system + solved = simple_fallback_solver_2.Solve(A, x, b); + + // Check that the system was solved + KRATOS_EXPECT_TRUE(solved); + + // Check index is 1 (solve 0 failed) + KRATOS_EXPECT_EQ(simple_fallback_solver_2.GetCurrentSolverIndex(), 1); +} + +KRATOS_TEST_CASE_IN_SUITE(FallbackLinearSolverConstructorParameters, AltairExtensionApplicationFastSuite) +{ + // Create the matrix and vectors + const std::size_t size = 3; + SparseMatrixType A(size, size); + // Push back 1.0 in the diagonal + for (std::size_t i = 0; i < size; ++i) { + A.push_back(i, i, 1.0); + } + VectorType b(size); + VectorType x(size); + + // Create a simple fallback solver + Parameters parameters = Parameters(R"({ + "solver_type": "fallback_linear_solver", + "solvers" : [ + { + "solver_type": "amgcl" + }, + { + "solver_type": "skyline_lu_factorization" + } + ], + "reset_solver_index_each_try": false + })"); + FallbackLinearSolverType simple_fallback_solver(parameters); + + // Solve the system + bool solved = simple_fallback_solver.Solve(A, x, b); + + // Check that the system was solved + KRATOS_EXPECT_TRUE(solved); + + // Check index is 0 (solve 0 succeeded) + KRATOS_EXPECT_EQ(simple_fallback_solver.GetCurrentSolverIndex(), 0); +} + +} // namespace Kratos::Testing \ No newline at end of file From a73302b2a30fd503f3c65df6ce3058b82299398a Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Wed, 24 Apr 2024 16:39:59 +0200 Subject: [PATCH 005/142] feat: Add FallbackLinearSolver to TrilinosApplication The commit adds the `FallbackLinearSolver` class to the `TrilinosApplication` in order to provide a fallback option for linear solvers. This allows for more robust and flexible solving capabilities. --- .../add_trilinos_linear_solvers_to_python.cpp | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp b/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp index 5720139844d1..5e5f4912371a 100644 --- a/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp +++ b/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp @@ -24,6 +24,7 @@ // Linear solvers #include "linear_solvers/linear_solver.h" +#include "linear_solvers/fallback_linear_solver.h" #include "custom_factories/trilinos_linear_solver_factory.h" //teuchos parameter list @@ -53,9 +54,9 @@ namespace Kratos::Python namespace py = pybind11; -typedef TrilinosSpace TrilinosSparseSpaceType; -typedef UblasSpace TrilinosLocalSpaceType; -typedef LinearSolver TrilinosLinearSolverType; +using TrilinosSparseSpaceType = TrilinosSpace; +using TrilinosLocalSpaceType = UblasSpace; +using TrilinosLinearSolverType = LinearSolver; void Solve(TrilinosLinearSolverType& solver, TrilinosSparseSpaceType::MatrixType& rA, @@ -69,7 +70,29 @@ void AddLinearSolvers(pybind11::module& m) { py::class_ (m,"TrilinosLinearSolver") .def(py::init<>()) - .def("Solve", Solve); + .def("Solve", Solve) + ; + + using TrilinosFallbackLinearSolverType = FallbackLinearSolver; + py::class_(m, "TrilinosFallbackLinearSolver") + .def(py::init()) + .def(py::init()) + .def(py::init&, Parameters>()) + .def("AddSolver", [](TrilinosFallbackLinearSolverType& rSelf, TrilinosLinearSolverType::Pointer pSolver) { + rSelf.AddSolver(pSolver); + }) + .def("AddSolver", [](TrilinosFallbackLinearSolverType& rSelf, TrilinosLinearSolverType::Pointer pSolver, const Parameters ThisParameters) { + rSelf.AddSolver(pSolver, ThisParameters); + }) + .def("GetSolvers", &TrilinosFallbackLinearSolverType::GetSolvers) + .def("SetSolvers", &TrilinosFallbackLinearSolverType::SetSolvers) + .def("GetResetSolverIndexEachTry", &TrilinosFallbackLinearSolverType::GetResetSolverIndexEachTry) + .def("SetResetSolverIndexEachTry", &TrilinosFallbackLinearSolverType::SetResetSolverIndexEachTry) + .def("GetParameters", &TrilinosFallbackLinearSolverType::GetParameters) + .def("SetParameters", &TrilinosFallbackLinearSolverType::SetParameters) + .def("GetCurrentSolverIndex", &TrilinosFallbackLinearSolverType::GetCurrentSolverIndex) + .def("SetCurrentSolverIndex", &TrilinosFallbackLinearSolverType::SetCurrentSolverIndex) + ; #ifndef TRILINOS_EXCLUDE_AZTEC_SOLVER typedef AztecSolver AztecSolverType; From 9d80f4200826babf33ef75d7147836bfa287a24e Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Wed, 24 Apr 2024 16:40:07 +0200 Subject: [PATCH 006/142] feat: Add FallbackLinearSolver to TrilinosApplication --- .../custom_factories/trilinos_linear_solver_factory.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/applications/TrilinosApplication/custom_factories/trilinos_linear_solver_factory.cpp b/applications/TrilinosApplication/custom_factories/trilinos_linear_solver_factory.cpp index 948c31ce7394..cb99bdf63e1d 100644 --- a/applications/TrilinosApplication/custom_factories/trilinos_linear_solver_factory.cpp +++ b/applications/TrilinosApplication/custom_factories/trilinos_linear_solver_factory.cpp @@ -15,6 +15,7 @@ // Linear solvers #include "trilinos_linear_solver_factory.h" +#include "linear_solvers/fallback_linear_solver.h" #ifndef TRILINOS_EXCLUDE_AZTEC_SOLVER #include "external_includes/aztec_solver.h" @@ -43,6 +44,10 @@ void RegisterTrilinosLinearSolvers() using TrilinosSparseSpaceType = TrilinosSpace; using TrilinosLocalSpaceType = UblasSpace; + using TrilinosFallbackLinearSolverType = FallbackLinearSolver; + const static auto TrilinosFallbackLinearSolverFactory = TrilinosLinearSolverFactory(); + KRATOS_REGISTER_TRILINOS_LINEAR_SOLVER("fallback_linear_solver", TrilinosFallbackLinearSolverFactory); + #ifndef TRILINOS_EXCLUDE_AZTEC_SOLVER using AztecSolverType = AztecSolver; From 8f268ef56679bae3b66c681f5bc125d783f0af3c Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Wed, 24 Apr 2024 16:40:13 +0200 Subject: [PATCH 007/142] feat: Add FallbackLinearSolver test for TrilinosApplication --- .../test_trilinos_fallback_linear_solver.cpp | 165 ++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 applications/TrilinosApplication/tests/cpp_tests/linear_solvers/test_trilinos_fallback_linear_solver.cpp diff --git a/applications/TrilinosApplication/tests/cpp_tests/linear_solvers/test_trilinos_fallback_linear_solver.cpp b/applications/TrilinosApplication/tests/cpp_tests/linear_solvers/test_trilinos_fallback_linear_solver.cpp new file mode 100644 index 000000000000..eed744c41183 --- /dev/null +++ b/applications/TrilinosApplication/tests/cpp_tests/linear_solvers/test_trilinos_fallback_linear_solver.cpp @@ -0,0 +1,165 @@ +// KRATOS _____ _ _ _ +// |_ _| __(_) (_)_ __ ___ ___ +// | || '__| | | | '_ \ / _ \/ __| +// | || | | | | | | | | (_) \__ +// |_||_| |_|_|_|_| |_|\___/|___/ APPLICATION +// +// License: BSD License +// Kratos default license: kratos/license.txt +// +// Main authors: Vicente Mataix Ferrandiz +// + +// System includes + +// External includes + +// Project includes +#include "testing/testing.h" +#include "trilinos_space.h" +#include "tests/cpp_tests/trilinos_cpp_test_utilities.h" +#include "linear_solvers/fallback_linear_solver.h" + +namespace Kratos::Testing +{ + +template > +class DummyLinearSolver + : public LinearSolver +{ +public: + ///@name Type Definitions + ///@{ + + using BaseType = LinearSolver; + using SparseMatrixType = typename BaseType::SparseMatrixType; + using VectorType = typename BaseType::VectorType; + + /// Pointer definition of DummyLinearSolver + KRATOS_CLASS_POINTER_DEFINITION(DummyLinearSolver); + + ///@} + ///@name Life Cycle + ///@{ + + /// Default constructor. + DummyLinearSolver() : BaseType() {} + + /// Destructor. + ~DummyLinearSolver() override = default; + + ///@} + ///@name Operators + ///@{ + + ///@} + ///@name Operations + ///@{ + + /// Override Solve method to always return false + bool Solve(SparseMatrixType& rA, VectorType& rX, VectorType& rB) override + { + return false; // Indicate that the solver didn't actually solve anything + } + + ///@} + +}; // Class DummyLinearSolver + +// Define the types of spaces +using TrilinosSparseSpaceType = TrilinosSpace; +using TrilinosLocalSpaceType = UblasSpace; + +// Define the vector and matrix types +using SparseMatrixType = typename TrilinosSparseSpaceType::MatrixType; +using VectorType = typename TrilinosSparseSpaceType::VectorType; +using DenseMatrixType = typename TrilinosLocalSpaceType::MatrixType; +using DenseVectorType = typename TrilinosLocalSpaceType::VectorType; + +// Define the types of solvers +using TrilinosLinearSolverType = LinearSolver; +using TrilinosDummyLinearSolverType = DummyLinearSolver; +using TrilinosFallbackLinearSolverType = FallbackLinearSolver; +using TrilinosLinearSolverFactoryType = LinearSolverFactory; + +KRATOS_DISTRIBUTED_TEST_CASE_IN_SUITE(TrilinosFallbackLinearSolverConstructorSolvers, ParallelComputingApplicationFastSuite) +{ + // Create the solvers + auto p_solver1 = Kratos::make_shared(); + Parameters amgcl_parameters = Parameters(R"({ + "solver_type": "amgcl" + })"); + auto p_solver2 = TrilinosLinearSolverFactoryType().Create(amgcl_parameters); + + // The data communicator + const auto& r_comm = Testing::GetDefaultDataCommunicator(); + + // Create the matrix and vectors + const int size = 2 * r_comm.Size(); + auto A = TrilinosCPPTestUtilities::GenerateDummySparseMatrix(r_comm, size, 1.0); + auto b = TrilinosCPPTestUtilities::GenerateDummySparseVector(r_comm, size); + auto x = TrilinosCPPTestUtilities::GenerateDummySparseVector(r_comm, size); + + // Create a simple fallback solver + TrilinosFallbackLinearSolverType simple_fallback_solver_1(p_solver1, p_solver2); + + // Solve the system + bool solved = simple_fallback_solver_1.Solve(A, x, b); + + // Check that the system was solved + KRATOS_EXPECT_TRUE(solved); + + // Check index is 1 (solve 0 failed) + KRATOS_EXPECT_EQ(simple_fallback_solver_1.GetCurrentSolverIndex(), 1); + + // Create a simple fallback solver + std::vector solvers = {p_solver1, p_solver2}; + TrilinosFallbackLinearSolverType simple_fallback_solver_2(solvers); + + // Solve the system + solved = simple_fallback_solver_2.Solve(A, x, b); + + // Check that the system was solved + KRATOS_EXPECT_TRUE(solved); + + // Check index is 1 (solve 0 failed) + KRATOS_EXPECT_EQ(simple_fallback_solver_2.GetCurrentSolverIndex(), 1); +} + +KRATOS_DISTRIBUTED_TEST_CASE_IN_SUITE(TrilinosFallbackLinearSolverConstructorParameters, ParallelComputingApplicationFastSuite) +{ + // The data communicator + const auto& r_comm = Testing::GetDefaultDataCommunicator(); + + // Create the matrix and vectors + const int size = 2 * r_comm.Size(); + auto A = TrilinosCPPTestUtilities::GenerateDummySparseMatrix(r_comm, size, 1.0); + auto b = TrilinosCPPTestUtilities::GenerateDummySparseVector(r_comm, size); + auto x = TrilinosCPPTestUtilities::GenerateDummySparseVector(r_comm, size); + + // Create a simple fallback solver + Parameters parameters = Parameters(R"({ + "solver_type": "fallback_linear_solver", + "solvers" : [ + { + "solver_type": "amgcl" + }, + { + "solver_type": "amgcl" + } + ], + "reset_solver_index_each_try": false + })"); + TrilinosFallbackLinearSolverType simple_fallback_solver(parameters); + + // Solve the system + bool solved = simple_fallback_solver.Solve(A, x, b); + + // Check that the system was solved + KRATOS_EXPECT_TRUE(solved); + + // Check index is 0 (solve 0 succeeded) + KRATOS_EXPECT_EQ(simple_fallback_solver.GetCurrentSolverIndex(), 0); +} + +} // namespace Kratos::Testing \ No newline at end of file From 483f09e64590eacf523a21e3eb58513e6f5b59bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Mon, 29 Apr 2024 09:12:45 +0200 Subject: [PATCH 008/142] Explicit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Máté Kelemen <44344022+matekelemen@users.noreply.github.com> --- kratos/linear_solvers/fallback_linear_solver.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index 52f1b8acec88..daf31f19ba9a 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -108,7 +108,7 @@ class FallbackLinearSolver * @brief This is the default constructor * @param ThisParameters The configuration parameters */ - FallbackLinearSolver(Parameters ThisParameters = Parameters(R"({})")) + explicit FallbackLinearSolver(Parameters ThisParameters = Parameters(R"({})")) : mParameters(ThisParameters) { // Set the default parameters From a925df1a5186e5aeb4d29378f16cb6bf3a5c1448 Mon Sep 17 00:00:00 2001 From: WPK4FEM <129858139+WPK4FEM@users.noreply.github.com> Date: Thu, 25 Apr 2024 09:17:05 +0200 Subject: [PATCH 009/142] [GeoMechanicsApplication] Incremental displacement variable, output and integration test. (#12288) * Incremental displacement variable, output and integration test. * Output enabled fhrough the C++ route too. --- .../geo_mechanics_python_application.cpp | 1 + .../custom_workflows/dgeosettlement.cpp | 1 + .../custom_workflows/geo_output_writer.cpp | 1 + .../solving_strategy_wrapper.hpp | 13 +- .../custom_workflows/strategy_wrapper.hpp | 1 + .../custom_workflows/time_loop_executor.hpp | 1 + .../geo_mechanics_application.cpp | 1 + .../geo_mechanics_application_variables.cpp | 1 + .../geo_mechanics_application_variables.h | 1 + .../python_scripts/geomechanics_analysis.py | 14 +- .../python_scripts/geomechanics_solver.py | 1 + .../cpp_tests/test_settlement_workflow.cpp | 2 +- .../test_solving_strategy_wrapper.cpp | 96 +- .../cpp_tests/test_time_loop_executor.cpp | 5 + .../tests/cpp_tests/test_time_stepping.cpp | 3 + .../dirichlet_u/ProjectParameters_stage1.json | 2 +- .../dirichlet_u/ProjectParameters_stage2.json | 2 +- .../tests/dirichlet_u/README.md | 6 +- .../tests/test_dirichlet_u.py | 7 + .../ProjectParameters_stage1.json | 2 +- .../ProjectParameters_stage2.json | 2 +- .../ProjectParameters_stage3.json | 2 +- .../ProjectParameters_stage4.json | 2 +- .../test_model_stage1.post.orig.res | 2082 ++++++ .../test_model_stage2.post.orig.res | 2082 ++++++ .../test_model_stage3.post.orig.res | 2082 ++++++ .../test_model_stage4.post.orig.res | 6246 +++++++++++++++++ 27 files changed, 12602 insertions(+), 57 deletions(-) diff --git a/applications/GeoMechanicsApplication/custom_python/geo_mechanics_python_application.cpp b/applications/GeoMechanicsApplication/custom_python/geo_mechanics_python_application.cpp index 26b2a0a32ae3..8f359d9eb1f8 100644 --- a/applications/GeoMechanicsApplication/custom_python/geo_mechanics_python_application.cpp +++ b/applications/GeoMechanicsApplication/custom_python/geo_mechanics_python_application.cpp @@ -84,6 +84,7 @@ PYBIND11_MODULE(KratosGeoMechanicsApplication,m) KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, ABSORBING_FACTORS) KRATOS_REGISTER_IN_PYTHON_3D_VARIABLE_WITH_COMPONENTS( m, TOTAL_DISPLACEMENT) + KRATOS_REGISTER_IN_PYTHON_3D_VARIABLE_WITH_COMPONENTS( m, INCREMENTAL_DISPLACEMENT) KRATOS_REGISTER_IN_PYTHON_VARIABLE( m, IS_CONVERGED ) diff --git a/applications/GeoMechanicsApplication/custom_workflows/dgeosettlement.cpp b/applications/GeoMechanicsApplication/custom_workflows/dgeosettlement.cpp index 368b60d1a545..6479d94f24f6 100644 --- a/applications/GeoMechanicsApplication/custom_workflows/dgeosettlement.cpp +++ b/applications/GeoMechanicsApplication/custom_workflows/dgeosettlement.cpp @@ -249,6 +249,7 @@ void KratosGeoSettlement::AddNodalSolutionStepVariablesTo(ModelPart& rModelPart) // Displacement rModelPart.AddNodalSolutionStepVariable(DISPLACEMENT); + rModelPart.AddNodalSolutionStepVariable(INCREMENTAL_DISPLACEMENT); rModelPart.AddNodalSolutionStepVariable(TOTAL_DISPLACEMENT); rModelPart.AddNodalSolutionStepVariable(REACTION); rModelPart.AddNodalSolutionStepVariable(POINT_LOAD); diff --git a/applications/GeoMechanicsApplication/custom_workflows/geo_output_writer.cpp b/applications/GeoMechanicsApplication/custom_workflows/geo_output_writer.cpp index 3fdefaf07902..cacf7dce49d1 100644 --- a/applications/GeoMechanicsApplication/custom_workflows/geo_output_writer.cpp +++ b/applications/GeoMechanicsApplication/custom_workflows/geo_output_writer.cpp @@ -113,6 +113,7 @@ void GeoOutputWriter::WriteNodalOutput(const std::vector& rOutputIt const auto output_writer_map = std::map>{ {"DISPLACEMENT", MakeNodalResultWriterFor(DISPLACEMENT)}, {"TOTAL_DISPLACEMENT", MakeNodalResultWriterFor(TOTAL_DISPLACEMENT)}, + {"INCREMENTAL_DISPLACEMENT", MakeNodalResultWriterFor(INCREMENTAL_DISPLACEMENT)}, {"WATER_PRESSURE", MakeNodalResultWriterFor(WATER_PRESSURE)}, {"NORMAL_FLUID_FLUX", MakeNodalResultWriterFor(NORMAL_FLUID_FLUX)}, {"VOLUME_ACCELERATION", MakeNodalResultWriterFor(VOLUME_ACCELERATION)}, diff --git a/applications/GeoMechanicsApplication/custom_workflows/solving_strategy_wrapper.hpp b/applications/GeoMechanicsApplication/custom_workflows/solving_strategy_wrapper.hpp index a0213d6d3208..4bcd7d435ad5 100644 --- a/applications/GeoMechanicsApplication/custom_workflows/solving_strategy_wrapper.hpp +++ b/applications/GeoMechanicsApplication/custom_workflows/solving_strategy_wrapper.hpp @@ -120,6 +120,14 @@ class SolvingStrategyWrapper : public StrategyWrapper } } + void ComputeIncrementalDisplacementField() override + { + for (auto& node : mrModelPart.Nodes()) { + node.GetSolutionStepValue(INCREMENTAL_DISPLACEMENT) = + node.GetSolutionStepValue(DISPLACEMENT, 0) - node.GetSolutionStepValue(DISPLACEMENT, 1); + } + } + void OutputProcess() override { if (mWriter) { @@ -134,16 +142,13 @@ class SolvingStrategyWrapper : public StrategyWrapper { return mpStrategy->SolveSolutionStep() ? TimeStepEndState::ConvergenceState::converged : TimeStepEndState::ConvergenceState::non_converged; - ; } void FinalizeSolutionStep() override { return mpStrategy->FinalizeSolutionStep(); } void FinalizeOutput() override { - if (mWriter) { - mWriter->FinalizeResults(); - } + if (mWriter) mWriter->FinalizeResults(); } private: diff --git a/applications/GeoMechanicsApplication/custom_workflows/strategy_wrapper.hpp b/applications/GeoMechanicsApplication/custom_workflows/strategy_wrapper.hpp index 3ae41f57f009..478db62c40f6 100644 --- a/applications/GeoMechanicsApplication/custom_workflows/strategy_wrapper.hpp +++ b/applications/GeoMechanicsApplication/custom_workflows/strategy_wrapper.hpp @@ -35,6 +35,7 @@ class StrategyWrapper virtual void RestorePositionsAndDOFVectorToStartOfStep() = 0; virtual void SaveTotalDisplacementFieldAtStartOfTimeLoop() = 0; virtual void AccumulateTotalDisplacementField() = 0; + virtual void ComputeIncrementalDisplacementField() = 0; virtual void OutputProcess() = 0; virtual void Initialize() = 0; diff --git a/applications/GeoMechanicsApplication/custom_workflows/time_loop_executor.hpp b/applications/GeoMechanicsApplication/custom_workflows/time_loop_executor.hpp index b9c0586f6657..0b1000084d0c 100644 --- a/applications/GeoMechanicsApplication/custom_workflows/time_loop_executor.hpp +++ b/applications/GeoMechanicsApplication/custom_workflows/time_loop_executor.hpp @@ -71,6 +71,7 @@ class TimeLoopExecutor : public TimeLoopExecutorInterface mStrategyWrapper->CloneTimeStep(); NewEndState = RunCycleLoop(NewEndState); mStrategyWrapper->AccumulateTotalDisplacementField(); + mStrategyWrapper->ComputeIncrementalDisplacementField(); mStrategyWrapper->FinalizeSolutionStep(); mStrategyWrapper->OutputProcess(); result.emplace_back(NewEndState); diff --git a/applications/GeoMechanicsApplication/geo_mechanics_application.cpp b/applications/GeoMechanicsApplication/geo_mechanics_application.cpp index 5b3f8056c4af..5f802320a3a3 100644 --- a/applications/GeoMechanicsApplication/geo_mechanics_application.cpp +++ b/applications/GeoMechanicsApplication/geo_mechanics_application.cpp @@ -404,6 +404,7 @@ void KratosGeoMechanicsApplication::Register() { KRATOS_REGISTER_VARIABLE( CRITICAL_DISPLACEMENT ) KRATOS_REGISTER_3D_VARIABLE_WITH_COMPONENTS( TOTAL_DISPLACEMENT ) + KRATOS_REGISTER_3D_VARIABLE_WITH_COMPONENTS( INCREMENTAL_DISPLACEMENT ) KRATOS_REGISTER_VARIABLE( IS_CONVERGED ) diff --git a/applications/GeoMechanicsApplication/geo_mechanics_application_variables.cpp b/applications/GeoMechanicsApplication/geo_mechanics_application_variables.cpp index 41223c42ab58..402e94099616 100644 --- a/applications/GeoMechanicsApplication/geo_mechanics_application_variables.cpp +++ b/applications/GeoMechanicsApplication/geo_mechanics_application_variables.cpp @@ -80,6 +80,7 @@ KRATOS_CREATE_VARIABLE( Matrix, LOCAL_PERMEABILITY_MATRIX ) KRATOS_CREATE_VARIABLE( double, CRITICAL_DISPLACEMENT ) KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(TOTAL_DISPLACEMENT) +KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(INCREMENTAL_DISPLACEMENT) KRATOS_CREATE_VARIABLE( bool, IS_CONVERGED) diff --git a/applications/GeoMechanicsApplication/geo_mechanics_application_variables.h b/applications/GeoMechanicsApplication/geo_mechanics_application_variables.h index 4cd979a99832..24249ab2d1b9 100644 --- a/applications/GeoMechanicsApplication/geo_mechanics_application_variables.h +++ b/applications/GeoMechanicsApplication/geo_mechanics_application_variables.h @@ -91,6 +91,7 @@ namespace Kratos KRATOS_DEFINE_APPLICATION_VARIABLE( GEO_MECHANICS_APPLICATION, double, CRITICAL_DISPLACEMENT ) KRATOS_DEFINE_3D_APPLICATION_VARIABLE_WITH_COMPONENTS( GEO_MECHANICS_APPLICATION, TOTAL_DISPLACEMENT ) + KRATOS_DEFINE_3D_APPLICATION_VARIABLE_WITH_COMPONENTS( GEO_MECHANICS_APPLICATION, INCREMENTAL_DISPLACEMENT ) KRATOS_DEFINE_APPLICATION_VARIABLE(GEO_MECHANICS_APPLICATION, bool, IS_CONVERGED) diff --git a/applications/GeoMechanicsApplication/python_scripts/geomechanics_analysis.py b/applications/GeoMechanicsApplication/python_scripts/geomechanics_analysis.py index ede27395070b..1047f9f87e22 100644 --- a/applications/GeoMechanicsApplication/python_scripts/geomechanics_analysis.py +++ b/applications/GeoMechanicsApplication/python_scripts/geomechanics_analysis.py @@ -51,15 +51,16 @@ def _GetSimulationName(self): return "GeoMechanics Analysis" def _CalculateTotalDisplacement(self,node, old_total_displacement): - """ - Calculates total displacement - :param node: - :return: - """ stage_displacement = node.GetSolutionStepValue(KratosMultiphysics.DISPLACEMENT) total_displacement = old_total_displacement + stage_displacement node.SetSolutionStepValue(KratosGeo.TOTAL_DISPLACEMENT, total_displacement) + def _CalculateIncrementalDisplacement(self, node): + incremental_displacement = (node.GetSolutionStepValue(KratosMultiphysics.DISPLACEMENT, 0) - + node.GetSolutionStepValue(KratosMultiphysics.DISPLACEMENT, 1)) + node.SetSolutionStepValue(KratosGeo.INCREMENTAL_DISPLACEMENT, incremental_displacement) + + def ResetIfHasNodalSolutionStepVariable(self, variable): if self._GetSolver().main_model_part.HasNodalSolutionStepVariable(variable): KratosMultiphysics.VariableUtils().SetHistoricalVariableToZero(variable, self._GetSolver().GetComputingModelPart().Nodes) @@ -214,6 +215,9 @@ def RunSolutionLoop(self): for idx, node in enumerate(self._GetSolver().GetComputingModelPart().Nodes): self._CalculateTotalDisplacement(node, old_total_displacements[idx]) + for node in self._GetSolver().GetComputingModelPart().Nodes: + self._CalculateIncrementalDisplacement(node) + self.FinalizeSolutionStep() self.OutputSolutionStep() diff --git a/applications/GeoMechanicsApplication/python_scripts/geomechanics_solver.py b/applications/GeoMechanicsApplication/python_scripts/geomechanics_solver.py index af2f0e5c1509..25ba0ee78729 100644 --- a/applications/GeoMechanicsApplication/python_scripts/geomechanics_solver.py +++ b/applications/GeoMechanicsApplication/python_scripts/geomechanics_solver.py @@ -326,6 +326,7 @@ def _add_dynamic_variables(self): def _add_displacement_variables(self): self.main_model_part.AddNodalSolutionStepVariable(KratosMultiphysics.DISPLACEMENT) self.main_model_part.AddNodalSolutionStepVariable(GeoMechanicsApplication.TOTAL_DISPLACEMENT) + self.main_model_part.AddNodalSolutionStepVariable(GeoMechanicsApplication.INCREMENTAL_DISPLACEMENT) self.main_model_part.AddNodalSolutionStepVariable(KratosMultiphysics.REACTION) self.main_model_part.AddNodalSolutionStepVariable(StructuralMechanicsApplication.POINT_LOAD) self.main_model_part.AddNodalSolutionStepVariable(StructuralMechanicsApplication.LINE_LOAD) diff --git a/applications/GeoMechanicsApplication/tests/cpp_tests/test_settlement_workflow.cpp b/applications/GeoMechanicsApplication/tests/cpp_tests/test_settlement_workflow.cpp index 89b8ff063db2..b788509b61ab 100644 --- a/applications/GeoMechanicsApplication/tests/cpp_tests/test_settlement_workflow.cpp +++ b/applications/GeoMechanicsApplication/tests/cpp_tests/test_settlement_workflow.cpp @@ -26,7 +26,7 @@ using namespace Kratos; namespace Kratos::Testing { -// KRATOS_TEST_CASE_IN_SUITE(SettlementWorkflow, KratosGeoMechanicsFastSuite) +//KRATOS_TEST_CASE_IN_SUITE(SettlementWorkflow, KratosGeoMechanicsFastSuite) [[maybe_unused]] void TestSettlement() { const auto working_directory = std::filesystem::path{ diff --git a/applications/GeoMechanicsApplication/tests/cpp_tests/test_solving_strategy_wrapper.cpp b/applications/GeoMechanicsApplication/tests/cpp_tests/test_solving_strategy_wrapper.cpp index 66ab8f5b8614..a31be86108b2 100644 --- a/applications/GeoMechanicsApplication/tests/cpp_tests/test_solving_strategy_wrapper.cpp +++ b/applications/GeoMechanicsApplication/tests/cpp_tests/test_solving_strategy_wrapper.cpp @@ -129,8 +129,8 @@ SolvingStrategyWrapperType CreateWrapperWithEmptyProcessInfo(ModelPart& rModelPa KRATOS_TEST_CASE_IN_SUITE(GetNumberOfIterationsFromStrategyWrapper_ReturnsCorrectNumber, KratosGeoMechanicsFastSuite) { Model model; - auto& model_part = CreateDummyModelPart(model); - auto wrapper = CreateWrapperWithDefaultProcessInfoEntries(model_part); + auto& r_model_part = CreateDummyModelPart(model); + auto wrapper = CreateWrapperWithDefaultProcessInfoEntries(r_model_part); KRATOS_EXPECT_EQ(wrapper.GetNumberOfIterations(), 5); } @@ -138,8 +138,8 @@ KRATOS_TEST_CASE_IN_SUITE(GetNumberOfIterationsFromStrategyWrapper_ReturnsCorrec KRATOS_TEST_CASE_IN_SUITE(GetEndTimeFromStrategyWrapper_ReturnsCorrectNumber, KratosGeoMechanicsFastSuite) { Model model; - auto& model_part = CreateDummyModelPart(model); - auto wrapper = CreateWrapperWithDefaultProcessInfoEntries(model_part); + auto& r_model_part = CreateDummyModelPart(model); + auto wrapper = CreateWrapperWithDefaultProcessInfoEntries(r_model_part); KRATOS_EXPECT_DOUBLE_EQ(wrapper.GetEndTime(), 17.0); } @@ -147,8 +147,8 @@ KRATOS_TEST_CASE_IN_SUITE(GetEndTimeFromStrategyWrapper_ReturnsCorrectNumber, Kr KRATOS_TEST_CASE_IN_SUITE(SolveSolutionStepFromStrategyWrapper_ReturnsCorrectState, KratosGeoMechanicsFastSuite) { Model model; - auto& model_part = CreateDummyModelPart(model); - auto wrapper = CreateWrapperWithDefaultProcessInfoEntries(model_part); + auto& r_model_part = CreateDummyModelPart(model); + auto wrapper = CreateWrapperWithDefaultProcessInfoEntries(r_model_part); KRATOS_EXPECT_EQ(wrapper.SolveSolutionStep(), TimeStepEndState::ConvergenceState::converged); } @@ -156,20 +156,20 @@ KRATOS_TEST_CASE_IN_SUITE(SolveSolutionStepFromStrategyWrapper_ReturnsCorrectSta KRATOS_TEST_CASE_IN_SUITE(SetEndTimeFromStrategyWrapper, KratosGeoMechanicsFastSuite) { Model model; - auto& model_part = CreateDummyModelPart(model); - auto wrapper = CreateWrapperWithEmptyProcessInfo(model_part); - const auto end_time = 0.4; + auto& r_model_part = CreateDummyModelPart(model); + auto wrapper = CreateWrapperWithEmptyProcessInfo(r_model_part); + const auto end_time = 0.4; wrapper.SetEndTime(end_time); - KRATOS_EXPECT_DOUBLE_EQ(model_part.GetProcessInfo()[TIME], end_time); + KRATOS_EXPECT_DOUBLE_EQ(r_model_part.GetProcessInfo()[TIME], end_time); } KRATOS_TEST_CASE_IN_SUITE(GetTimeIncrementFromStrategyWrapper_ReturnsCorrectNumber, KratosGeoMechanicsFastSuite) { Model model; - auto& model_part = CreateDummyModelPart(model); - auto wrapper = CreateWrapperWithDefaultProcessInfoEntries(model_part); + auto& r_model_part = CreateDummyModelPart(model); + auto wrapper = CreateWrapperWithDefaultProcessInfoEntries(r_model_part); KRATOS_EXPECT_DOUBLE_EQ(wrapper.GetTimeIncrement(), 3.4); } @@ -177,20 +177,20 @@ KRATOS_TEST_CASE_IN_SUITE(GetTimeIncrementFromStrategyWrapper_ReturnsCorrectNumb KRATOS_TEST_CASE_IN_SUITE(SetTimeIncrementFromStrategyWrapper, KratosGeoMechanicsFastSuite) { Model model; - auto& model_part = CreateDummyModelPart(model); - auto wrapper = CreateWrapperWithEmptyProcessInfo(model_part); + auto& r_model_part = CreateDummyModelPart(model); + auto wrapper = CreateWrapperWithEmptyProcessInfo(r_model_part); const auto time_increment = 0.8; wrapper.SetTimeIncrement(time_increment); - KRATOS_EXPECT_EQ(model_part.GetProcessInfo()[DELTA_TIME], time_increment); + KRATOS_EXPECT_EQ(r_model_part.GetProcessInfo()[DELTA_TIME], time_increment); } KRATOS_TEST_CASE_IN_SUITE(GetStepNumberFromStrategyWrapper_ReturnsCorrectNumber, KratosGeoMechanicsFastSuite) { Model model; - auto& model_part = CreateDummyModelPart(model); - auto wrapper = CreateWrapperWithDefaultProcessInfoEntries(model_part); + auto& r_model_part = CreateDummyModelPart(model); + auto wrapper = CreateWrapperWithDefaultProcessInfoEntries(r_model_part); KRATOS_EXPECT_EQ(wrapper.GetStepNumber(), 3); } @@ -198,8 +198,8 @@ KRATOS_TEST_CASE_IN_SUITE(GetStepNumberFromStrategyWrapper_ReturnsCorrectNumber, KRATOS_TEST_CASE_IN_SUITE(IncrementStepNumberFromStrategyWrapper, KratosGeoMechanicsFastSuite) { Model model; - auto& model_part = CreateDummyModelPart(model); - auto wrapper = CreateWrapperWithDefaultProcessInfoEntries(model_part); + auto& r_model_part = CreateDummyModelPart(model); + auto wrapper = CreateWrapperWithDefaultProcessInfoEntries(r_model_part); wrapper.IncrementStepNumber(); KRATOS_EXPECT_EQ(wrapper.GetStepNumber(), 4); @@ -210,12 +210,12 @@ KRATOS_TEST_CASE_IN_SUITE(IncrementStepNumberFromStrategyWrapper, KratosGeoMecha KRATOS_TEST_CASE_IN_SUITE(SaveAndAccumulateTotalDisplacementField, KratosGeoMechanicsFastSuite) { Model model; - auto& model_part = CreateDummyModelPart(model); - auto strategy_wrapper = CreateWrapperWithEmptyProcessInfo(model_part); - model_part.AddNodalSolutionStepVariable(DISPLACEMENT); - model_part.AddNodalSolutionStepVariable(TOTAL_DISPLACEMENT); + auto& r_model_part = CreateDummyModelPart(model); + auto strategy_wrapper = CreateWrapperWithEmptyProcessInfo(r_model_part); + r_model_part.AddNodalSolutionStepVariable(DISPLACEMENT); + r_model_part.AddNodalSolutionStepVariable(TOTAL_DISPLACEMENT); - auto p_node = model_part.CreateNewNode(1, 0.0, 0.0, 0.0); + auto p_node = r_model_part.CreateNewNode(1, 0.0, 0.0, 0.0); const auto original_total_displacement = array_1d{1.0, 2.0, 3.0}; p_node->GetSolutionStepValue(TOTAL_DISPLACEMENT) = original_total_displacement; @@ -232,15 +232,35 @@ KRATOS_TEST_CASE_IN_SUITE(SaveAndAccumulateTotalDisplacementField, KratosGeoMech KRATOS_EXPECT_EQ(p_node->GetSolutionStepValue(TOTAL_DISPLACEMENT), expected_total_displacement); } +KRATOS_TEST_CASE_IN_SUITE(ComputeIncrementalDisplacementField, KratosGeoMechanicsFastSuite) +{ + Model model; + auto& r_model_part = CreateDummyModelPart(model); + auto strategy_wrapper = CreateWrapperWithEmptyProcessInfo(r_model_part); + r_model_part.AddNodalSolutionStepVariable(DISPLACEMENT); + r_model_part.AddNodalSolutionStepVariable(INCREMENTAL_DISPLACEMENT); + + auto p_node = r_model_part.CreateNewNode(1, 0.0, 0.0, 0.0); + + const auto displacement_start_time_step = array_1d{3.0, 2.0, 1.0}; + const auto displacement_end_time_step = array_1d{6.0, 4.0, 2.0}; + p_node->GetSolutionStepValue(DISPLACEMENT, 1) = displacement_start_time_step; + p_node->GetSolutionStepValue(DISPLACEMENT, 0) = displacement_end_time_step; + strategy_wrapper.ComputeIncrementalDisplacementField(); + + const auto expected_incremental_displacement = array_1d{ displacement_end_time_step - displacement_start_time_step}; + KRATOS_EXPECT_EQ(p_node->GetSolutionStepValue(INCREMENTAL_DISPLACEMENT), expected_incremental_displacement); +} + KRATOS_TEST_CASE_IN_SUITE(RestorePositionsAndDOFVectorToStartOfStep_UpdatesPosition, KratosGeoMechanicsFastSuite) { Model model; - auto& model_part = CreateDummyModelPart(model); - auto strategy_wrapper = CreateWrapperWithEmptyProcessInfo(model_part); - model_part.AddNodalSolutionStepVariable(DISPLACEMENT); + auto& r_model_part = CreateDummyModelPart(model); + auto strategy_wrapper = CreateWrapperWithEmptyProcessInfo(r_model_part); + r_model_part.AddNodalSolutionStepVariable(DISPLACEMENT); const auto initial_position = array_1d{1.0, 2.0, 3.0}; - auto p_node = model_part.CreateNewNode(1, initial_position[0], initial_position[1], initial_position[2]); + auto p_node = r_model_part.CreateNewNode(1, initial_position[0], initial_position[1], initial_position[2]); const auto displacement_in_time_step = array_1d{3.0, 2.0, 1.0}; p_node->GetSolutionStepValue(DISPLACEMENT, 1) = displacement_in_time_step; @@ -254,13 +274,13 @@ KRATOS_TEST_CASE_IN_SUITE(RestorePositionsAndDOFVectorToStartOfStep_UpdatesPosit KRATOS_TEST_CASE_IN_SUITE(RestoreNodalDisplacementsAndWaterPressuresOnRequest, KratosGeoMechanicsFastSuite) { Model model; - auto& model_part = CreateDummyModelPart(model); - auto strategy_wrapper = CreateWrapperWithEmptyProcessInfo(model_part); - model_part.AddNodalSolutionStepVariable(DISPLACEMENT); - model_part.AddNodalSolutionStepVariable(WATER_PRESSURE); + auto& r_model_part = CreateDummyModelPart(model); + auto strategy_wrapper = CreateWrapperWithEmptyProcessInfo(r_model_part); + r_model_part.AddNodalSolutionStepVariable(DISPLACEMENT); + r_model_part.AddNodalSolutionStepVariable(WATER_PRESSURE); // Define the old Degrees of Freedom - auto p_node = model_part.CreateNewNode(1, 0.0, 0.0, 0.0); + auto p_node = r_model_part.CreateNewNode(1, 0.0, 0.0, 0.0); const auto old_displacement = array_1d{1.0, 2.0, 3.0}; p_node->GetSolutionStepValue(DISPLACEMENT, 1) = old_displacement; const auto old_water_pressure = 4.0; @@ -281,13 +301,13 @@ KRATOS_TEST_CASE_IN_SUITE(RestoreNodalDisplacementsAndWaterPressuresOnRequest, K KRATOS_TEST_CASE_IN_SUITE(RestoreNodalDisplacementsAndRotationsOnRequest, KratosGeoMechanicsFastSuite) { Model model; - auto& model_part = CreateDummyModelPart(model); - auto strategy_wrapper = CreateWrapperWithEmptyProcessInfo(model_part); - model_part.AddNodalSolutionStepVariable(DISPLACEMENT); - model_part.AddNodalSolutionStepVariable(ROTATION); + auto& r_model_part = CreateDummyModelPart(model); + auto strategy_wrapper = CreateWrapperWithEmptyProcessInfo(r_model_part); + r_model_part.AddNodalSolutionStepVariable(DISPLACEMENT); + r_model_part.AddNodalSolutionStepVariable(ROTATION); // Define the old Degrees of Freedom - auto p_node = model_part.CreateNewNode(1, 0.0, 0.0, 0.0); + auto p_node = r_model_part.CreateNewNode(1, 0.0, 0.0, 0.0); const auto old_displacement = array_1d{1.0, 2.0, 3.0}; p_node->GetSolutionStepValue(DISPLACEMENT, 1) = old_displacement; const auto old_rotation = array_1d{5.0, 6.0, 7.0}; diff --git a/applications/GeoMechanicsApplication/tests/cpp_tests/test_time_loop_executor.cpp b/applications/GeoMechanicsApplication/tests/cpp_tests/test_time_loop_executor.cpp index d883c2868086..9a8a49a43aa4 100644 --- a/applications/GeoMechanicsApplication/tests/cpp_tests/test_time_loop_executor.cpp +++ b/applications/GeoMechanicsApplication/tests/cpp_tests/test_time_loop_executor.cpp @@ -101,6 +101,11 @@ class DummySolverStrategy : public StrategyWrapper return mCountAccumulateTotalDisplacementFieldCalled; } + void ComputeIncrementalDisplacementField() override + { + // intentionally empty + } + void OutputProcess() override { ++mCountOutputProcessCalled; diff --git a/applications/GeoMechanicsApplication/tests/cpp_tests/test_time_stepping.cpp b/applications/GeoMechanicsApplication/tests/cpp_tests/test_time_stepping.cpp index 23a85dd3bbed..461b9f439bad 100644 --- a/applications/GeoMechanicsApplication/tests/cpp_tests/test_time_stepping.cpp +++ b/applications/GeoMechanicsApplication/tests/cpp_tests/test_time_stepping.cpp @@ -85,6 +85,9 @@ class DummyStrategyWrapper : public StrategyWrapper void AccumulateTotalDisplacementField() override{ // intentionally empty }; + void ComputeIncrementalDisplacementField() override{ + // intentionally empty + }; void OutputProcess() override{ // intentionally empty }; diff --git a/applications/GeoMechanicsApplication/tests/dirichlet_u/ProjectParameters_stage1.json b/applications/GeoMechanicsApplication/tests/dirichlet_u/ProjectParameters_stage1.json index bf0865cbb63b..8e029bb7d8ba 100644 --- a/applications/GeoMechanicsApplication/tests/dirichlet_u/ProjectParameters_stage1.json +++ b/applications/GeoMechanicsApplication/tests/dirichlet_u/ProjectParameters_stage1.json @@ -90,7 +90,7 @@ "node_output": false, "skin_output": false, "plane_output": [], - "nodal_results": ["DISPLACEMENT","TOTAL_DISPLACEMENT"], + "nodal_results": ["DISPLACEMENT","TOTAL_DISPLACEMENT","INCREMENTAL_DISPLACEMENT"], "gauss_point_results": ["GREEN_LAGRANGE_STRAIN_TENSOR","CAUCHY_STRESS_TENSOR"] }, "point_data_configuration": [] diff --git a/applications/GeoMechanicsApplication/tests/dirichlet_u/ProjectParameters_stage2.json b/applications/GeoMechanicsApplication/tests/dirichlet_u/ProjectParameters_stage2.json index 26d633481e80..1bb2e416e9b1 100644 --- a/applications/GeoMechanicsApplication/tests/dirichlet_u/ProjectParameters_stage2.json +++ b/applications/GeoMechanicsApplication/tests/dirichlet_u/ProjectParameters_stage2.json @@ -90,7 +90,7 @@ "node_output": false, "skin_output": false, "plane_output": [], - "nodal_results": ["DISPLACEMENT","TOTAL_DISPLACEMENT"], + "nodal_results": ["DISPLACEMENT","TOTAL_DISPLACEMENT","INCREMENTAL_DISPLACEMENT"], "gauss_point_results": ["GREEN_LAGRANGE_STRAIN_TENSOR","CAUCHY_STRESS_TENSOR"] }, "point_data_configuration": [] diff --git a/applications/GeoMechanicsApplication/tests/dirichlet_u/README.md b/applications/GeoMechanicsApplication/tests/dirichlet_u/README.md index 1c221f13f0cb..408eed1c45d8 100644 --- a/applications/GeoMechanicsApplication/tests/dirichlet_u/README.md +++ b/applications/GeoMechanicsApplication/tests/dirichlet_u/README.md @@ -29,8 +29,8 @@ The result is a uniform strain and stress field that linearly increases with tim Displacement and strain should restart from 0, vertical total displacement and vertical stress continue to increase starting from the end values of stage 1. ## Assertions -The calculated displacements, total displacements, strains and effective stresses from the Kratos Geomechanics calculations for stage 1 and 2 are compared to the expected solutions: +The calculated displacements, incremental displacements, total displacements, strains and effective stresses from the Kratos Geomechanics calculations for stage 1 and 2 are compared to the expected solutions: -- During stage 1: Vertical displacements are linear in both the vertical coordinate and in time. The total displacements equal the displacements. Vertical strains and stresses are uniform over the entire spatial domain and linearly increase in time. +- During stage 1: Vertical displacements are linear in both the vertical coordinate and in time. Incremental displacements are linear in the vertical coordinate, but the same for every step. The total displacements equal the displacements. Vertical strains and stresses are uniform over the entire spatial domain and linearly increase in time. -- During stage 2: Vertical displacements start from 0 again and from there are linear in both the vertical coordinate and in time. The total displacement equals the sum of the displacement at the end of stage 1 and the displacement during stage 2. Vertical strains follow from the vertical displacements, so they start from 0 again and from there increase linearly with time. Stresses are continuous at the stage transition, so the vertical stress starts from the end value of stage 1 and from there continues to increase linearly with time. +- During stage 2: Vertical displacements start from 0 again and from there are linear in both the vertical coordinate and in time. Incremental displacements are linear in the vertical coordinate, but the same for every step. The total displacement equals the sum of the displacement at the end of stage 1 and the displacement during stage 2. Vertical strains follow from the vertical displacements, so they start from 0 again and from there increase linearly with time. Stresses are continuous at the stage transition, so the vertical stress starts from the end value of stage 1 and from there continues to increase linearly with time. diff --git a/applications/GeoMechanicsApplication/tests/test_dirichlet_u.py b/applications/GeoMechanicsApplication/tests/test_dirichlet_u.py index 9b10c1101296..870afeb2af69 100644 --- a/applications/GeoMechanicsApplication/tests/test_dirichlet_u.py +++ b/applications/GeoMechanicsApplication/tests/test_dirichlet_u.py @@ -52,6 +52,9 @@ def test_dirichlet_u(self): total_displacements_8 = test_helper.GiDOutputFileReader.nodal_values_at_time("TOTAL_DISPLACEMENT", time, output_data[stage_nr], [8])[0] total_displacement_8_y = total_displacements_8[1] self.assertAlmostEqual(time*0.05/2, total_displacement_8_y, 2) + incremental_displacements_8 = test_helper.GiDOutputFileReader.nodal_values_at_time("INCREMENTAL_DISPLACEMENT", time, output_data[stage_nr], [8])[0] + incremental_displacement_8_y = incremental_displacements_8[1] + self.assertAlmostEqual(0.025/2, incremental_displacement_8_y, 2) # integration point check in element 2, integration point 4 ( uniform stress and strain so an arbitrary choice ) green_lagrange_strains_2_4 = test_helper.GiDOutputFileReader.element_integration_point_values_at_time("GREEN_LAGRANGE_STRAIN_TENSOR", time, output_data[stage_nr], [2], [3])[0][0] @@ -71,6 +74,10 @@ def test_dirichlet_u(self): total_displacements_8 = test_helper.GiDOutputFileReader.nodal_values_at_time("TOTAL_DISPLACEMENT", time, output_data[stage_nr], [8])[0] total_displacement_8_y = total_displacements_8[1] self.assertAlmostEqual(time*0.05/2, total_displacement_8_y, 2) + # incremental displacement every step the same + incremental_displacements_8 = test_helper.GiDOutputFileReader.nodal_values_at_time("INCREMENTAL_DISPLACEMENT", time, output_data[stage_nr], [8])[0] + incremental_displacement_8_y = incremental_displacements_8[1] + self.assertAlmostEqual(0.025/2, incremental_displacement_8_y, 2) # integration point check in element 2, integration point 4 ( uniform stress and strain so an arbitrary choice ) # strains start at 0 at begin of second stage ( like the displacement ) green_lagrange_strains_2_4 = test_helper.GiDOutputFileReader.element_integration_point_values_at_time("GREEN_LAGRANGE_STRAIN_TENSOR", time, output_data[stage_nr], [2], [3])[0][0] diff --git a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage1.json b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage1.json index 2e7bb7918d65..da89a7edfe11 100644 --- a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage1.json +++ b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage1.json @@ -93,7 +93,7 @@ "node_output": false, "skin_output": false, "plane_output": [], - "nodal_results": ["DISPLACEMENT","TOTAL_DISPLACEMENT","WATER_PRESSURE","VOLUME_ACCELERATION"], + "nodal_results": ["DISPLACEMENT","INCREMENTAL_DISPLACEMENT","TOTAL_DISPLACEMENT","WATER_PRESSURE","VOLUME_ACCELERATION"], "gauss_point_results": ["GREEN_LAGRANGE_STRAIN_TENSOR","ENGINEERING_STRAIN_TENSOR","CAUCHY_STRESS_TENSOR","TOTAL_STRESS_TENSOR","VON_MISES_STRESS","FLUID_FLUX_VECTOR","HYDRAULIC_HEAD"] }, "point_data_configuration": [] diff --git a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage2.json b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage2.json index 9274b16855da..e989e0081090 100644 --- a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage2.json +++ b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage2.json @@ -93,7 +93,7 @@ "node_output": false, "skin_output": false, "plane_output": [], - "nodal_results": ["DISPLACEMENT","TOTAL_DISPLACEMENT","WATER_PRESSURE","VOLUME_ACCELERATION"], + "nodal_results": ["DISPLACEMENT","INCREMENTAL_DISPLACEMENT","TOTAL_DISPLACEMENT","WATER_PRESSURE","VOLUME_ACCELERATION"], "gauss_point_results": ["GREEN_LAGRANGE_STRAIN_TENSOR","ENGINEERING_STRAIN_TENSOR","CAUCHY_STRESS_TENSOR","TOTAL_STRESS_TENSOR","VON_MISES_STRESS","FLUID_FLUX_VECTOR","HYDRAULIC_HEAD"] }, "point_data_configuration": [] diff --git a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage3.json b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage3.json index cb3e62f20bbb..3e6010910694 100644 --- a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage3.json +++ b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage3.json @@ -93,7 +93,7 @@ "node_output": false, "skin_output": false, "plane_output": [], - "nodal_results": ["DISPLACEMENT","TOTAL_DISPLACEMENT","WATER_PRESSURE","VOLUME_ACCELERATION"], + "nodal_results": ["DISPLACEMENT","INCREMENTAL_DISPLACEMENT","TOTAL_DISPLACEMENT","WATER_PRESSURE","VOLUME_ACCELERATION"], "gauss_point_results": ["GREEN_LAGRANGE_STRAIN_TENSOR","ENGINEERING_STRAIN_TENSOR","CAUCHY_STRESS_TENSOR","TOTAL_STRESS_TENSOR","VON_MISES_STRESS","FLUID_FLUX_VECTOR","HYDRAULIC_HEAD"] }, "point_data_configuration": [] diff --git a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage4.json b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage4.json index 0265eabcef51..ac9bcbe17e5b 100644 --- a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage4.json +++ b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/ProjectParameters_stage4.json @@ -93,7 +93,7 @@ "node_output": false, "skin_output": false, "plane_output": [], - "nodal_results": ["DISPLACEMENT","TOTAL_DISPLACEMENT","WATER_PRESSURE","VOLUME_ACCELERATION"], + "nodal_results": ["DISPLACEMENT","INCREMENTAL_DISPLACEMENT","TOTAL_DISPLACEMENT","WATER_PRESSURE","VOLUME_ACCELERATION"], "gauss_point_results": ["GREEN_LAGRANGE_STRAIN_TENSOR","ENGINEERING_STRAIN_TENSOR","CAUCHY_STRESS_TENSOR","TOTAL_STRESS_TENSOR","VON_MISES_STRESS","FLUID_FLUX_VECTOR","HYDRAULIC_HEAD"] }, "point_data_configuration": [] diff --git a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage1.post.orig.res b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage1.post.orig.res index 9ec5dc78f22d..0762019a97c1 100644 --- a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage1.post.orig.res +++ b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage1.post.orig.res @@ -2088,6 +2088,2088 @@ Values 2078 0 -0.00795499 0 2079 0 0 0 End Values +Result "INCREMENTAL_DISPLACEMENT" "Kratos" 1 Vector OnNodes +Values +1 0 -0.126442 0 +2 0 -0.126227 0 +3 -3.59419e-05 -0.126463 0 +4 8.44099e-07 -0.126255 0 +5 0 -0.125603 0 +6 -6.67603e-05 -0.126517 0 +7 -1.14909e-05 -0.126112 0 +8 2.02594e-05 -0.125295 0 +9 -5.89874e-05 -0.126421 0 +10 0 -0.124617 0 +11 -9.07373e-05 -0.126548 0 +12 1.24243e-05 -0.124947 0 +13 -1.20071e-05 -0.125592 0 +14 9.64159e-06 -0.124185 0 +15 -3.08364e-05 -0.126097 0 +16 -5.88466e-05 -0.126472 0 +17 0 -0.123352 0 +18 -0.000113102 -0.126612 0 +19 1.29628e-05 -0.123555 0 +20 1.34248e-05 -0.124248 0 +21 -5.62782e-06 -0.125017 0 +22 7.06713e-06 -0.122622 0 +23 -4.71928e-05 -0.126171 0 +24 -1.92501e-05 -0.12557 0 +25 0 -0.121817 0 +26 -0.000147876 -0.126676 0 +27 1.15275e-05 -0.122665 0 +28 1.10324e-05 -0.121836 0 +29 3.92333e-06 -0.123446 0 +30 -1.50716e-05 -0.12416 0 +31 6.03671e-06 -0.120956 0 +32 -9.56313e-05 -0.126233 0 +33 -3.5232e-05 -0.124817 0 +34 0 -0.120021 0 +35 -0.000176363 -0.12675 0 +36 1.24177e-05 -0.121065 0 +37 8.17933e-06 -0.121959 0 +38 1.04085e-05 -0.120036 0 +39 -1.21501e-05 -0.12313 0 +40 5.67765e-06 -0.119029 0 +41 -8.1734e-05 -0.125331 0 +42 -0.000136695 -0.12653 0 +43 -3.16744e-05 -0.123876 0 +44 1.23399e-05 -0.120239 0 +45 0 -0.117966 0 +46 -0.000163347 -0.126805 0 +47 1.36339e-05 -0.119142 0 +48 1.06236e-05 -0.117978 0 +49 -2.39295e-07 -0.121577 0 +50 5.69214e-06 -0.116845 0 +51 -9.91977e-05 -0.12577 0 +52 -5.72453e-05 -0.124461 0 +53 -0.000132509 -0.126559 0 +54 1.58556e-05 -0.118101 0 +55 -2.32403e-05 -0.122793 0 +56 1.45992e-05 -0.116864 0 +57 1.24711e-05 -0.119261 0 +58 -0.000144337 -0.126813 0 +59 0 -0.115654 0 +60 1.08901e-05 -0.115663 0 +61 -0.000101566 -0.125973 0 +62 -1.84366e-08 -0.120689 0 +63 -0.000129708 -0.126643 0 +64 5.76335e-06 -0.114403 0 +65 -6.67052e-05 -0.124948 0 +66 1.82109e-05 -0.115688 0 +67 1.81051e-05 -0.116985 0 +68 -3.88774e-05 -0.123399 0 +69 1.56127e-05 -0.114419 0 +70 -1.34575e-05 -0.121564 0 +71 1.35451e-05 -0.118215 0 +72 0 -0.113084 0 +73 -0.000145161 -0.126807 0 +74 -9.7937e-05 -0.126153 0 +75 1.13096e-05 -0.113092 0 +76 -7.19307e-05 -0.125211 0 +77 5.94302e-06 -0.119231 0 +78 -0.00011305 -0.12667 0 +79 5.90056e-06 -0.111705 0 +80 1.99266e-05 -0.113112 0 +81 2.21702e-05 -0.114246 0 +82 -4.8421e-05 -0.123971 0 +83 1.6731e-05 -0.117025 0 +84 -2.46692e-05 -0.122245 0 +85 2.10594e-05 -0.115624 0 +86 1.6445e-05 -0.111718 0 +87 0 -0.110258 0 +88 -3.86549e-06 -0.120193 0 +89 -0.000146442 -0.126867 0 +90 -8.22722e-05 -0.126021 0 +91 1.16291e-05 -0.110264 0 +92 1.02696e-05 -0.118103 0 +93 -6.58771e-05 -0.124996 0 +94 -9.80218e-05 -0.126634 0 +95 6.0093e-06 -0.108749 0 +96 2.12937e-05 -0.110282 0 +97 2.01987e-05 -0.115761 0 +98 2.4809e-05 -0.11152 0 +99 2.41875e-05 -0.114281 0 +100 -2.63158e-05 -0.122271 0 +101 2.61567e-05 -0.112717 0 +102 -6.59279e-06 -0.120219 0 +103 1.71001e-05 -0.108761 0 +104 4.90323e-06 -0.11869 0 +105 -7.13399e-05 -0.125867 0 +106 0 -0.107174 0 +107 -0.000129887 -0.126915 0 +108 -4.03325e-05 -0.123467 0 +109 1.69417e-05 -0.116411 0 +110 1.19182e-05 -0.10718 0 +111 2.53757e-05 -0.108862 0 +112 2.837e-05 -0.110152 0 +113 2.44698e-05 -0.114233 0 +114 2.78227e-05 -0.112663 0 +115 -9.25887e-05 -0.126662 0 +116 6.09499e-06 -0.105538 0 +117 -5.36837e-05 -0.124578 0 +118 2.89011e-06 -0.118715 0 +119 -8.71047e-06 -0.120245 0 +120 1.2875e-05 -0.117046 0 +121 2.31178e-05 -0.106705 0 +122 3.09135e-05 -0.11017 0 +123 2.20059e-05 -0.114923 0 +124 -2.19592e-05 -0.121657 0 +125 1.84754e-05 -0.105038 0 +126 1.29611e-05 -0.104393 0 +127 0 -0.103835 0 +128 -0.000120228 -0.126919 0 +129 2.9316e-05 -0.107384 0 +130 -6.23182e-05 -0.125493 0 +131 2.87047e-05 -0.11261 0 +132 -3.68274e-05 -0.122929 0 +133 7.08383e-06 -0.102644 0 +134 2.74609e-05 -0.105144 0 +135 1.17953e-06 -0.118741 0 +136 3.28667e-05 -0.1074 0 +137 1.15118e-05 -0.11707 0 +138 3.31647e-05 -0.110108 0 +139 -0.0001052 -0.126435 0 +140 2.13497e-05 -0.114946 0 +141 -1.11818e-05 -0.120295 0 +142 -5.45037e-05 -0.124059 0 +143 1.95713e-05 -0.10211 0 +144 1.39944e-05 -0.101426 0 +145 2.46836e-05 -0.102788 0 +146 2.89251e-05 -0.112632 0 +147 3.56594e-05 -0.107417 0 +148 0 -0.10024 0 +149 -0.000152447 -0.126913 0 +150 3.27865e-05 -0.104521 0 +151 3.43441e-05 -0.110129 0 +152 1.0287e-05 -0.117095 0 +153 -7.99244e-05 -0.125051 0 +154 7.10682e-06 -0.0989611 0 +155 3.07588e-05 -0.102131 0 +156 2.06795e-05 -0.11497 0 +157 3.65385e-05 -0.104536 0 +158 -1.50849e-05 -0.120522 0 +159 3.78225e-05 -0.107435 0 +160 -0.000147828 -0.126443 0 +161 2.89498e-05 -0.112654 0 +162 -3.38476e-05 -0.122282 0 +163 1.73458e-05 -0.0981781 0 +164 2.28658e-05 -0.098905 0 +165 3.5156e-05 -0.110149 0 +166 -0.000127979 -0.125858 0 +167 3.96044e-05 -0.104553 0 +168 0 -0.0963882 0 +169 -0.000190011 -0.126924 0 +170 3.61023e-05 -0.101466 0 +171 7.88017e-06 -0.117361 0 +172 2.86913e-05 -0.0989143 0 +173 -5.32544e-05 -0.123492 0 +174 3.94742e-05 -0.107455 0 +175 2.00615e-05 -0.114994 0 +176 -0.000183245 -0.126805 0 +177 1.05873e-05 -0.0955666 0 +178 2.8855e-05 -0.112677 0 +179 -7.20388e-05 -0.124434 0 +180 3.99755e-05 -0.10148 0 +181 4.20805e-05 -0.10457 0 +182 3.56988e-05 -0.110171 0 +183 -0.000154222 -0.126452 0 +184 3.46487e-05 -0.0982058 0 +185 2.05869e-05 -0.0947389 0 +186 -1.03305e-05 -0.119726 0 +187 5.44098e-06 -0.117625 0 +188 4.07119e-05 -0.107474 0 +189 -2.92054e-05 -0.121589 0 +190 1.82929e-05 -0.115282 0 +191 2.67639e-05 -0.0947464 0 +192 4.3218e-05 -0.101496 0 +193 0 -0.0922809 0 +194 -0.000214429 -0.126955 0 +195 -0.000108531 -0.125354 0 +196 3.91928e-05 -0.0982184 0 +197 7.02479e-06 -0.0919773 0 +198 2.86962e-05 -0.1127 0 +199 4.40447e-05 -0.104588 0 +200 -4.57042e-05 -0.122727 0 +201 3.24159e-05 -0.0947556 0 +202 -0.000173044 -0.126855 0 +203 3.6042e-05 -0.110192 0 +204 -0.000133754 -0.126204 0 +205 1.72202e-05 -0.0911018 0 +206 4.31143e-05 -0.0982322 0 +207 4.16296e-05 -0.107495 0 +208 -6.61488e-05 -0.123757 0 +209 4.58882e-05 -0.101513 0 +210 3.75032e-05 -0.0947664 0 +211 2.36339e-05 -0.0911077 0 +212 1.77169e-05 -0.115307 0 +213 6.01138e-06 -0.117413 0 +214 4.55772e-05 -0.104607 0 +215 -9.68107e-06 -0.119541 0 +216 -9.62338e-05 -0.124924 0 +217 2.96245e-05 -0.0911153 0 +218 2.84858e-05 -0.112724 0 +219 -2.64986e-05 -0.121245 0 +220 4.64367e-05 -0.0982471 0 +221 0 -0.0879179 0 +222 -0.000225148 -0.127044 0 +223 4.19937e-05 -0.0947785 0 +224 -0.00015149 -0.126758 0 +225 3.62199e-05 -0.110215 0 +226 6.89821e-06 -0.0875957 0 +227 4.80507e-05 -0.10153 0 +228 -0.000113079 -0.1259 0 +229 3.51165e-05 -0.0911244 0 +230 4.22648e-05 -0.107516 0 +231 -4.19109e-05 -0.12242 0 +232 1.37063e-05 -0.087274 0 +233 2.02373e-05 -0.0872785 0 +234 4.58947e-05 -0.0947918 0 +235 4.67306e-05 -0.104627 0 +236 -6.37762e-05 -0.123787 0 +237 4.92047e-05 -0.0982629 0 +238 4.00663e-05 -0.0911348 0 +239 2.64327e-05 -0.0872845 0 +240 1.84931e-05 -0.115068 0 +241 2.82346e-05 -0.112748 0 +242 6.9106e-06 -0.117199 0 +243 4.97489e-05 -0.101548 0 +244 -8.59423e-05 -0.124963 0 +245 3.62413e-05 -0.110237 0 +246 -6.75786e-06 -0.11914 0 +247 3.22128e-05 -0.0872921 0 +248 4.92219e-05 -0.094806 0 +249 4.26494e-05 -0.107537 0 +250 0 -0.0832991 0 +251 -0.000217854 -0.127118 0 +252 -2.26931e-05 -0.12089 0 +253 4.44508e-05 -0.0911465 0 +254 -0.000153585 -0.126829 0 +255 6.75824e-06 -0.0829585 0 +256 5.14544e-05 -0.0982794 0 +257 -0.00010949 -0.125958 0 +258 1.66946e-05 -0.0832585 0 +259 4.75378e-05 -0.104646 0 +260 -4.09104e-05 -0.122451 0 +261 3.75071e-05 -0.087301 0 +262 2.29962e-05 -0.0832633 0 +263 5.10279e-05 -0.101566 0 +264 -6.14217e-05 -0.123823 0 +265 4.82704e-05 -0.0911591 0 +266 5.19989e-05 -0.0948209 0 +267 2.89485e-05 -0.0832694 0 +268 4.22827e-05 -0.0873111 0 +269 2.78566e-05 -0.112772 0 +270 1.80035e-05 -0.115094 0 +271 3.60774e-05 -0.11026 0 +272 6.39598e-06 -0.117226 0 +273 5.32217e-05 -0.0982963 0 +274 4.27647e-05 -0.107558 0 +275 -7.08428e-06 -0.119169 0 +276 -8.30997e-05 -0.125007 0 +277 3.4483e-05 -0.0832769 0 +278 4.80082e-05 -0.104667 0 +279 -2.26139e-05 -0.120922 0 +280 5.15303e-05 -0.0911725 0 +281 0 -0.0784247 0 +282 -0.000205614 -0.127172 0 +283 9.86821e-06 -0.0787368 0 +284 4.65152e-05 -0.0873222 0 +285 -0.000152471 -0.126882 0 +286 1.94161e-05 -0.0790513 0 +287 5.42544e-05 -0.0948364 0 +288 -0.000109005 -0.126006 0 +289 5.18979e-05 -0.101585 0 +290 -4.02421e-05 -0.122486 0 +291 3.9548e-05 -0.0832855 0 +292 2.54485e-05 -0.0790562 0 +293 5.45281e-05 -0.0983137 0 +294 2.72816e-05 -0.112796 0 +295 5.01998e-05 -0.0873342 0 +296 3.56647e-05 -0.110283 0 +297 1.73453e-05 -0.11512 0 +298 -6.11062e-05 -0.123931 0 +299 5.42476e-05 -0.0911866 0 +300 3.1123e-05 -0.0790623 0 +301 4.25885e-05 -0.10758 0 +302 5.74566e-06 -0.117254 0 +303 4.41101e-05 -0.0832952 0 +304 4.81283e-05 -0.104687 0 +305 -7.60895e-06 -0.119198 0 +306 5.60046e-05 -0.0948525 0 +307 6.38659e-06 -0.0743217 0 +308 -8.38168e-05 -0.125108 0 +309 3.63859e-05 -0.0790696 0 +310 5.23693e-05 -0.101604 0 +311 -2.2938e-05 -0.120953 0 +312 1.58119e-05 -0.0746484 0 +313 5.33383e-05 -0.0873469 0 +314 -0.000194777 -0.127215 0 +315 0 -0.0732946 0 +316 4.81474e-05 -0.0833057 0 +317 -0.000149069 -0.126924 0 +318 2.18277e-05 -0.0746522 0 +319 5.64354e-05 -0.0912013 0 +320 5.53845e-05 -0.0983314 0 +321 4.11895e-05 -0.0790779 0 +322 -4.12263e-05 -0.122599 0 +323 2.75516e-05 -0.0746572 0 +324 3.49424e-05 -0.110306 0 +325 2.64119e-05 -0.112821 0 +326 4.20706e-05 -0.107602 0 +327 1.64007e-05 -0.115146 0 +328 5.72687e-05 -0.0948688 0 +329 5.1652e-05 -0.083317 0 +330 4.78762e-05 -0.104707 0 +331 4.80028e-06 -0.117281 0 +332 3.29198e-05 -0.0746633 0 +333 5.59364e-05 -0.0873601 0 +334 -6.21005e-05 -0.124036 0 +335 -0.000108158 -0.126065 0 +336 4.55057e-05 -0.0790871 0 +337 5.24264e-05 -0.101623 0 +338 -8.50266e-06 -0.119227 0 +339 1.22676e-05 -0.0700546 0 +340 5.81076e-05 -0.0912163 0 +341 6.0949e-06 -0.0689861 0 +342 1.818e-05 -0.0700574 0 +343 3.78809e-05 -0.0746703 0 +344 5.57931e-05 -0.0983493 0 +345 -2.36337e-05 -0.120983 0 +346 5.462e-05 -0.0833289 0 +347 0 -0.067909 0 +348 -0.000184639 -0.127252 0 +349 2.38668e-05 -0.0700614 0 +350 4.93123e-05 -0.079097 0 +351 5.80492e-05 -0.0948854 0 +352 5.80046e-05 -0.0873738 0 +353 -4.17652e-05 -0.12263 0 +354 4.23951e-05 -0.0746782 0 +355 3.38461e-05 -0.110329 0 +356 4.11683e-05 -0.107623 0 +357 2.51719e-05 -0.112845 0 +358 2.92563e-05 -0.0700663 0 +359 -8.32636e-05 -0.12516 0 +360 4.72193e-05 -0.104728 0 +361 1.5086e-05 -0.115171 0 +362 5.92732e-05 -0.0912316 0 +363 5.20572e-05 -0.101642 0 +364 3.47558e-06 -0.117307 0 +365 -0.000142176 -0.126976 0 +366 -6.112e-05 -0.123998 0 +367 5.2599e-05 -0.0791076 0 +368 3.42899e-05 -0.0700722 0 +369 5.7055e-05 -0.0833413 0 +370 4.64346e-05 -0.0746868 0 +371 5.57467e-05 -0.0983671 0 +372 -9.72072e-06 -0.119254 0 +373 1.40684e-05 -0.0649611 0 +374 5.95486e-05 -0.0873878 0 +375 5.83519e-05 -0.094902 0 +376 -2.46055e-05 -0.121011 0 +377 1.96464e-05 -0.064964 0 +378 3.89247e-05 -0.0700789 0 +379 5.78422e-06 -0.063395 0 +380 2.54922e-05 -0.0652787 0 +381 5.53611e-05 -0.0791187 0 +382 0 -0.0622678 0 +383 -0.000175537 -0.127285 0 +384 -0.000105552 -0.126112 0 +385 4.99793e-05 -0.0746961 0 +386 5.9938e-05 -0.091247 0 +387 3.9861e-05 -0.107644 0 +388 3.23545e-05 -0.110351 0 +389 -4.1291e-05 -0.122579 0 +390 5.89608e-05 -0.083354 0 +391 4.6141e-05 -0.104748 0 +392 2.35593e-05 -0.112868 0 +393 -8.0875e-05 -0.125129 0 +394 4.31233e-05 -0.0700863 0 +395 3.05189e-05 -0.0652835 0 +396 5.12489e-05 -0.101661 0 +397 1.34151e-05 -0.115195 0 +398 5.52426e-05 -0.0983849 0 +399 1.86659e-06 -0.117332 0 +400 6.05781e-05 -0.087402 0 +401 -5.96751e-05 -0.123955 0 +402 -0.000137198 -0.127008 0 +403 3.5194e-05 -0.0652891 0 +404 5.30184e-05 -0.074706 0 +405 5.75976e-05 -0.0791302 0 +406 5.81759e-05 -0.0949186 0 +407 -1.11302e-05 -0.11928 0 +408 4.68615e-05 -0.0700944 0 +409 1.55099e-05 -0.0596507 0 +410 6.03436e-05 -0.083367 0 +411 2.12109e-05 -0.0599773 0 +412 6.01079e-05 -0.0912625 0 +413 7.71486e-06 -0.0580196 0 +414 -2.55624e-05 -0.121037 0 +415 3.94778e-05 -0.0652954 0 +416 2.66523e-05 -0.0603041 0 +417 3.8144e-05 -0.107665 0 +418 4.46367e-05 -0.104767 0 +419 3.04824e-05 -0.110372 0 +420 5.55453e-05 -0.0747163 0 +421 0 -0.0563711 0 +422 -0.00016577 -0.12732 0 +423 5.01201e-05 -0.0701031 0 +424 4.99973e-05 -0.10168 0 +425 2.16016e-05 -0.11289 0 +426 6.10981e-05 -0.0874163 0 +427 -4.13527e-05 -0.122604 0 +428 5.93124e-05 -0.079142 0 +429 5.42792e-05 -0.0984024 0 +430 1.14767e-05 -0.115218 0 +431 -7.82649e-05 -0.125153 0 +432 3.12918e-05 -0.0603087 0 +433 4.3339e-05 -0.0653024 0 +434 5.75255e-05 -0.0949351 0 +435 -0.000103074 -0.126234 0 +436 1.02005e-07 -0.117355 0 +437 6.12103e-05 -0.0833802 0 +438 -5.82457e-05 -0.123979 0 +439 1.21506e-05 -0.0547797 0 +440 3.55846e-05 -0.060314 0 +441 5.28885e-05 -0.0701121 0 +442 5.97885e-05 -0.0912778 0 +443 -1.25001e-05 -0.119303 0 +444 1.75086e-05 -0.0547958 0 +445 5.75593e-05 -0.0747269 0 +446 4.74052e-06 -0.0530924 0 +447 4.67546e-05 -0.0653098 0 +448 2.27758e-05 -0.0551338 0 +449 6.05096e-05 -0.079154 0 +450 6.11184e-05 -0.0874306 0 +451 -2.61626e-05 -0.12106 0 +452 -0.000125737 -0.127094 0 +453 3.9498e-05 -0.0603198 0 +454 4.27276e-05 -0.104786 0 +455 3.60569e-05 -0.107684 0 +456 4.83202e-05 -0.101698 0 +457 2.82803e-05 -0.110393 0 +458 2.73016e-05 -0.0551376 0 +459 5.28695e-05 -0.0984194 0 +460 1.93844e-05 -0.112911 0 +461 5.51607e-05 -0.0701216 0 +462 -0.000146267 -0.127352 0 +463 0 -0.0502189 0 +464 4.97081e-05 -0.0653178 0 +465 6.15695e-05 -0.0833933 0 +466 -4.06764e-05 -0.122626 0 +467 5.6413e-05 -0.0949512 0 +468 9.37691e-06 -0.115239 0 +469 5.90624e-05 -0.0747377 0 +470 3.15284e-05 -0.0551419 0 +471 9.00124e-06 -0.0497402 0 +472 4.30033e-05 -0.0603262 0 +473 5.89925e-05 -0.0912929 0 +474 -1.68386e-06 -0.117376 0 +475 1.40654e-05 -0.0497561 0 +476 6.11979e-05 -0.079166 0 +477 -5.55437e-05 -0.124 0 +478 1.89632e-05 -0.0497727 0 +479 3.54195e-05 -0.0551468 0 +480 -7.3597e-05 -0.125292 0 +481 6.06506e-05 -0.0874447 0 +482 -1.36752e-05 -0.119324 0 +483 5.21896e-05 -0.0653261 0 +484 5.69354e-05 -0.0701313 0 +485 4.31537e-06 -0.0468026 0 +486 4.6081e-05 -0.0603331 0 +487 -9.18413e-05 -0.126347 0 +488 2.32997e-05 -0.0497756 0 +489 4.04581e-05 -0.104804 0 +490 4.62459e-05 -0.101715 0 +491 3.36538e-05 -0.107703 0 +492 6.00606e-05 -0.0747486 0 +493 6.14333e-05 -0.0834064 0 +494 -2.63557e-05 -0.12108 0 +495 5.10383e-05 -0.0984358 0 +496 2.58305e-05 -0.110411 0 +497 -0.000109306 -0.127118 0 +498 3.89445e-05 -0.0551522 0 +499 2.73837e-05 -0.0497791 0 +500 5.48575e-05 -0.0949668 0 +501 1.70087e-05 -0.11293 0 +502 5.41937e-05 -0.0653347 0 +503 6.13877e-05 -0.079178 0 +504 5.7738e-05 -0.0913076 0 +505 7.23809e-06 -0.115258 0 +506 0 -0.0438112 0 +507 -0.000124305 -0.127375 0 +508 -3.93395e-05 -0.122645 0 +509 4.87162e-05 -0.0603403 0 +510 9.45152e-06 -0.0440209 0 +511 5.82157e-05 -0.0701411 0 +512 3.1178e-05 -0.0497831 0 +513 4.20799e-05 -0.055158 0 +514 5.97116e-05 -0.0874585 0 +515 1.40425e-05 -0.0440372 0 +516 -3.35182e-06 -0.117395 0 +517 6.05628e-05 -0.0747596 0 +518 -5.18906e-05 -0.124018 0 +519 1.93598e-05 -0.0442228 0 +520 6.08176e-05 -0.0834193 0 +521 -1.45783e-05 -0.119342 0 +522 3.46494e-05 -0.0497876 0 +523 -6.64151e-05 -0.125309 0 +524 5.09848e-06 -0.0409781 0 +525 5.09007e-05 -0.0603479 0 +526 5.57203e-05 -0.0653435 0 +527 4.38259e-05 -0.101731 0 +528 3.78871e-05 -0.104821 0 +529 2.32257e-05 -0.0442255 0 +530 4.48082e-05 -0.0551642 0 +531 4.88244e-05 -0.0984515 0 +532 3.10113e-05 -0.10772 0 +533 -7.9823e-05 -0.126379 0 +534 5.28938e-05 -0.0949817 0 +535 2.32198e-05 -0.110429 0 +536 6.10938e-05 -0.07919 0 +537 -2.60763e-05 -0.121097 0 +538 5.90082e-05 -0.0701511 0 +539 3.77732e-05 -0.0497924 0 +540 5.60531e-05 -0.0913219 0 +541 1.45695e-05 -0.112947 0 +542 2.68458e-05 -0.0442287 0 +543 -9.15744e-05 -0.127144 0 +544 5.83271e-05 -0.0874719 0 +545 5.15967e-06 -0.115275 0 +546 6.0582e-05 -0.0747706 0 +547 9.54575e-06 -0.0380984 0 +548 -3.73584e-05 -0.122661 0 +549 5.26304e-05 -0.0603556 0 +550 0 -0.0371481 0 +551 -0.000100255 -0.127391 0 +552 4.71172e-05 -0.0551707 0 +553 3.01881e-05 -0.0442323 0 +554 5.67731e-05 -0.0653524 0 +555 1.4449e-05 -0.0382894 0 +556 5.97444e-05 -0.0834318 0 +557 -4.83738e-06 -0.117412 0 +558 4.05285e-05 -0.0497977 0 +559 1.91228e-05 -0.038481 0 +560 5.93234e-05 -0.070161 0 +561 -4.75678e-05 -0.124033 0 +562 6.03361e-05 -0.0792016 0 +563 -1.5155e-05 -0.119358 0 +564 4.11199e-05 -0.101746 0 +565 3.32263e-05 -0.0442363 0 +566 4.62803e-05 -0.0984663 0 +567 3.50886e-05 -0.104836 0 +568 4.408e-06 -0.034205 0 +569 5.05633e-05 -0.094996 0 +570 2.82131e-05 -0.107735 0 +571 -5.86013e-05 -0.125342 0 +572 4.90004e-05 -0.0551774 0 +573 2.24911e-05 -0.0384835 0 +574 5.39064e-05 -0.0603635 0 +575 4.29014e-05 -0.0498032 0 +576 5.39751e-05 -0.0913355 0 +577 2.05397e-05 -0.110444 0 +578 6.01354e-05 -0.0747813 0 +579 -2.54024e-05 -0.121112 0 +580 -6.64818e-05 -0.126407 0 +581 5.73603e-05 -0.0653613 0 +582 5.65279e-05 -0.0874848 0 +583 1.21641e-05 -0.112963 0 +584 3.59385e-05 -0.0442406 0 +585 2.56259e-05 -0.0384863 0 +586 7.62587e-06 -0.0323475 0 +587 -7.28098e-05 -0.127153 0 +588 5.82421e-05 -0.083444 0 +589 3.21681e-06 -0.11529 0 +590 1.09636e-05 -0.0323485 0 +591 5.91764e-05 -0.0701709 0 +592 -3.49852e-05 -0.122675 0 +593 5.04553e-05 -0.0551843 0 +594 0 -0.0302294 0 +595 -7.64672e-05 -0.127397 0 +596 4.48818e-05 -0.0498089 0 +597 1.51503e-05 -0.0325456 0 +598 2.85016e-05 -0.0384895 0 +599 5.47338e-05 -0.0603714 0 +600 5.91391e-05 -0.079213 0 +601 -6.08164e-06 -0.117426 0 +602 3.83085e-05 -0.0442452 0 +603 1.8184e-05 -0.0325474 0 +604 4.34641e-05 -0.09848 0 +605 3.81953e-05 -0.10176 0 +606 3.10443e-06 -0.0283323 0 +607 5.74937e-05 -0.0653702 0 +608 4.79187e-05 -0.0950093 0 +609 3.21364e-05 -0.10485 0 +610 -4.31015e-05 -0.124046 0 +611 5.9245e-05 -0.0747919 0 +612 -1.54394e-05 -0.119371 0 +613 5.15483e-05 -0.0913484 0 +614 2.53363e-05 -0.10775 0 +615 3.10958e-05 -0.038493 0 +616 -5.07697e-05 -0.125355 0 +617 2.10291e-05 -0.0325495 0 +618 4.64652e-05 -0.0498149 0 +619 5.43543e-05 -0.0874971 0 +620 1.78702e-05 -0.110458 0 +621 5.14845e-05 -0.0551913 0 +622 4.03245e-05 -0.04425 0 +623 5.82227e-06 -0.0264172 0 +624 5.85859e-05 -0.0701805 0 +625 -2.44537e-05 -0.121125 0 +626 5.63449e-05 -0.0834556 0 +627 9.85737e-06 -0.112976 0 +628 5.51218e-05 -0.0603794 0 +629 8.64118e-06 -0.026418 0 +630 2.36611e-05 -0.032552 0 +631 3.33915e-05 -0.0384967 0 +632 5.75337e-05 -0.079224 0 +633 1.46541e-06 -0.115303 0 +634 1.13805e-05 -0.026419 0 +635 -5.18991e-05 -0.126319 0 +636 5.71898e-05 -0.065379 0 +637 -3.25612e-05 -0.122687 0 +638 4.76509e-05 -0.0498209 0 +639 0 -0.0230553 0 +640 -6.50522e-05 -0.127393 0 +641 1.39947e-05 -0.0264203 0 +642 4.19793e-05 -0.044255 0 +643 -5.80701e-05 -0.127101 0 +644 2.60577e-05 -0.0325547 0 +645 5.79377e-05 -0.0748021 0 +646 -7.07347e-06 -0.117439 0 +647 5.2094e-05 -0.0551984 0 +648 4.0441e-05 -0.0984927 0 +649 3.53754e-05 -0.0385006 0 +650 4.50175e-05 -0.0950218 0 +651 3.51232e-05 -0.101773 0 +652 4.88247e-05 -0.0913604 0 +653 2.91043e-05 -0.104863 0 +654 1.64644e-05 -0.0264218 0 +655 5.50837e-05 -0.0603873 0 +656 2.4005e-06 -0.0210897 0 +657 5.18512e-05 -0.0875087 0 +658 2.24579e-05 -0.107762 0 +659 -3.92569e-05 -0.124056 0 +660 5.7576e-05 -0.07019 0 +661 -1.54518e-05 -0.119383 0 +662 2.82021e-05 -0.0325576 0 +663 5.40936e-05 -0.0834667 0 +664 1.52768e-05 -0.110471 0 +665 1.87664e-05 -0.0264236 0 +666 4.327e-05 -0.0442601 0 +667 5.55096e-06 -0.0202658 0 +668 4.84426e-05 -0.049827 0 +669 3.70387e-05 -0.0385048 0 +670 5.55555e-05 -0.0792344 0 +671 7.70738e-06 -0.112988 0 +672 7.76401e-06 -0.0202665 0 +673 5.64688e-05 -0.0653876 0 +674 -2.32952e-05 -0.121135 0 +675 5.22946e-05 -0.0552054 0 +676 -4.36118e-05 -0.125235 0 +677 2.08807e-05 -0.0264256 0 +678 3.00803e-05 -0.0325607 0 +679 9.9972e-06 -0.0201021 0 +680 5.62454e-05 -0.0748119 0 +681 -7.18047e-08 -0.115314 0 +682 5.46369e-05 -0.0603951 0 +683 -3.01755e-05 -0.122696 0 +684 1.20008e-05 -0.0201031 0 +685 4.41977e-05 -0.0442654 0 +686 4.19179e-05 -0.0950332 0 +687 3.7273e-05 -0.0985043 0 +688 0 -0.0156257 0 +689 -5.81276e-05 -0.127395 0 +690 3.83765e-05 -0.038509 0 +691 5.61743e-05 -0.0701991 0 +692 -7.8193e-06 -0.117449 0 +693 2.27908e-05 -0.0264278 0 +694 -5.34308e-05 -0.127103 0 +695 4.58579e-05 -0.0913716 0 +696 3.1966e-05 -0.101785 0 +697 4.88478e-05 -0.0498331 0 +698 -4.64275e-05 -0.126222 0 +699 4.9068e-05 -0.0875196 0 +700 2.60565e-05 -0.104875 0 +701 3.16828e-05 -0.032564 0 +702 2.46855e-06 -0.0147806 0 +703 1.38819e-05 -0.0201043 0 +704 5.15322e-05 -0.0834771 0 +705 1.96324e-05 -0.107773 0 +706 5.21001e-05 -0.0552123 0 +707 5.53556e-05 -0.065396 0 +708 -1.52446e-05 -0.119393 0 +709 -3.57144e-05 -0.124065 0 +710 5.32445e-05 -0.0792443 0 +711 1.28091e-05 -0.110481 0 +712 2.44838e-05 -0.0264302 0 +713 4.60769e-06 -0.0139325 0 +714 1.56225e-05 -0.0201057 0 +715 3.93876e-05 -0.0385133 0 +716 6.21816e-06 -0.0137629 0 +717 4.47673e-05 -0.0442706 0 +718 5.42036e-05 -0.0748212 0 +719 5.73992e-06 -0.112998 0 +720 3.3003e-05 -0.0325674 0 +721 5.38025e-05 -0.0604027 0 +722 -2.20453e-05 -0.121144 0 +723 4.88778e-05 -0.0498392 0 +724 -3.99296e-05 -0.125243 0 +725 1.72094e-05 -0.0201072 0 +726 7.71272e-06 -0.0135933 0 +727 2.59493e-05 -0.0264326 0 +728 5.44131e-05 -0.0702078 0 +729 -1.38426e-06 -0.115324 0 +730 3.86797e-05 -0.0950436 0 +731 4.2704e-05 -0.0913819 0 +732 3.40201e-05 -0.0985147 0 +733 9.07494e-06 -0.013594 0 +734 5.1529e-05 -0.0552191 0 +735 -2.78873e-05 -0.122704 0 +736 4.60569e-05 -0.0875296 0 +737 2.87853e-05 -0.101795 0 +738 5.38779e-05 -0.0654041 0 +739 -8.33747e-06 -0.117458 0 +740 4.00747e-05 -0.0385177 0 +741 -5.36324e-05 -0.127399 0 +742 0 -0.00794065 0 +743 1.863e-05 -0.0201089 0 +744 3.40383e-05 -0.0325709 0 +745 4.87089e-05 -0.0834868 0 +746 2.3046e-05 -0.104885 0 +747 9.69045e-07 -0.00794068 0 +748 -4.88107e-05 -0.127107 0 +749 4.49869e-05 -0.0442758 0 +750 -4.30288e-05 -0.126229 0 +751 1.03449e-05 -0.0135949 0 +752 2.71809e-05 -0.0264352 0 +753 5.06445e-05 -0.0792536 0 +754 1.69086e-05 -0.107783 0 +755 2.07519e-06 -0.00706698 0 +756 5.26055e-05 -0.06041 0 +757 -1.48654e-05 -0.119401 0 +758 4.85474e-05 -0.0498452 0 +759 -3.26118e-05 -0.124073 0 +760 5.18523e-05 -0.07483 0 +761 1.04949e-05 -0.110491 0 +762 2.90662e-06 -0.00706718 0 +763 1.98757e-05 -0.0201107 0 +764 1.15112e-05 -0.0135958 0 +765 5.23278e-05 -0.0702161 0 +766 3.96815e-06 -0.113007 0 +767 3.68089e-06 -0.0068923 0 +768 3.47891e-05 -0.0325744 0 +769 4.04431e-05 -0.0385221 0 +770 2.8174e-05 -0.0264379 0 +771 5.06021e-05 -0.0552257 0 +772 -2.07198e-05 -0.121152 0 +773 4.4198e-06 -0.00689262 0 +774 4.48689e-05 -0.044281 0 +775 1.25655e-05 -0.0135968 0 +776 -3.63194e-05 -0.125249 0 +777 5.20683e-05 -0.0654117 0 +778 -2.48856e-06 -0.115332 0 +779 2.09393e-05 -0.0201125 0 +780 3.94152e-05 -0.0913912 0 +781 3.53538e-05 -0.095053 0 +782 4.28675e-05 -0.0875388 0 +783 3.07339e-05 -0.098524 0 +784 4.56712e-05 -0.0834958 0 +785 2.56248e-05 -0.101804 0 +786 5.11242e-06 -0.006893 0 +787 4.78747e-05 -0.0498511 0 +788 -2.57002e-05 -0.122711 0 +789 4.77997e-05 -0.0792623 0 +790 2.01133e-05 -0.104894 0 +791 5.10738e-05 -0.0604171 0 +792 -8.66894e-06 -0.117466 0 +793 1.34996e-05 -0.0135979 0 +794 3.52588e-05 -0.032578 0 +795 0 0 0 +796 -4.91369e-05 -0.127403 0 +797 2.89283e-05 -0.0264407 0 +798 0 0 0 +799 -4.41768e-05 -0.127111 0 +800 4.92323e-05 -0.0748383 0 +801 1.43101e-05 -0.107792 0 +802 0 0 0 +803 4.05024e-05 -0.0385265 0 +804 5.7535e-06 -0.00689343 0 +805 -3.89731e-05 -0.126234 0 +806 2.18169e-05 -0.0201145 0 +807 0 0 0 +808 4.93447e-05 -0.0552321 0 +809 4.9956e-05 -0.0702239 0 +810 8.34848e-06 -0.110499 0 +811 -1.43546e-05 -0.119407 0 +812 4.44276e-05 -0.0442861 0 +813 0 0 0 +814 -2.97092e-05 -0.124078 0 +815 1.43088e-05 -0.0135991 0 +816 6.33729e-06 -0.00689391 0 +817 0 0 0 +818 4.99602e-05 -0.065419 0 +819 2.38416e-06 -0.113015 0 +820 2.94445e-05 -0.0264435 0 +821 3.5454e-05 -0.0325816 0 +822 4.6881e-05 -0.0498568 0 +823 -1.93628e-05 -0.121158 0 +824 2.25062e-05 -0.0201164 0 +825 3.60405e-05 -0.0913996 0 +826 0 0 0 +827 3.95503e-05 -0.0875471 0 +828 3.19901e-05 -0.0950613 0 +829 6.85999e-06 -0.00689442 0 +830 4.02639e-05 -0.0385308 0 +831 4.92383e-05 -0.0604238 0 +832 4.24671e-05 -0.083504 0 +833 2.7457e-05 -0.0985322 0 +834 -3.40762e-06 -0.115339 0 +835 -3.27458e-05 -0.125254 0 +836 1.49883e-05 -0.0136004 0 +837 4.47563e-05 -0.0792702 0 +838 2.25242e-05 -0.101812 0 +839 0 0 0 +840 4.63867e-05 -0.0748459 0 +841 1.7283e-05 -0.104901 0 +842 4.36813e-05 -0.0442911 0 +843 -2.35535e-05 -0.122716 0 +844 4.77834e-05 -0.0552382 0 +845 -8.84617e-06 -0.117472 0 +846 7.31783e-06 -0.00689498 0 +847 2.97276e-05 -0.0264463 0 +848 4.73378e-05 -0.0702311 0 +849 1.18529e-05 -0.107799 0 +850 -4.41564e-05 -0.127408 0 +851 2.30074e-05 -0.0201185 0 +852 -3.95291e-05 -0.127116 0 +853 0 0 0 +854 3.53832e-05 -0.0325852 0 +855 -3.48361e-05 -0.126239 0 +856 1.55369e-05 -0.0136016 0 +857 4.75907e-05 -0.0654258 0 +858 6.36428e-06 -0.110506 0 +859 4.55899e-05 -0.0498622 0 +860 -1.37551e-05 -0.119413 0 +861 3.97427e-05 -0.0385351 0 +862 -2.68491e-05 -0.124083 0 +863 0 0 0 +864 7.70861e-06 -0.00689556 0 +865 4.7132e-05 -0.0604301 0 +866 9.68137e-07 -0.113021 0 +867 3.61474e-05 -0.0875545 0 +868 3.26224e-05 -0.091407 0 +869 2.33229e-05 -0.0201205 0 +870 3.91408e-05 -0.0835113 0 +871 2.86243e-05 -0.0950686 0 +872 2.97832e-05 -0.0264491 0 +873 4.26501e-05 -0.0442959 0 +874 -1.79891e-05 -0.121163 0 +875 1.59529e-05 -0.0136029 0 +876 4.15567e-05 -0.0792774 0 +877 2.4223e-05 -0.0985393 0 +878 4.59483e-05 -0.055244 0 +879 -4.17643e-06 -0.115345 0 +880 0 0 0 +881 3.50587e-05 -0.0325887 0 +882 4.3357e-05 -0.0748529 0 +883 1.95046e-05 -0.101819 0 +884 -2.92428e-05 -0.125259 0 +885 8.03059e-06 -0.00689617 0 +886 4.4512e-05 -0.0702378 0 +887 1.45698e-05 -0.104908 0 +888 3.89554e-05 -0.0385392 0 +889 -2.14435e-05 -0.122721 0 +890 4.40278e-05 -0.0498674 0 +891 -8.91501e-06 -0.117477 0 +892 4.49961e-05 -0.0654322 0 +893 9.53502e-06 -0.107805 0 +894 0 0 0 +895 2.34566e-05 -0.0201226 0 +896 -3.89851e-05 -0.127412 0 +897 1.62383e-05 -0.0136043 0 +898 -3.48952e-05 -0.12712 0 +899 2.96206e-05 -0.0264518 0 +900 -3.07979e-05 -0.126243 0 +901 8.28309e-06 -0.0068968 0 +902 4.47886e-05 -0.060436 0 +903 4.53064e-06 -0.110511 0 +904 4.1357e-05 -0.0443005 0 +905 -1.31001e-05 -0.119418 0 +906 3.44935e-05 -0.0325921 0 +907 -2.40677e-05 -0.124087 0 +908 0 0 0 +909 3.27004e-05 -0.0875611 0 +910 4.38698e-05 -0.0552494 0 +911 3.57332e-05 -0.0835179 0 +912 2.91964e-05 -0.0914135 0 +913 -3.05257e-07 -0.113026 0 +914 3.82438e-05 -0.079284 0 +915 2.52897e-05 -0.095075 0 +916 4.01842e-05 -0.0748593 0 +917 2.10538e-05 -0.0985454 0 +918 1.6394e-05 -0.0136056 0 +919 3.79217e-05 -0.0385431 0 +920 -1.66206e-05 -0.121167 0 +921 2.34148e-05 -0.0201246 0 +922 8.46622e-06 -0.00689744 0 +923 4.1519e-05 -0.070244 0 +924 1.65822e-05 -0.101825 0 +925 4.22219e-05 -0.0498724 0 +926 -4.8297e-06 -0.115349 0 +927 2.92498e-05 -0.0264546 0 +928 -2.58696e-05 -0.125262 0 +929 0 0 0 +930 4.22142e-05 -0.065438 0 +931 1.19746e-05 -0.104913 0 +932 3.3704e-05 -0.0325954 0 +933 3.98258e-05 -0.0443048 0 +934 -8.9094e-06 -0.117481 0 +935 -1.93946e-05 -0.122724 0 +936 4.22436e-05 -0.0604415 0 +937 7.34786e-06 -0.10781 0 +938 1.64251e-05 -0.0136069 0 +939 -3.35784e-05 -0.127415 0 +940 8.58073e-06 -0.00689809 0 +941 -3.02665e-05 -0.127123 0 +942 2.32046e-05 -0.0201266 0 +943 4.15804e-05 -0.0552545 0 +944 2.82453e-06 -0.110516 0 +945 -2.69024e-05 -0.126246 0 +946 0 0 0 +947 3.66619e-05 -0.0385469 0 +948 -1.24246e-05 -0.119421 0 +949 3.22804e-05 -0.0835237 0 +950 2.92398e-05 -0.0875669 0 +951 3.48532e-05 -0.0792897 0 +952 2.57914e-05 -0.0914191 0 +953 2.86839e-05 -0.0264572 0 +954 -2.139e-05 -0.124091 0 +955 3.69059e-05 -0.074865 0 +956 2.20062e-05 -0.0950804 0 +957 4.02018e-05 -0.049877 0 +958 -1.46845e-06 -0.11303 0 +959 3.83948e-05 -0.0702495 0 +960 1.7965e-05 -0.0985506 0 +961 8.62835e-06 -0.00689874 0 +962 3.2707e-05 -0.0325985 0 +963 3.92807e-05 -0.0654433 0 +964 1.376e-05 -0.10183 0 +965 -1.52835e-05 -0.12117 0 +966 1.63349e-05 -0.0136082 0 +967 0 0 0 +968 3.80828e-05 -0.044309 0 +969 -5.40335e-06 -0.115353 0 +970 2.28357e-05 -0.0201286 0 +971 3.95302e-05 -0.0604466 0 +972 9.49376e-06 -0.104917 0 +973 -2.26135e-05 -0.125265 0 +974 3.91116e-05 -0.0552592 0 +975 5.27602e-06 -0.107814 0 +976 3.5199e-05 -0.0385505 0 +977 -8.86746e-06 -0.117484 0 +978 2.7936e-05 -0.0264597 0 +979 -1.74254e-05 -0.122727 0 +980 8.61105e-06 -0.00689938 0 +981 -2.81398e-05 -0.127417 0 +982 0 0 0 +983 -2.56657e-05 -0.127126 0 +984 3.79961e-05 -0.0498813 0 +985 1.22335e-06 -0.110519 0 +986 2.88129e-05 -0.0835288 0 +987 1.61306e-05 -0.0136095 0 +988 3.14203e-05 -0.0792948 0 +989 2.57947e-05 -0.0875718 0 +990 -2.30922e-05 -0.126248 0 +991 3.35573e-05 -0.07487 0 +992 2.24283e-05 -0.0914239 0 +993 3.15221e-05 -0.0326016 0 +994 -1.17578e-05 -0.119424 0 +995 3.51761e-05 -0.0702545 0 +996 1.87904e-05 -0.0950849 0 +997 2.23177e-05 -0.0201305 0 +998 -1.88207e-05 -0.124093 0 +999 3.61538e-05 -0.0443128 0 +1000 -2.54924e-06 -0.113033 0 +1001 3.62307e-05 -0.0654481 0 +1002 1.49621e-05 -0.0985548 0 +1003 3.66832e-05 -0.0604511 0 +1004 1.10374e-05 -0.101834 0 +1005 2.7022e-05 -0.0264622 0 +1006 0 0 0 +1007 -1.40007e-05 -0.121172 0 +1008 8.53198e-06 -0.00690002 0 +1009 3.35554e-05 -0.0385539 0 +1010 -5.92911e-06 -0.115355 0 +1011 3.64956e-05 -0.0552635 0 +1012 7.11487e-06 -0.104921 0 +1013 1.58178e-05 -0.0136108 0 +1014 -1.94686e-05 -0.125267 0 +1015 3.5635e-05 -0.0498852 0 +1016 3.3e-06 -0.107817 0 +1017 3.01681e-05 -0.0326044 0 +1018 -8.81629e-06 -0.117486 0 +1019 2.16629e-05 -0.0201323 0 +1020 -1.55429e-05 -0.122729 0 +1021 2.79723e-05 -0.0792992 0 +1022 2.53569e-05 -0.0835331 0 +1023 3.01693e-05 -0.0748745 0 +1024 2.23844e-05 -0.087576 0 +1025 3.40662e-05 -0.0443164 0 +1026 -2.99067e-07 -0.110522 0 +1027 0 0 0 +1028 -2.26822e-05 -0.127419 0 +1029 3.18937e-05 -0.0702588 0 +1030 1.91233e-05 -0.0914278 0 +1031 -2.11053e-05 -0.127128 0 +1032 8.39414e-06 -0.00690064 0 +1033 -1.9376e-05 -0.12625 0 +1034 3.30962e-05 -0.0654524 0 +1035 1.56497e-05 -0.0950886 0 +1036 2.59572e-05 -0.0264645 0 +1037 -1.11244e-05 -0.119426 0 +1038 3.37331e-05 -0.0604552 0 +1039 1.20477e-05 -0.0985582 0 +1040 1.54053e-05 -0.013612 0 +1041 3.17556e-05 -0.038557 0 +1042 -3.57815e-06 -0.113035 0 +1043 -1.63541e-05 -0.124095 0 +1044 3.37626e-05 -0.0552674 0 +1045 8.40744e-06 -0.101837 0 +1046 2.08827e-05 -0.0201341 0 +1047 -1.27863e-05 -0.121174 0 +1048 2.86662e-05 -0.0326071 0 +1049 -6.43519e-06 -0.115357 0 +1050 0 0 0 +1051 3.31464e-05 -0.0498888 0 +1052 4.82583e-06 -0.104924 0 +1053 8.2018e-06 -0.00690125 0 +1054 -1.64243e-05 -0.125269 0 +1055 3.18457e-05 -0.0443197 0 +1056 1.40132e-06 -0.107819 0 +1057 2.47594e-05 -0.0264667 0 +1058 2.45353e-05 -0.0793029 0 +1059 -8.78257e-06 -0.117488 0 +1060 2.67692e-05 -0.0748782 0 +1061 2.19325e-05 -0.0835367 0 +1062 1.49005e-05 -0.0136132 0 +1063 -1.37535e-05 -0.12273 0 +1064 2.85781e-05 -0.0702626 0 +1065 1.90265e-05 -0.0875794 0 +1066 2.99075e-05 -0.0654562 0 +1067 1.5886e-05 -0.091431 0 +1068 2.98226e-05 -0.0385599 0 +1069 -1.76538e-06 -0.110524 0 +1070 -1.72709e-05 -0.12742 0 +1071 3.07111e-05 -0.0604589 0 +1072 1.25891e-05 -0.0950915 0 +1073 -1.6602e-05 -0.127129 0 +1074 0 0 0 +1075 -1.57403e-05 -0.126251 0 +1076 1.9991e-05 -0.0201357 0 +1077 -1.05417e-05 -0.119427 0 +1078 3.0942e-05 -0.0552709 0 +1079 9.2179e-06 -0.0985607 0 +1080 2.70364e-05 -0.0326096 0 +1081 -4.57824e-06 -0.113037 0 +1082 7.95874e-06 -0.00690184 0 +1083 -1.39918e-05 -0.124095 0 +1084 3.0559e-05 -0.0498921 0 +1085 5.86108e-06 -0.101839 0 +1086 1.43132e-05 -0.0136143 0 +1087 -1.16505e-05 -0.121175 0 +1088 2.34448e-05 -0.0264687 0 +1089 2.95189e-05 -0.0443227 0 +1090 2.6107e-06 -0.104925 0 +1091 -6.94549e-06 -0.115358 0 +1092 0 0 0 +1093 -1.34792e-05 -0.125269 0 +1094 2.33808e-05 -0.0748814 0 +1095 2.11287e-05 -0.079306 0 +1096 2.77807e-05 -0.0385626 0 +1097 -4.40303e-07 -0.107821 0 +1098 2.52537e-05 -0.0702659 0 +1099 1.85572e-05 -0.0835396 0 +1100 2.66916e-05 -0.0654594 0 +1101 1.57319e-05 -0.0875821 0 +1102 1.90003e-05 -0.0201373 0 +1103 -8.7853e-06 -0.117489 0 +1104 7.67003e-06 -0.0069024 0 +1105 2.76436e-05 -0.0604621 0 +1106 1.27238e-05 -0.0914334 0 +1107 -1.20609e-05 -0.122731 0 +1108 2.53e-05 -0.0326119 0 +1109 -3.19771e-06 -0.110525 0 +1110 2.80611e-05 -0.0552739 0 +1111 9.60905e-06 -0.0950936 0 +1112 -1.19143e-05 -0.12742 0 +1113 -1.2168e-05 -0.127129 0 +1114 2.78984e-05 -0.049895 0 +1115 6.46923e-06 -0.0985625 0 +1116 -1.21948e-05 -0.126251 0 +1117 1.36517e-05 -0.0136154 0 +1118 -1.00256e-05 -0.119427 0 +1119 2.20316e-05 -0.0264706 0 +1120 -5.57292e-06 -0.113037 0 +1121 0 0 0 +1122 -1.17319e-05 -0.124095 0 +1123 2.71101e-05 -0.0443253 0 +1124 3.3888e-06 -0.10184 0 +1125 2.56517e-05 -0.038565 0 +1126 4.56181e-07 -0.104927 0 +1127 7.33994e-06 -0.00690293 0 +1128 1.79252e-05 -0.0201387 0 +1129 -7.48005e-06 -0.115359 0 +1130 -1.06048e-05 -0.121174 0 +1131 2.00243e-05 -0.074884 0 +1132 2.19446e-05 -0.0702686 0 +1133 1.77706e-05 -0.0793084 0 +1134 2.34729e-05 -0.0654621 0 +1135 1.52435e-05 -0.0835418 0 +1136 2.34763e-05 -0.032614 0 +1137 -2.24101e-06 -0.107822 0 +1138 -1.06355e-05 -0.125269 0 +1139 2.4557e-05 -0.0604648 0 +1140 1.25099e-05 -0.0875841 0 +1141 2.51453e-05 -0.0552766 0 +1142 9.63987e-06 -0.0914351 0 +1143 1.29264e-05 -0.0136163 0 +1144 -8.84207e-06 -0.117488 0 +1145 0 0 0 +1146 -1.04721e-05 -0.12273 0 +1147 2.51903e-05 -0.0498975 0 +1148 6.70853e-06 -0.095095 0 +1149 2.05361e-05 -0.0264723 0 +1150 -4.61444e-06 -0.110525 0 +1151 2.46435e-05 -0.0443277 0 +1152 3.79479e-06 -0.0985636 0 +1153 -6.63259e-06 -0.127419 0 +1154 -7.81307e-06 -0.127128 0 +1155 6.97398e-06 -0.00690343 0 +1156 -8.74154e-06 -0.12625 0 +1157 -9.58931e-06 -0.119427 0 +1158 1.6778e-05 -0.0201401 0 +1159 -6.58002e-06 -0.113037 0 +1160 2.34584e-05 -0.0385671 0 +1161 9.79909e-07 -0.101841 0 +1162 -9.58286e-06 -0.124095 0 +1163 2.15858e-05 -0.0326158 0 +1164 -1.6518e-06 -0.104927 0 +1165 1.86697e-05 -0.0702707 0 +1166 1.67175e-05 -0.074886 0 +1167 1.21461e-05 -0.0136173 0 +1168 2.02732e-05 -0.0654644 0 +1169 1.44746e-05 -0.0793103 0 +1170 -8.05663e-06 -0.115358 0 +1171 0 0 0 +1172 -9.65833e-06 -0.121174 0 +1173 2.14734e-05 -0.0604671 0 +1174 1.20027e-05 -0.0835434 0 +1175 2.2218e-05 -0.0552788 0 +1176 9.36701e-06 -0.0875854 0 +1177 1.89756e-05 -0.0264739 0 +1178 -4.01733e-06 -0.107821 0 +1179 -7.9008e-06 -0.125267 0 +1180 2.2457e-05 -0.0498997 0 +1181 6.63738e-06 -0.0914362 0 +1182 6.5766e-06 -0.0069039 0 +1183 -8.96894e-06 -0.117487 0 +1184 2.21409e-05 -0.0443298 0 +1185 3.88614e-06 -0.0950957 0 +1186 -8.99641e-06 -0.122729 0 +1187 1.55733e-05 -0.0201413 0 +1188 -6.03246e-06 -0.110525 0 +1189 2.12208e-05 -0.038569 0 +1190 1.18999e-06 -0.0985639 0 +1191 -1.42165e-06 -0.127418 0 +1192 -3.5457e-06 -0.127126 0 +1193 0 0 0 +1194 -9.24707e-06 -0.119425 0 +1195 -5.39352e-06 -0.126249 0 +1196 1.13208e-05 -0.0136181 0 +1197 -7.61668e-06 -0.113036 0 +1198 1.96463e-05 -0.0326175 0 +1199 -1.37355e-06 -0.101841 0 +1200 -7.55166e-06 -0.124093 0 +1201 1.54474e-05 -0.0702723 0 +1202 1.7112e-05 -0.0654661 0 +1203 1.34751e-05 -0.0748875 0 +1204 1.84142e-05 -0.0604689 0 +1205 1.12534e-05 -0.0793115 0 +1206 1.73656e-05 -0.0264753 0 +1207 -3.72386e-06 -0.104926 0 +1208 1.93006e-05 -0.0552807 0 +1209 8.84304e-06 -0.0835444 0 +1210 6.15336e-06 -0.00690433 0 +1211 -8.69126e-06 -0.115357 0 +1212 -8.82584e-06 -0.121172 0 +1213 1.97206e-05 -0.0499015 0 +1214 6.30842e-06 -0.0875861 0 +1215 1.43228e-05 -0.0201424 0 +1216 -5.78145e-06 -0.107821 0 +1217 1.96234e-05 -0.0443315 0 +1218 3.71734e-06 -0.0914365 0 +1219 -5.28438e-06 -0.125265 0 +1220 0 0 0 +1221 1.89592e-05 -0.0385707 0 +1222 1.13966e-06 -0.0950957 0 +1223 -9.18045e-06 -0.117486 0 +1224 1.04591e-05 -0.0136189 0 +1225 -7.46546e-06 -0.110523 0 +1226 -7.64661e-06 -0.122727 0 +1227 1.76763e-05 -0.032619 0 +1228 -1.35071e-06 -0.0985635 0 +1229 3.70567e-06 -0.127415 0 +1230 6.27582e-07 -0.127124 0 +1231 -9.01379e-06 -0.119423 0 +1232 1.5722e-05 -0.0264766 0 +1233 -3.67984e-06 -0.10184 0 +1234 5.70861e-06 -0.00690473 0 +1235 -2.15603e-06 -0.126246 0 +1236 -8.69734e-06 -0.113035 0 +1237 1.40069e-05 -0.0654674 0 +1238 1.22931e-05 -0.0702735 0 +1239 1.53977e-05 -0.0604703 0 +1240 1.03111e-05 -0.0748884 0 +1241 1.64126e-05 -0.0552822 0 +1242 8.11779e-06 -0.0793122 0 +1243 -5.65408e-06 -0.12409 0 +1244 1.304e-05 -0.0201434 0 +1245 1.70003e-05 -0.049903 0 +1246 5.77334e-06 -0.0835448 0 +1247 -5.77005e-06 -0.104925 0 +1248 0 0 0 +1249 1.711e-05 -0.044333 0 +1250 3.33972e-06 -0.0875862 0 +1251 -9.39874e-06 -0.115355 0 +1252 -8.12043e-06 -0.121169 0 +1253 1.66911e-05 -0.038572 0 +1254 8.82769e-07 -0.0914362 0 +1255 9.57043e-06 -0.0136196 0 +1256 -7.54509e-06 -0.107819 0 +1257 -2.80167e-06 -0.125262 0 +1258 1.56917e-05 -0.0326202 0 +1259 -1.53056e-06 -0.095095 0 +1260 -9.49325e-06 -0.117483 0 +1261 5.24766e-06 -0.0069051 0 +1262 -8.92608e-06 -0.110521 0 +1263 -6.43871e-06 -0.122724 0 +1264 1.40589e-05 -0.0264776 0 +1265 -3.82947e-06 -0.0985625 0 +1266 1.0974e-05 -0.0654683 0 +1267 1.24416e-05 -0.0604713 0 +1268 9.22139e-06 -0.0702742 0 +1269 8.77e-06 -0.127412 0 +1270 1.17358e-05 -0.0201443 0 +1271 -5.94295e-06 -0.101839 0 +1272 4.69931e-06 -0.127121 0 +1273 1.35721e-05 -0.0552833 0 +1274 7.2376e-06 -0.0748889 0 +1275 0 0 0 +1276 -8.90587e-06 -0.11942 0 +1277 -9.8352e-06 -0.113032 0 +1278 9.51436e-07 -0.126243 0 +1279 1.43147e-05 -0.0499042 0 +1280 5.07794e-06 -0.0793124 0 +1281 1.46188e-05 -0.0443342 0 +1282 2.80089e-06 -0.0835446 0 +1283 -3.90416e-06 -0.124087 0 +1284 8.66286e-06 -0.0136202 0 +1285 -7.79647e-06 -0.104923 0 +1286 1.44341e-05 -0.0385732 0 +1287 4.65777e-07 -0.0875856 0 +1288 -1.0194e-05 -0.115352 0 +1289 -7.56243e-06 -0.121166 0 +1290 1.37089e-05 -0.0326213 0 +1291 -1.86379e-06 -0.0914354 0 +1292 4.77455e-06 -0.00690542 0 +1293 -9.31586e-06 -0.107817 0 +1294 1.23902e-05 -0.0264786 0 +1295 -4.12446e-06 -0.0950937 0 +1296 -4.66924e-07 -0.125259 0 +1297 -9.92215e-06 -0.11748 0 +1298 0 0 0 +1299 -1.04236e-05 -0.110518 0 +1300 1.0422e-05 -0.020145 0 +1301 -6.24778e-06 -0.0985607 0 +1302 -5.39216e-06 -0.12272 0 +1303 9.56196e-06 -0.0604719 0 +1304 8.02854e-06 -0.0654687 0 +1305 1.07959e-05 -0.055284 0 +1306 6.24617e-06 -0.0702743 0 +1307 1.16806e-05 -0.0499051 0 +1308 4.26717e-06 -0.0748888 0 +1309 7.74473e-06 -0.0136207 0 +1310 -8.16652e-06 -0.101836 0 +1311 1.21664e-05 -0.0443351 0 +1312 2.14473e-06 -0.079312 0 +1313 1.37503e-05 -0.127408 0 +1314 8.65991e-06 -0.127117 0 +1315 -1.1042e-05 -0.113029 0 +1316 -8.94199e-06 -0.119416 0 +1317 3.9236e-06 -0.126239 0 +1318 1.22038e-05 -0.0385741 0 +1319 -6.5141e-08 -0.0835439 0 +1320 4.29411e-06 -0.00690571 0 +1321 -9.80791e-06 -0.104921 0 +1322 -2.32565e-06 -0.124083 0 +1323 1.17419e-05 -0.0326222 0 +1324 -2.30566e-06 -0.0875845 0 +1325 -1.10901e-05 -0.115348 0 +1326 1.07286e-05 -0.0264793 0 +1327 -4.51657e-06 -0.0914338 0 +1328 -7.16999e-06 -0.121162 0 +1329 0 0 0 +1330 -1.11003e-05 -0.107813 0 +1331 9.10849e-06 -0.0201457 0 +1332 -6.63719e-06 -0.0950918 0 +1333 1.69767e-06 -0.125254 0 +1334 -1.04852e-05 -0.117476 0 +1335 6.82339e-06 -0.0136212 0 +1336 -8.60278e-06 -0.0985583 0 +1337 -1.19663e-05 -0.110515 0 +1338 6.77393e-06 -0.0604722 0 +1339 8.0998e-06 -0.0552844 0 +1340 5.18482e-06 -0.0654687 0 +1341 9.11386e-06 -0.0499056 0 +1342 3.38056e-06 -0.0702741 0 +1343 -4.53047e-06 -0.122715 0 +1344 9.76854e-06 -0.0443357 0 +1345 1.41176e-06 -0.0748882 0 +1346 1.00153e-05 -0.0385747 0 +1347 -6.71577e-07 -0.0793111 0 +1348 3.80998e-06 -0.00690596 0 +1349 -1.03484e-05 -0.101834 0 +1350 -1.23277e-05 -0.113025 0 +1351 1.8676e-05 -0.127403 0 +1352 9.80493e-06 -0.0326228 0 +1353 -2.81548e-06 -0.0835427 0 +1354 -9.14148e-06 -0.119412 0 +1355 1.25063e-05 -0.127111 0 +1356 6.72961e-06 -0.126234 0 +1357 9.08619e-06 -0.02648 0 +1358 -4.96721e-06 -0.0875829 0 +1359 0 0 0 +1360 -1.18042e-05 -0.104917 0 +1361 -9.40176e-07 -0.124078 0 +1362 7.80567e-06 -0.0201462 0 +1363 -7.06866e-06 -0.0914317 0 +1364 -1.21011e-05 -0.115343 0 +1365 -6.9699e-06 -0.121157 0 +1366 -1.28996e-05 -0.10781 0 +1367 5.90606e-06 -0.0136216 0 +1368 -9.06376e-06 -0.0950892 0 +1369 5.49892e-06 -0.0552845 0 +1370 4.09277e-06 -0.060472 0 +1371 6.62987e-06 -0.0499058 0 +1372 2.45746e-06 -0.0654683 0 +1373 3.66646e-06 -0.125248 0 +1374 -1.11979e-05 -0.117471 0 +1375 3.32643e-06 -0.00690617 0 +1376 7.43988e-06 -0.044336 0 +1377 6.38957e-07 -0.0702734 0 +1378 -1.08896e-05 -0.0985553 0 +1379 -1.35578e-05 -0.11051 0 +1380 7.88255e-06 -0.0385752 0 +1381 -1.31528e-06 -0.0748872 0 +1382 -3.88077e-06 -0.12271 0 +1383 7.91037e-06 -0.0326233 0 +1384 -3.35765e-06 -0.0793097 0 +1385 0 0 0 +1386 -1.24856e-05 -0.10183 0 +1387 7.4742e-06 -0.0264804 0 +1388 -5.43808e-06 -0.0835409 0 +1389 -1.36995e-05 -0.11302 0 +1390 2.35139e-05 -0.127397 0 +1391 -9.52696e-06 -0.119406 0 +1392 1.62207e-05 -0.127105 0 +1393 6.52213e-06 -0.0201466 0 +1394 9.36187e-06 -0.126228 0 +1395 -7.50639e-06 -0.0875807 0 +1396 -1.37828e-05 -0.104913 0 +1397 2.17902e-07 -0.124072 0 +1398 4.99938e-06 -0.0136219 0 +1399 -9.50898e-06 -0.0914291 0 +1400 -1.32372e-05 -0.115338 0 +1401 -1.47136e-05 -0.107805 0 +1402 -6.98548e-06 -0.12115 0 +1403 2.84665e-06 -0.00690635 0 +1404 -1.13922e-05 -0.095086 0 +1405 3.00825e-06 -0.0552842 0 +1406 4.24305e-06 -0.0499058 0 +1407 1.53288e-06 -0.0604715 0 +1408 5.19484e-06 -0.0443362 0 +1409 -1.38932e-07 -0.0654675 0 +1410 5.81896e-06 -0.0385754 0 +1411 -1.965e-06 -0.0702723 0 +1412 0 0 0 +1413 -1.30977e-05 -0.0985516 0 +1414 5.41103e-06 -0.125242 0 +1415 6.07094e-06 -0.0326236 0 +1416 -3.89997e-06 -0.0748857 0 +1417 -1.20782e-05 -0.117464 0 +1418 -1.51999e-05 -0.110505 0 +1419 5.90329e-06 -0.0264807 0 +1420 -5.90071e-06 -0.0793078 0 +1421 -3.47529e-06 -0.122703 0 +1422 -1.45669e-05 -0.101826 0 +1423 5.26721e-06 -0.0201469 0 +1424 -7.91933e-06 -0.0835386 0 +1425 -1.51621e-05 -0.113014 0 +1426 -1.01195e-05 -0.1194 0 +1427 4.10955e-06 -0.0136221 0 +1428 -9.91087e-06 -0.0875779 0 +1429 2.83144e-05 -0.12739 0 +1430 1.97911e-05 -0.127098 0 +1431 1.17743e-05 -0.12622 0 +1432 -1.57344e-05 -0.104908 0 +1433 2.37441e-06 -0.00690649 0 +1434 -1.18237e-05 -0.0914258 0 +1435 1.11825e-06 -0.124064 0 +1436 -1.45086e-05 -0.115332 0 +1437 1.9683e-06 -0.0499054 0 +1438 6.42591e-07 -0.0552837 0 +1439 3.04707e-06 -0.044336 0 +1440 -8.89935e-07 -0.0604707 0 +1441 -1.65332e-05 -0.1078 0 +1442 0 0 0 +1443 -1.36101e-05 -0.0950822 0 +1444 -7.25015e-06 -0.121143 0 +1445 3.83772e-06 -0.0385754 0 +1446 -2.58897e-06 -0.0654664 0 +1447 4.29802e-06 -0.0326237 0 +1448 -4.41478e-06 -0.0702708 0 +1449 4.38385e-06 -0.0264809 0 +1450 -6.32639e-06 -0.0748838 0 +1451 -1.5213e-05 -0.0985472 0 +1452 6.88968e-06 -0.125234 0 +1453 -1.31396e-05 -0.117457 0 +1454 -1.68865e-05 -0.110499 0 +1455 4.0486e-06 -0.0201471 0 +1456 -8.28316e-06 -0.0793055 0 +1457 -3.34997e-06 -0.122695 0 +1458 3.2427e-06 -0.0136223 0 +1459 -1.02423e-05 -0.0835358 0 +1460 -1.65797e-05 -0.101821 0 +1461 1.91253e-06 -0.0069066 0 +1462 -1.21612e-05 -0.0875746 0 +1463 -1.67133e-05 -0.113007 0 +1464 -1.09438e-05 -0.119392 0 +1465 3.30178e-05 -0.127382 0 +1466 2.31919e-05 -0.12709 0 +1467 -1.7645e-05 -0.104903 0 +1468 1.39523e-05 -0.126212 0 +1469 0 0 0 +1470 -1.39942e-05 -0.091422 0 +1471 1.71046e-06 -0.124056 0 +1472 -1.80468e-07 -0.0499049 0 +1473 1.01048e-06 -0.0443356 0 +1474 -1.58283e-06 -0.0552828 0 +1475 1.95113e-06 -0.0385752 0 +1476 -3.16079e-06 -0.0604695 0 +1477 -1.59174e-05 -0.115324 0 +1478 2.6034e-06 -0.0326237 0 +1479 -4.87641e-06 -0.0654649 0 +1480 -1.56954e-05 -0.0950778 0 +1481 -1.83472e-05 -0.107793 0 +1482 2.92544e-06 -0.026481 0 +1483 -6.69466e-06 -0.0702689 0 +1484 -7.79157e-06 -0.121135 0 +1485 2.87481e-06 -0.0201472 0 +1486 -8.57692e-06 -0.0748815 0 +1487 -1.72141e-05 -0.0985422 0 +1488 2.40422e-06 -0.0136224 0 +1489 -1.04879e-05 -0.0793027 0 +1490 -1.86072e-05 -0.110492 0 +1491 -1.43945e-05 -0.117449 0 +1492 8.05979e-06 -0.125225 0 +1493 1.4644e-06 -0.00690668 0 +1494 -1.23871e-05 -0.0835325 0 +1495 -1.84991e-05 -0.101815 0 +1496 -3.54833e-06 -0.122686 0 +1497 0 0 0 +1498 -1.42382e-05 -0.0875708 0 +1499 -1.83465e-05 -0.113 0 +1500 -1.20182e-05 -0.119383 0 +1501 3.76976e-05 -0.127373 0 +1502 -1.94912e-05 -0.104896 0 +1503 2.64e-05 -0.127081 0 +1504 -9.01556e-07 -0.044335 0 +1505 -2.18799e-06 -0.049904 0 +1506 -1.59971e-05 -0.0914176 0 +1507 1.58213e-05 -0.126203 0 +1508 1.72213e-07 -0.0385748 0 +1509 -3.65269e-06 -0.0552817 0 +1510 9.97883e-07 -0.0326234 0 +1511 -5.26244e-06 -0.060468 0 +1512 1.53804e-06 -0.0264809 0 +1513 1.95162e-06 -0.124046 0 +1514 -6.98406e-06 -0.065463 0 +1515 -1.74633e-05 -0.115316 0 +1516 -1.76255e-05 -0.0950729 0 +1517 1.75297e-06 -0.0201472 0 +1518 -8.78501e-06 -0.0702666 0 +1519 -2.01292e-05 -0.107786 0 +1520 -8.64746e-06 -0.121125 0 +1521 1.59995e-06 -0.0136225 0 +1522 -1.0632e-05 -0.0748788 0 +1523 -1.90736e-05 -0.0985366 0 +1524 1.03258e-06 -0.00690672 0 +1525 -1.2492e-05 -0.0792995 0 +1526 -2.03384e-05 -0.110485 0 +1527 -1.58483e-05 -0.11744 0 +1528 8.85562e-06 -0.125215 0 +1529 0 0 0 +1530 -1.43307e-05 -0.0835288 0 +1531 -2.02987e-05 -0.101809 0 +1532 -4.11502e-06 -0.122676 0 +1533 -1.61137e-05 -0.0875665 0 +1534 -2.00391e-05 -0.112991 0 +1535 -2.67503e-06 -0.0443342 0 +1536 -1.48716e-06 -0.0385743 0 +1537 -4.04015e-06 -0.0499029 0 +1538 -5.0708e-07 -0.0326231 0 +1539 -5.55081e-06 -0.0552803 0 +1540 -1.33631e-05 -0.119373 0 +1541 -2.12414e-05 -0.104889 0 +1542 -1.78041e-05 -0.0914127 0 +1543 4.2255e-05 -0.127362 0 +1544 2.30585e-07 -0.0264807 0 +1545 -7.17873e-06 -0.0604663 0 +1546 2.93686e-05 -0.12707 0 +1547 1.73553e-05 -0.126192 0 +1548 6.91148e-07 -0.0201471 0 +1549 -8.89328e-06 -0.0654609 0 +1550 8.34767e-07 -0.0136224 0 +1551 1.76871e-06 -0.124036 0 +1552 -1.06672e-05 -0.070264 0 +1553 -1.93653e-05 -0.0950673 0 +1554 -1.91287e-05 -0.115306 0 +1555 -2.18499e-05 -0.107778 0 +1556 6.20216e-07 -0.00690673 0 +1557 -1.24695e-05 -0.0748757 0 +1558 -9.84567e-06 -0.121115 0 +1559 0 0 0 +1560 -1.42732e-05 -0.0792959 0 +1561 -2.07559e-05 -0.0985304 0 +1562 -2.2047e-05 -0.110476 0 +1563 -1.60458e-05 -0.0835246 0 +1564 -1.74933e-05 -0.11743 0 +1565 9.21165e-06 -0.125203 0 +1566 -2.19344e-05 -0.101802 0 +1567 -5.10513e-06 -0.122665 0 +1568 -1.776e-05 -0.0875618 0 +1569 -3.0139e-06 -0.0385735 0 +1570 -4.29651e-06 -0.0443332 0 +1571 -1.90093e-06 -0.0326226 0 +1572 -5.72112e-06 -0.0499016 0 +1573 -9.87055e-07 -0.0264803 0 +1574 -7.26113e-06 -0.0552786 0 +1575 -2.17625e-05 -0.112982 0 +1576 -3.03796e-07 -0.0201469 0 +1577 -8.89088e-06 -0.0604642 0 +1578 -1.93806e-05 -0.0914073 0 +1579 -2.28511e-05 -0.104882 0 +1580 -1.49809e-05 -0.119362 0 +1581 1.14411e-07 -0.0136224 0 +1582 -1.0585e-05 -0.0654584 0 +1583 4.68017e-05 -0.12735 0 +1584 3.20526e-05 -0.127058 0 +1585 1.84308e-05 -0.126179 0 +1586 2.29749e-07 -0.00690671 0 +1587 -1.23185e-05 -0.0702611 0 +1588 -2.08794e-05 -0.0950613 0 +1589 1.10262e-06 -0.124023 0 +1590 0 0 0 +1591 -1.40661e-05 -0.0748723 0 +1592 -2.08869e-05 -0.115296 0 +1593 -2.34548e-05 -0.10777 0 +1594 -1.14161e-05 -0.121103 0 +1595 -1.58028e-05 -0.079292 0 +1596 -2.22162e-05 -0.0985235 0 +1597 -1.75027e-05 -0.0835201 0 +1598 -2.36794e-05 -0.110466 0 +1599 -1.93119e-05 -0.117418 0 +1600 9.02202e-06 -0.12519 0 +1601 -4.3963e-06 -0.0385726 0 +1602 -2.33604e-05 -0.101794 0 +1603 -3.17239e-06 -0.0326219 0 +1604 -5.7518e-06 -0.044332 0 +1605 -2.10631e-06 -0.0264799 0 +1606 -7.21646e-06 -0.0499001 0 +1607 -1.914e-05 -0.0875566 0 +1608 -1.22402e-06 -0.0201467 0 +1609 -8.76656e-06 -0.0552767 0 +1610 -6.56455e-06 -0.122651 0 +1611 -5.5656e-07 -0.0136222 0 +1612 -1.03815e-05 -0.0604619 0 +1613 -2.34542e-05 -0.112971 0 +1614 -1.35797e-07 -0.00690666 0 +1615 -1.20384e-05 -0.0654557 0 +1616 -2.06875e-05 -0.0914015 0 +1617 -2.42624e-05 -0.104873 0 +1618 -1.68691e-05 -0.119349 0 +1619 0 0 0 +1620 5.11723e-05 -0.127336 0 +1621 -1.37176e-05 -0.0702579 0 +1622 3.43634e-05 -0.127044 0 +1623 1.89969e-05 -0.126165 0 +1624 -2.2118e-05 -0.0950547 0 +1625 -1.53959e-05 -0.0748686 0 +1626 -1.47355e-07 -0.124009 0 +1627 -2.26797e-05 -0.115284 0 +1628 -2.48862e-05 -0.10776 0 +1629 -1.70538e-05 -0.0792877 0 +1630 -1.33717e-05 -0.121089 0 +1631 -2.34018e-05 -0.0985162 0 +1632 -1.86675e-05 -0.0835152 0 +1633 -4.31116e-06 -0.0326211 0 +1634 -5.62147e-06 -0.0385716 0 +1635 -2.51634e-05 -0.110456 0 +1636 -3.11747e-06 -0.0264794 0 +1637 -7.02766e-06 -0.0443307 0 +1638 -2.12447e-05 -0.117405 0 +1639 -2.06288e-06 -0.0201463 0 +1640 -8.51031e-06 -0.0498984 0 +1641 8.18642e-06 -0.125175 0 +1642 -2.45086e-05 -0.101786 0 +1643 -1.17241e-06 -0.013622 0 +1644 -1.00509e-05 -0.0552746 0 +1645 -2.02177e-05 -0.0875511 0 +1646 -4.74047e-07 -0.00690659 0 +1647 -1.16312e-05 -0.0604594 0 +1648 -8.54837e-06 -0.122636 0 +1649 0 0 0 +1650 -1.32336e-05 -0.0654527 0 +1651 -2.50447e-05 -0.112959 0 +1652 -2.16788e-05 -0.0913953 0 +1653 -2.54035e-05 -0.104864 0 +1654 -1.48401e-05 -0.0702545 0 +1655 -1.89811e-05 -0.119335 0 +1656 5.55525e-05 -0.127319 0 +1657 3.62084e-05 -0.127027 0 +1658 1.88397e-05 -0.126149 0 +1659 -1.64331e-05 -0.0748646 0 +1660 -2.3032e-05 -0.0950477 0 +1661 -2.05443e-06 -0.123993 0 +1662 -2.60496e-05 -0.10775 0 +1663 -2.44236e-05 -0.115271 0 +1664 -1.79943e-05 -0.0792832 0 +1665 -2.42487e-05 -0.0985084 0 +1666 -1.56922e-05 -0.121073 0 +1667 -5.30638e-06 -0.0326202 0 +1668 -4.01236e-06 -0.0264787 0 +1669 -6.67815e-06 -0.0385704 0 +1670 -1.95061e-05 -0.0835101 0 +1671 -2.81279e-06 -0.0201459 0 +1672 -8.11035e-06 -0.0443292 0 +1673 -1.72886e-06 -0.0136218 0 +1674 -9.58857e-06 -0.0498965 0 +1675 -2.64001e-05 -0.110444 0 +1676 -7.82051e-07 -0.00690649 0 +1677 -1.10972e-05 -0.0552724 0 +1678 -2.32182e-05 -0.117391 0 +1679 -2.53107e-05 -0.101777 0 +1680 -2.09496e-05 -0.0875453 0 +1681 6.53402e-06 -0.125157 0 +1682 0 0 0 +1683 -1.26225e-05 -0.0604568 0 +1684 -1.41494e-05 -0.0654496 0 +1685 -1.10673e-05 -0.122619 0 +1686 -2.23072e-05 -0.0913887 0 +1687 -2.64038e-05 -0.112947 0 +1688 -1.56638e-05 -0.0702508 0 +1689 -2.61833e-05 -0.104854 0 +1690 -2.12418e-05 -0.119319 0 +1691 -1.71503e-05 -0.0748604 0 +1692 5.96516e-05 -0.127301 0 +1693 3.74032e-05 -0.127009 0 +1694 -2.35597e-05 -0.0950404 0 +1695 1.78545e-05 -0.12613 0 +1696 -4.72535e-06 -0.123974 0 +1697 -1.85946e-05 -0.0792784 0 +1698 -2.68488e-05 -0.107739 0 +1699 -2.59853e-05 -0.115257 0 +1700 -4.78188e-06 -0.026478 0 +1701 -6.1486e-06 -0.0326193 0 +1702 -3.46749e-06 -0.0201454 0 +1703 -7.55456e-06 -0.0385691 0 +1704 -2.46893e-05 -0.0985003 0 +1705 -2.22032e-06 -0.0136215 0 +1706 -8.98783e-06 -0.0443276 0 +1707 -1.83284e-05 -0.121056 0 +1708 -1.99809e-05 -0.0835047 0 +1709 -1.05751e-06 -0.00690637 0 +1710 -1.04369e-05 -0.0498945 0 +1711 0 0 0 +1712 -1.18908e-05 -0.05527 0 +1713 -2.72592e-05 -0.110432 0 +1714 -1.3338e-05 -0.0604539 0 +1715 -2.50607e-05 -0.117376 0 +1716 -2.12947e-05 -0.0875392 0 +1717 -2.56761e-05 -0.101768 0 +1718 3.9295e-06 -0.125137 0 +1719 -1.47673e-05 -0.0654463 0 +1720 -1.41159e-05 -0.1226 0 +1721 -2.25197e-05 -0.091382 0 +1722 -1.61663e-05 -0.070247 0 +1723 -2.73957e-05 -0.112933 0 +1724 -2.65023e-05 -0.104844 0 +1725 -2.34843e-05 -0.119302 0 +1726 -1.75234e-05 -0.0748561 0 +1727 -2.36423e-05 -0.0950329 0 +1728 6.38365e-05 -0.127279 0 +1729 3.77387e-05 -0.126987 0 +1730 1.565e-05 -0.126108 0 +1731 -1.8825e-05 -0.0792735 0 +1732 -5.41879e-06 -0.0264772 0 +1733 -4.0201e-06 -0.0201449 0 +1734 -6.82824e-06 -0.0326182 0 +1735 -2.71465e-05 -0.107728 0 +1736 -2.64293e-06 -0.0136212 0 +1737 -8.24088e-06 -0.0385677 0 +1738 -8.20896e-06 -0.123952 0 +1739 -2.71786e-05 -0.115242 0 +1740 -1.29763e-06 -0.00690623 0 +1741 -9.64827e-06 -0.0443258 0 +1742 -2.46457e-05 -0.0984919 0 +1743 0 0 0 +1744 -1.10431e-05 -0.0498924 0 +1745 -2.00591e-05 -0.0834992 0 +1746 -2.1087e-05 -0.121036 0 +1747 -1.24173e-05 -0.0552675 0 +1748 -1.37623e-05 -0.060451 0 +1749 -2.75892e-05 -0.11042 0 +1750 -2.12111e-05 -0.0875331 0 +1751 -2.55177e-05 -0.101759 0 +1752 -2.65844e-05 -0.117359 0 +1753 -1.50694e-05 -0.0654429 0 +1754 1.30167e-07 -0.125113 0 +1755 -1.6328e-05 -0.0702432 0 +1756 -2.22695e-05 -0.0913752 0 +1757 -1.75382e-05 -0.122578 0 +1758 -2.78033e-05 -0.112919 0 +1759 -2.62416e-05 -0.104834 0 +1760 -1.75287e-05 -0.0748517 0 +1761 -2.54544e-05 -0.119283 0 +1762 -2.32187e-05 -0.0950253 0 +1763 -4.46525e-06 -0.0201443 0 +1764 -5.91549e-06 -0.0264764 0 +1765 -2.99162e-06 -0.0136209 0 +1766 -7.33774e-06 -0.0326171 0 +1767 6.75333e-05 -0.127254 0 +1768 3.6773e-05 -0.126961 0 +1769 -1.50033e-06 -0.00690607 0 +1770 -8.72803e-06 -0.0385663 0 +1771 -1.86587e-05 -0.0792686 0 +1772 1.20092e-05 -0.126082 0 +1773 0 0 0 +1774 -1.00826e-05 -0.044324 0 +1775 -2.68088e-05 -0.107717 0 +1776 -2.77629e-05 -0.115226 0 +1777 -1.24412e-05 -0.123928 0 +1778 -1.13969e-05 -0.0498903 0 +1779 -2.40488e-05 -0.0984835 0 +1780 -1.97078e-05 -0.0834937 0 +1781 -1.26661e-05 -0.0552649 0 +1782 -2.37318e-05 -0.121014 0 +1783 -1.38836e-05 -0.060448 0 +1784 -2.72009e-05 -0.110407 0 +1785 -2.06612e-05 -0.087527 0 +1786 -1.50429e-05 -0.0654395 0 +1787 -2.47427e-05 -0.10175 0 +1788 -2.74318e-05 -0.117341 0 +1789 -4.89884e-06 -0.125085 0 +1790 -1.61345e-05 -0.0702393 0 +1791 -2.1509e-05 -0.0913684 0 +1792 -2.10451e-05 -0.122553 0 +1793 -2.74124e-05 -0.112905 0 +1794 -2.52941e-05 -0.104823 0 +1795 -1.71501e-05 -0.0748474 0 +1796 -4.79755e-06 -0.0201437 0 +1797 -3.26339e-06 -0.0136205 0 +1798 -6.26661e-06 -0.0264755 0 +1799 -1.66321e-06 -0.0069059 0 +1800 -7.67027e-06 -0.0326159 0 +1801 -2.67593e-05 -0.119262 0 +1802 0 0 0 +1803 -9.00927e-06 -0.0385648 0 +1804 -2.22339e-05 -0.0950178 0 +1805 -1.02833e-05 -0.0443222 0 +1806 -1.80771e-05 -0.0792637 0 +1807 7.15661e-05 -0.127223 0 +1808 3.39671e-05 -0.12693 0 +1809 6.28727e-06 -0.126051 0 +1810 -1.14905e-05 -0.0498881 0 +1811 -2.56861e-05 -0.107705 0 +1812 -2.74208e-05 -0.11521 0 +1813 -1.72399e-05 -0.123899 0 +1814 -1.26289e-05 -0.0552624 0 +1815 -1.89056e-05 -0.0834883 0 +1816 -2.28275e-05 -0.0984752 0 +1817 -1.36929e-05 -0.0604451 0 +1818 -2.56647e-05 -0.120991 0 +1819 -1.96198e-05 -0.087521 0 +1820 -1.46783e-05 -0.0654361 0 +1821 -2.59199e-05 -0.110394 0 +1822 -2.32677e-05 -0.10174 0 +1823 -2.72432e-05 -0.117322 0 +1824 -1.55747e-05 -0.0702355 0 +1825 -1.12164e-05 -0.125052 0 +1826 -2.02086e-05 -0.0913618 0 +1827 -3.45433e-06 -0.0136201 0 +1828 -5.01338e-06 -0.0201431 0 +1829 -2.39681e-05 -0.122526 0 +1830 -1.78463e-06 -0.00690572 0 +1831 -6.46745e-06 -0.0264746 0 +1832 -1.63757e-05 -0.0748431 0 +1833 0 0 0 +1834 -7.8217e-06 -0.0326147 0 +1835 -2.35489e-05 -0.104813 0 +1836 -2.59679e-05 -0.112891 0 +1837 -9.08037e-06 -0.0385633 0 +1838 -1.02465e-05 -0.0443204 0 +1839 -2.06527e-05 -0.0950106 0 +1840 -2.68307e-05 -0.119241 0 +1841 -1.7066e-05 -0.079259 0 +1842 -1.13209e-05 -0.0498859 0 +1843 7.44863e-05 -0.127185 0 +1844 2.81135e-05 -0.126891 0 +1845 -1.75719e-06 -0.126012 0 +1846 -2.36445e-05 -0.107694 0 +1847 -1.2303e-05 -0.0552598 0 +1848 -2.58515e-05 -0.115194 0 +1849 -1.76373e-05 -0.0834831 0 +1850 -2.15381e-05 -0.123867 0 +1851 -2.09396e-05 -0.0984673 0 +1852 -1.31889e-05 -0.0604422 0 +1853 -2.62603e-05 -0.120966 0 +1854 -1.3974e-05 -0.0654328 0 +1855 -1.80679e-05 -0.0875153 0 +1856 -2.35537e-05 -0.110382 0 +1857 -2.10423e-05 -0.101732 0 +1858 -1.46493e-05 -0.0702318 0 +1859 -3.5629e-06 -0.0136197 0 +1860 -1.86296e-06 -0.00690553 0 +1861 -5.10994e-06 -0.0201424 0 +1862 -2.52536e-05 -0.117202 0 +1863 -1.7866e-05 -0.125014 0 +1864 -1.83488e-05 -0.0913556 0 +1865 0 0 0 +1866 -6.51579e-06 -0.0264737 0 +1867 -7.78984e-06 -0.0326135 0 +1868 -1.52059e-05 -0.0748391 0 +1869 -2.52437e-05 -0.122497 0 +1870 -8.93977e-06 -0.0385618 0 +1871 -2.09546e-05 -0.104804 0 +1872 -2.32425e-05 -0.112877 0 +1873 -9.9719e-06 -0.0443186 0 +1874 -1.84498e-05 -0.0950039 0 +1875 -1.56294e-05 -0.0792546 0 +1876 -1.0888e-05 -0.0498838 0 +1877 -2.47913e-05 -0.119128 0 +1878 7.66481e-05 -0.127133 0 +1879 -1.16901e-05 -0.0552574 0 +1880 1.78498e-05 -0.12684 0 +1881 -1.22025e-05 -0.125966 0 +1882 -1.59066e-05 -0.0834783 0 +1883 -1.83601e-05 -0.0984601 0 +1884 -1.23733e-05 -0.0604394 0 +1885 -2.41422e-05 -0.123833 0 +1886 -2.22897e-05 -0.115068 0 +1887 -1.29352e-05 -0.0654297 0 +1888 -2.44526e-05 -0.120942 0 +1889 -1.60157e-05 -0.0875101 0 +1890 -1.9572e-05 -0.107657 0 +1891 -1.80317e-05 -0.101724 0 +1892 -1.89737e-06 -0.00690533 0 +1893 -3.58718e-06 -0.0136193 0 +1894 -1.33631e-05 -0.0702284 0 +1895 0 0 0 +1896 -5.08641e-06 -0.0201418 0 +1897 -6.41136e-06 -0.0264728 0 +1898 -7.57572e-06 -0.0326123 0 +1899 -1.59402e-05 -0.0913501 0 +1900 -2.28015e-05 -0.124969 0 +1901 -8.59045e-06 -0.0385604 0 +1902 -1.36506e-05 -0.0748354 0 +1903 -2.08401e-05 -0.117083 0 +1904 -1.88061e-05 -0.110346 0 +1905 -9.46362e-06 -0.0443168 0 +1906 -2.37924e-05 -0.122468 0 +1907 -1.01992e-05 -0.0498818 0 +1908 -1.88399e-05 -0.112956 0 +1909 -1.37771e-05 -0.0792506 0 +1910 -1.54335e-05 -0.0951382 0 +1911 -1.0799e-05 -0.0552551 0 +1912 -2.02581e-05 -0.119109 0 +1913 7.23476e-05 -0.127061 0 +1914 -1.63025e-05 -0.104768 0 +1915 1.39412e-06 -0.126771 0 +1916 -2.3297e-05 -0.125906 0 +1917 -1.3732e-05 -0.083474 0 +1918 -1.12599e-05 -0.0604368 0 +1919 -1.48582e-05 -0.0985864 0 +1920 -1.1577e-05 -0.0654269 0 +1921 -1.69641e-05 -0.115139 0 +1922 -1.34819e-05 -0.0875056 0 +1923 -1.92549e-05 -0.12092 0 +1924 -1.88746e-06 -0.00690514 0 +1925 0 0 0 +1926 -3.52784e-06 -0.0136189 0 +1927 -4.94381e-06 -0.0201411 0 +1928 -6.15655e-06 -0.0264719 0 +1929 -1.17387e-05 -0.0702253 0 +1930 -1.42983e-05 -0.101718 0 +1931 -7.18371e-06 -0.0326112 0 +1932 -8.03818e-06 -0.038559 0 +1933 -1.17342e-05 -0.0748321 0 +1934 -1.27916e-05 -0.0914932 0 +1935 -1.38478e-05 -0.107623 0 +1936 -8.73092e-06 -0.0443152 0 +1937 -1.95901e-05 -0.123795 0 +1938 -9.26523e-06 -0.0498799 0 +1939 -1.34492e-05 -0.110435 0 +1940 -1.1545e-05 -0.0792471 0 +1941 -9.64556e-06 -0.055253 0 +1942 -1.29077e-05 -0.113037 0 +1943 -1.17513e-05 -0.0952733 0 +1944 -1.17759e-05 -0.104762 0 +1945 -9.86591e-06 -0.0604345 0 +1946 4.62563e-05 -0.126966 0 +1947 -1.11533e-05 -0.0834703 0 +1948 -9.07224e-07 -0.126755 0 +1949 -2.08247e-05 -0.125984 0 +1950 -1.68837e-05 -0.124919 0 +1951 -1.16564e-05 -0.116555 0 +1952 -1.09698e-05 -0.0985816 0 +1953 -9.9243e-06 -0.0654244 0 +1954 0 0 0 +1955 -1.83357e-06 -0.00690495 0 +1956 -3.38578e-06 -0.0136185 0 +1957 -1.21628e-05 -0.122452 0 +1958 -4.68511e-06 -0.0201405 0 +1959 -1.05306e-05 -0.0875018 0 +1960 -5.75691e-06 -0.0264711 0 +1961 -1.02257e-05 -0.120671 0 +1962 -9.8034e-06 -0.0702226 0 +1963 -6.62153e-06 -0.0326101 0 +1964 -9.96285e-06 -0.101713 0 +1965 -9.18093e-06 -0.11863 0 +1966 -7.29485e-06 -0.0385577 0 +1967 -7.7881e-06 -0.0443137 0 +1968 -9.49564e-06 -0.0748293 0 +1969 -9.38569e-06 -0.0914895 0 +1970 -8.10648e-06 -0.0498782 0 +1971 -7.08329e-06 -0.114572 0 +1972 -7.58301e-06 -0.109136 0 +1973 -8.97529e-06 -0.0792442 0 +1974 -8.25273e-06 -0.0552511 0 +1975 -6.37143e-06 -0.111837 0 +1976 -6.87956e-06 -0.105912 0 +1977 -8.23394e-06 -0.0834675 0 +1978 0 -0.126932 0 +1979 0 -0.12671 0 +1980 -8.02895e-06 -0.0601088 0 +1981 0 -0.126074 0 +1982 0 0 0 +1983 -1.73699e-06 -0.00690477 0 +1984 -3.16457e-06 -0.0136181 0 +1985 0 -0.125067 0 +1986 -4.31626e-06 -0.0201399 0 +1987 0 -0.123786 0 +1988 -5.22063e-06 -0.0264703 0 +1989 -7.7986e-06 -0.0651108 0 +1990 -7.23741e-06 -0.087499 0 +1991 0 -0.122237 0 +1992 -5.90151e-06 -0.0326092 0 +1993 -6.23571e-06 -0.0959655 0 +1994 -5.25005e-06 -0.102938 0 +1995 -7.60455e-06 -0.0702205 0 +1996 0 -0.120426 0 +1997 -6.37505e-06 -0.0385566 0 +1998 0 -0.118355 0 +1999 -6.6554e-06 -0.0443124 0 +2000 -6.98822e-06 -0.0748271 0 +2001 -4.78141e-06 -0.0992376 0 +2002 0 -0.116026 0 +2003 -6.74688e-06 -0.0498768 0 +2004 0 -0.113439 0 +2005 -6.46791e-06 -0.0549138 0 +2006 0 -0.110594 0 +2007 -4.06487e-06 -0.0922225 0 +2008 0 0 0 +2009 -1.59952e-06 -0.0069046 0 +2010 -2.86853e-06 -0.0136177 0 +2011 0 -0.107493 0 +2012 -3.84471e-06 -0.0201394 0 +2013 -5.96453e-06 -0.0597828 0 +2014 -4.56e-06 -0.0264696 0 +2015 -5.66954e-06 -0.0651092 0 +2016 -5.03927e-06 -0.0326083 0 +2017 -3.68786e-06 -0.087823 0 +2018 0 -0.104136 0 +2019 -4.63057e-06 -0.0789307 0 +2020 -5.19934e-06 -0.0702189 0 +2021 0 -0.100523 0 +2022 -3.36583e-06 -0.083168 0 +2023 -4.94889e-06 -0.0383659 0 +2024 -5.0957e-06 -0.0498613 0 +2025 0 -0.0966531 0 +2026 -4.94208e-06 -0.0441278 0 +2027 0 0 0 +2028 -1.4244e-06 -0.00690445 0 +2029 -4.55592e-06 -0.0548988 0 +2030 -2.50448e-06 -0.0136174 0 +2031 0 -0.0925278 0 +2032 -3.2817e-06 -0.020139 0 +2033 -2.85096e-06 -0.0745007 0 +2034 -3.78977e-06 -0.026469 0 +2035 0 -0.0881468 0 +2036 -2.57331e-06 -0.0691478 0 +2037 -3.73315e-06 -0.0324118 0 +2038 0 -0.0835102 0 +2039 -2.97912e-06 -0.0581484 0 +2040 -3.30436e-06 -0.0498462 0 +2041 -2.3282e-06 -0.0635395 0 +2042 -3.37211e-06 -0.0441123 0 +2043 0 -0.0786181 0 +2044 0 0 0 +2045 -1.21499e-06 -0.00690431 0 +2046 -3.33025e-06 -0.0381754 0 +2047 -2.06597e-06 -0.0137877 0 +2048 -2.60096e-06 -0.0203042 0 +2049 -2.9256e-06 -0.0264686 0 +2050 0 -0.0734705 0 +2051 -1.78065e-06 -0.0532078 0 +2052 -2.62914e-06 -0.0324114 0 +2053 0 -0.0680675 0 +2054 0 0 0 +2055 0 -0.0624092 0 +2056 -1.57068e-06 -0.0469015 0 +2057 -9.78734e-07 -0.00707968 0 +2058 -1.81245e-06 -0.0410625 0 +2059 -1.55718e-06 -0.0139579 0 +2060 -1.88536e-06 -0.0203039 0 +2061 -1.99599e-06 -0.0264682 0 +2062 0 -0.0564956 0 +2063 -1.53781e-06 -0.0342735 0 +2064 0 -0.0503268 0 +2065 0 0 0 +2066 -7.08197e-07 -0.00707959 0 +2067 -1.0733e-06 -0.0283877 0 +2068 0 -0.0439027 0 +2069 -8.46365e-07 -0.0148079 0 +2070 -8.24715e-07 -0.0211298 0 +2071 0 -0.0372235 0 +2072 0 0 0 +2073 0 -0.0302891 0 +2074 -3.34022e-07 -0.007955 0 +2075 0 -0.0230995 0 +2076 0 0 0 +2077 0 -0.0156548 0 +2078 0 -0.00795499 0 +2079 0 0 0 +End Values Result "TOTAL_DISPLACEMENT" "Kratos" 1 Vector OnNodes Values 1 0 0 0 diff --git a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage2.post.orig.res b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage2.post.orig.res index 7896279d111a..af6d84d8c7b5 100644 --- a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage2.post.orig.res +++ b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage2.post.orig.res @@ -2088,6 +2088,2088 @@ Values 2078 0 -2.53794e-05 0 2079 0 0 0 End Values +Result "INCREMENTAL_DISPLACEMENT" "Kratos" 2 Vector OnNodes +Values +1 0 -1.92896e-05 0 +2 0 -1.02767e-05 0 +3 -4.15837e-05 -4.38144e-05 0 +4 -4.35534e-06 -3.98144e-05 0 +5 0 -1.00263e-05 0 +6 -7.47353e-05 -9.77095e-05 0 +7 -1.91915e-05 -7.95519e-05 0 +8 1.83276e-05 -3.51852e-05 0 +9 -7.198e-05 -0.000109612 0 +10 0 -2.2184e-05 0 +11 -0.000103904 -0.00012229 0 +12 9.93653e-06 -6.73039e-05 0 +13 -2.10128e-05 -9.89254e-05 0 +14 1.12335e-05 -3.90209e-05 0 +15 -4.91976e-05 -0.000133429 0 +16 -8.28916e-05 -0.000156008 0 +17 0 -3.56257e-05 0 +18 -0.000138123 -0.000181871 0 +19 1.70151e-05 -6.6318e-05 0 +20 1.25186e-05 -9.55161e-05 0 +21 -1.37774e-05 -0.000131947 0 +22 1.15959e-05 -4.71191e-05 0 +23 -7.54708e-05 -0.000201119 0 +24 -3.75055e-05 -0.000179365 0 +25 0 -4.55556e-05 0 +26 -0.000182583 -0.000243537 0 +27 2.22753e-05 -9.62725e-05 0 +28 2.22061e-05 -7.01546e-05 0 +29 1.07478e-05 -0.000134529 0 +30 -1.45967e-05 -0.000172409 0 +31 1.34307e-05 -5.63491e-05 0 +32 -0.000133128 -0.000258522 0 +33 -4.62576e-05 -0.00021658 0 +34 0 -5.59783e-05 0 +35 -0.000228038 -0.000302373 0 +36 3.30288e-05 -0.000103414 0 +37 2.72061e-05 -0.000138083 0 +38 2.75643e-05 -7.72254e-05 0 +39 -1.91342e-06 -0.000206025 0 +40 1.58586e-05 -6.61015e-05 0 +41 -0.000109237 -0.000281181 0 +42 -0.000199451 -0.000324753 0 +43 -3.35893e-05 -0.000249451 0 +44 4.41567e-05 -0.000142511 0 +45 0 -6.6354e-05 0 +46 -0.000251757 -0.000351281 0 +47 4.32711e-05 -0.000107853 0 +48 3.32621e-05 -8.5219e-05 0 +49 2.68801e-05 -0.000206976 0 +50 1.84364e-05 -7.6035e-05 0 +51 -0.00015482 -0.000335435 0 +52 -7.64106e-05 -0.000308042 0 +53 -0.000222706 -0.000363684 0 +54 5.9033e-05 -0.000140193 0 +55 -1.09819e-05 -0.000281946 0 +56 5.1436e-05 -0.000110432 0 +57 5.83132e-05 -0.000185726 0 +58 -0.000274279 -0.000380545 0 +59 0 -7.67719e-05 0 +60 3.83695e-05 -9.35674e-05 0 +61 -0.00017935 -0.000371524 0 +62 4.0643e-05 -0.000254575 0 +63 -0.000249294 -0.000383939 0 +64 2.07727e-05 -8.58451e-05 0 +65 -0.000109645 -0.00036904 0 +66 7.10552e-05 -0.000140039 0 +67 7.85015e-05 -0.00018124 0 +68 -4.00104e-05 -0.000345964 0 +69 5.95528e-05 -0.000116943 0 +70 1.92214e-05 -0.000315667 0 +71 7.64087e-05 -0.000231424 0 +72 0 -8.68471e-05 0 +73 -0.000311787 -0.00041179 0 +74 -0.000195914 -0.000408771 0 +75 4.31844e-05 -0.000102044 0 +76 -0.000129193 -0.000416833 0 +77 6.86531e-05 -0.000290514 0 +78 -0.000258827 -0.000449529 0 +79 2.29358e-05 -9.53775e-05 0 +80 8.19021e-05 -0.000144772 0 +81 9.65528e-05 -0.000180964 0 +82 -6.55354e-05 -0.000420853 0 +83 9.65221e-05 -0.000261042 0 +84 -2.99696e-08 -0.000388545 0 +85 0.000103312 -0.000228077 0 +86 6.6663e-05 -0.00012373 0 +87 0 -9.65174e-05 0 +88 5.50474e-05 -0.000356317 0 +89 -0.000350294 -0.000512154 0 +90 -0.000183135 -0.000486533 0 +91 4.72871e-05 -0.000110328 0 +92 9.21169e-05 -0.00032327 0 +93 -0.000119892 -0.000484507 0 +94 -0.000256679 -0.000544713 0 +95 2.47777e-05 -0.000104425 0 +96 9.12816e-05 -0.000149868 0 +97 0.000118729 -0.000292408 0 +98 0.000110617 -0.000183699 0 +99 0.0001243 -0.000257462 0 +100 2.10301e-06 -0.000455303 0 +101 0.000124803 -0.0002261 0 +102 6.03849e-05 -0.000419515 0 +103 7.27213e-05 -0.000130523 0 +104 9.07251e-05 -0.000385722 0 +105 -0.000177003 -0.000567203 0 +106 0 -0.000105524 0 +107 -0.000377084 -0.000616837 0 +108 -4.236e-05 -0.000512753 0 +109 0.000123598 -0.000350989 0 +110 5.08457e-05 -0.000118233 0 +111 0.000114192 -0.000176382 0 +112 0.000133453 -0.00021489 0 +113 0.000143576 -0.000320756 0 +114 0.000147017 -0.000283965 0 +115 -0.00028014 -0.000640558 0 +116 2.63234e-05 -0.000112847 0 +117 -9.89509e-05 -0.000592531 0 +118 0.000100191 -0.000452782 0 +119 6.75775e-05 -0.000490765 0 +120 0.000126796 -0.000416779 0 +121 0.000103745 -0.000159635 0 +122 0.000154664 -0.000258978 0 +123 0.000151554 -0.000382446 0 +124 2.94519e-05 -0.000551817 0 +125 8.2385e-05 -0.000140779 0 +126 5.73004e-05 -0.000126322 0 +127 0 -0.000113772 0 +128 -0.000407153 -0.000705593 0 +129 0.000137855 -0.000205145 0 +130 -0.00016027 -0.000668262 0 +131 0.000169119 -0.000350176 0 +132 -1.82678e-05 -0.000621129 0 +133 3.1595e-05 -0.000120243 0 +134 0.000127956 -0.000184873 0 +135 0.000111133 -0.00052804 0 +136 0.000161986 -0.000245902 0 +137 0.00013982 -0.00048739 0 +138 0.000180134 -0.00032015 0 +139 -0.000285834 -0.000733245 0 +140 0.000167131 -0.000448554 0 +141 7.79458e-05 -0.000593113 0 +142 -7.83452e-05 -0.00069414 0 +143 8.98257e-05 -0.000148223 0 +144 6.36511e-05 -0.000133733 0 +145 0.000114821 -0.000168445 0 +146 0.000187153 -0.000411843 0 +147 0.000185242 -0.000292636 0 +148 0 -0.000121098 0 +149 -0.000461696 -0.000792117 0 +150 0.000159567 -0.000225631 0 +151 0.000200511 -0.000377353 0 +152 0.000153972 -0.000566075 0 +153 -0.000155005 -0.000771664 0 +154 3.26907e-05 -0.000126961 0 +155 0.000148154 -0.000203497 0 +156 0.000183608 -0.000522125 0 +157 0.000185176 -0.00026769 0 +158 8.01064e-05 -0.000681243 0 +159 0.000207881 -0.000345212 0 +160 -0.000340149 -0.000825551 0 +161 0.000205666 -0.00048045 0 +162 1.53508e-05 -0.000733669 0 +163 8.1381e-05 -0.000146275 0 +164 0.000108216 -0.000163048 0 +165 0.000220937 -0.000441014 0 +166 -0.000262262 -0.000846654 0 +167 0.000209898 -0.000315596 0 +168 0 -0.000127369 0 +169 -0.000516913 -0.000885108 0 +170 0.00018068 -0.000245469 0 +171 0.000163866 -0.000650721 0 +172 0.000138535 -0.000189199 0 +173 -4.52514e-05 -0.000814785 0 +174 0.000230156 -0.00040397 0 +175 0.000201144 -0.000604054 0 +176 -0.000450529 -0.00089896 0 +177 4.99348e-05 -0.000136007 0 +178 0.000224742 -0.000556585 0 +179 -0.000107677 -0.000874855 0 +180 0.000207288 -0.000288576 0 +181 0.000233931 -0.000369403 0 +182 0.000241499 -0.000511612 0 +183 -0.000359741 -0.000922176 0 +184 0.000172508 -0.000225882 0 +185 9.90324e-05 -0.000158716 0 +186 0.000123336 -0.000802758 0 +187 0.000174507 -0.000744825 0 +188 0.000252153 -0.000469151 0 +189 5.93234e-05 -0.000862292 0 +190 0.000214245 -0.000691901 0 +191 0.000130688 -0.000180829 0 +192 0.000232947 -0.000337448 0 +193 0 -0.000132528 0 +194 -0.000567617 -0.000997154 0 +195 -0.000200786 -0.000962028 0 +196 0.000200706 -0.000264208 0 +197 3.36822e-05 -0.000135921 0 +198 0.00024437 -0.000640956 0 +199 0.000257338 -0.000429279 0 +200 8.87631e-06 -0.000930421 0 +201 0.000161325 -0.000208828 0 +202 -0.000462937 -0.00103083 0 +203 0.000262204 -0.000589674 0 +204 -0.00030834 -0.00103125 0 +205 8.3706e-05 -0.000152587 0 +206 0.000227807 -0.000308125 0 +207 0.000273917 -0.000541181 0 +208 -5.18826e-05 -0.00100388 0 +209 0.000257696 -0.000392066 0 +210 0.000190824 -0.000242414 0 +211 0.000116175 -0.000170504 0 +212 0.000233413 -0.000792319 0 +213 0.000199174 -0.000856385 0 +214 0.000280151 -0.000495477 0 +215 0.000148428 -0.000923483 0 +216 -0.000149131 -0.00107318 0 +217 0.000147744 -0.000194067 0 +218 0.000264417 -0.000734021 0 +219 9.2819e-05 -0.000993621 0 +220 0.000253798 -0.000357577 0 +221 0 -0.000136235 0 +222 -0.000611916 -0.0011744 0 +223 0.000219145 -0.000281464 0 +224 -0.000415959 -0.00116441 0 +225 0.000282904 -0.000675659 0 +226 3.37227e-05 -0.000139286 0 +227 0.000281565 -0.000452607 0 +228 -0.000251857 -0.00115801 0 +229 0.000178232 -0.000223081 0 +230 0.000295297 -0.0006204 0 +231 4.43097e-05 -0.00107391 0 +232 6.7326e-05 -0.000147933 0 +233 0.00010022 -0.000161958 0 +234 0.000246237 -0.000325818 0 +235 0.000302263 -0.000568244 0 +236 -3.5563e-05 -0.00115321 0 +237 0.000278674 -0.000412596 0 +238 0.000207534 -0.000257361 0 +239 0.000132352 -0.000181374 0 +240 0.000259169 -0.000906763 0 +241 0.00028474 -0.000836529 0 +242 0.000225836 -0.000980842 0 +243 0.000304436 -0.000519192 0 +244 -0.000132665 -0.00124252 0 +245 0.000303383 -0.000770044 0 +246 0.000183253 -0.00105911 0 +247 0.000163516 -0.00020601 0 +248 0.000272054 -0.000375469 0 +249 0.000316107 -0.000707163 0 +250 0 -0.000138476 0 +251 -0.000653821 -0.00135875 0 +252 0.000129925 -0.00114194 0 +253 0.000235541 -0.000296761 0 +254 -0.00043863 -0.00134941 0 +255 3.35198e-05 -0.000141222 0 +256 0.000302334 -0.000473237 0 +257 -0.000249818 -0.00134161 0 +258 8.33018e-05 -0.00015486 0 +259 0.000323476 -0.000647838 0 +260 6.40447e-05 -0.00123078 0 +261 0.000193525 -0.000235713 0 +262 0.000115691 -0.000170447 0 +263 0.000326168 -0.000591993 0 +264 -1.81995e-05 -0.00132793 0 +265 0.000262176 -0.000341188 0 +266 0.000296477 -0.000430374 0 +267 0.0001472 -0.000190972 0 +268 0.000222244 -0.00027031 0 +269 0.000304622 -0.000948905 0 +270 0.000279361 -0.00102927 0 +271 0.000323179 -0.000873115 0 +272 0.000246354 -0.00111464 0 +273 0.000324628 -0.000539587 0 +274 0.000335901 -0.000801684 0 +275 0.000204229 -0.00120552 0 +276 -0.000119754 -0.0014321 0 +277 0.000177636 -0.000216315 0 +278 0.000343457 -0.000734383 0 +279 0.000151086 -0.00130284 0 +280 0.000287311 -0.000390568 0 +281 0 -0.000139265 0 +282 -0.000694846 -0.00155784 0 +283 4.95274e-05 -0.000144678 0 +284 0.000249549 -0.000309701 0 +285 -0.00045572 -0.0015478 0 +286 9.82073e-05 -0.000160986 0 +287 0.000319382 -0.000490561 0 +288 -0.000246524 -0.0015429 0 +289 0.000346433 -0.000671088 0 +290 8.42067e-05 -0.0014078 0 +291 0.000206823 -0.00024633 0 +292 0.000129764 -0.000177694 0 +293 0.000345303 -0.000611657 0 +294 0.000323417 -0.0010712 0 +295 0.000275295 -0.000353759 0 +296 0.00034162 -0.000984982 0 +297 0.000298615 -0.00116317 0 +298 -3.43427e-06 -0.00153825 0 +299 0.000310805 -0.000444863 0 +300 0.000160341 -0.000198955 0 +301 0.000354197 -0.000903971 0 +302 0.000266189 -0.0012614 0 +303 0.00023461 -0.000280883 0 +304 0.000361734 -0.000827898 0 +305 0.000224563 -0.00136674 0 +306 0.000340516 -0.000555999 0 +307 3.2318e-05 -0.000140901 0 +308 -0.000109603 -0.00166011 0 +309 0.000189748 -0.000224629 0 +310 0.000364878 -0.000756433 0 +311 0.000171736 -0.00148004 0 +312 8.03948e-05 -0.000152671 0 +313 0.000299341 -0.000402416 0 +314 -0.000742283 -0.00178719 0 +315 0 -0.000138402 0 +316 0.000260833 -0.000319849 0 +317 -0.000465342 -0.00177673 0 +318 0.000111669 -0.000165887 0 +319 0.000332449 -0.000504 0 +320 0.000364017 -0.000689407 0 +321 0.000217806 -0.000254592 0 +322 0.000102034 -0.00162021 0 +323 0.00014209 -0.000183367 0 +324 0.000357898 -0.00110526 0 +325 0.00034005 -0.00120305 0 +326 0.000370226 -0.0010138 0 +327 0.000315792 -0.00130774 0 +328 0.00035962 -0.000626601 0 +329 0.000285333 -0.00036312 0 +330 0.00037773 -0.000928122 0 +331 0.000283955 -0.00142015 0 +332 0.000171445 -0.000204987 0 +333 0.000321473 -0.000455565 0 +334 1.33434e-05 -0.00177277 0 +335 -0.000228704 -0.00187759 0 +336 0.000244336 -0.000288704 0 +337 0.000380956 -0.000847847 0 +338 0.00024297 -0.00154114 0 +339 6.26848e-05 -0.000145105 0 +340 0.000351983 -0.000567884 0 +341 3.11313e-05 -0.000138436 0 +342 9.33347e-05 -0.000155239 0 +343 0.000199537 -0.000230625 0 +344 0.00038035 -0.00077262 0 +345 0.00019091 -0.00167165 0 +346 0.000307913 -0.000410572 0 +347 0 -0.000135764 0 +348 -0.00078367 -0.00206286 0 +349 0.0001233 -0.00016927 0 +350 0.000269168 -0.000326849 0 +351 0.000376288 -0.000702195 0 +352 0.000341477 -0.000513085 0 +353 0.000122378 -0.00183294 0 +354 0.000226174 -0.000260151 0 +355 0.000371016 -0.00123312 0 +356 0.000383218 -0.00113042 0 +357 0.000353467 -0.0013432 0 +358 0.000152326 -0.000187146 0 +359 -7.93574e-05 -0.00200856 0 +360 0.00039072 -0.00103453 0 +361 0.000329627 -0.00146152 0 +362 0.000369089 -0.000636317 0 +363 0.000394112 -0.00094482 0 +364 0.000298399 -0.00158891 0 +365 -0.000458148 -0.00218588 0 +366 3.91484e-05 -0.00198794 0 +367 0.0002921 -0.000368889 0 +368 0.000180199 -0.000208758 0 +369 0.000328356 -0.000462074 0 +370 0.00025117 -0.000293441 0 +371 0.000393779 -0.000860924 0 +372 0.000258203 -0.00172654 0 +373 7.2472e-05 -0.000144349 0 +374 0.000359045 -0.000574798 0 +375 0.000390119 -0.000782409 0 +376 0.000207309 -0.00187553 0 +377 0.00010168 -0.000154936 0 +378 0.000206716 -0.000233985 0 +379 2.97422e-05 -0.000134185 0 +380 0.000132776 -0.000170828 0 +381 0.000312935 -0.000414682 0 +382 0 -0.00013139 0 +383 -0.000808564 -0.00242551 0 +384 -0.000198545 -0.00228402 0 +385 0.00027433 -0.000330356 0 +386 0.000383386 -0.000709009 0 +387 0.000392274 -0.00125278 0 +388 0.000380027 -0.00136711 0 +389 0.000143273 -0.00203778 0 +390 0.000346407 -0.000517434 0 +391 0.000399981 -0.00114618 0 +392 0.000362539 -0.00148998 0 +393 -5.2046e-05 -0.00225482 0 +394 0.000231686 -0.000262707 0 +395 0.00016016 -0.000188734 0 +396 0.000403667 -0.00104667 0 +397 0.000338959 -0.00162227 0 +398 0.000403767 -0.000953685 0 +399 0.000308161 -0.00176512 0 +400 0.000373874 -0.000640413 0 +401 6.28043e-05 -0.00221585 0 +402 -0.0004435 -0.00252852 0 +403 0.000186308 -0.000209969 0 +404 0.00029545 -0.000370753 0 +405 0.000331421 -0.000464051 0 +406 0.000400607 -0.000866768 0 +407 0.000268779 -0.00191975 0 +408 0.000254904 -0.00029479 0 +409 8.04547e-05 -0.000141913 0 +410 0.000361771 -0.000576413 0 +411 0.000110542 -0.00015416 0 +412 0.00039447 -0.000785504 0 +413 3.98979e-05 -0.000130264 0 +414 0.000219012 -0.00208785 0 +415 0.000211022 -0.000234427 0 +416 0.000139782 -0.000170273 0 +417 0.000396561 -0.00137917 0 +418 0.000404729 -0.00126178 0 +419 0.000383956 -0.00150526 0 +420 0.000314309 -0.000414453 0 +421 0 -0.000125305 0 +422 -0.000808383 -0.00282524 0 +423 0.00027618 -0.000330092 0 +424 0.000408976 -0.00115226 0 +425 0.000366248 -0.00164085 0 +426 0.000385581 -0.000709573 0 +427 0.000156484 -0.00227154 0 +428 0.000347315 -0.000516756 0 +429 0.000409711 -0.00105003 0 +430 0.000342623 -0.00178707 0 +431 -3.18439e-05 -0.00253861 0 +432 0.00016529 -0.000187843 0 +433 0.000234104 -0.000261981 0 +434 0.000407265 -0.000954477 0 +435 -0.000186052 -0.00269964 0 +436 0.000312024 -0.00194502 0 +437 0.00037414 -0.000638661 0 +438 7.76063e-05 -0.00247363 0 +439 6.31515e-05 -0.000131279 0 +440 0.000189501 -0.000208353 0 +441 0.000295291 -0.00036845 0 +442 0.000401887 -0.000865189 0 +443 0.000273186 -0.0021163 0 +444 9.13451e-05 -0.000140186 0 +445 0.000330666 -0.00046125 0 +446 2.4595e-05 -0.000122329 0 +447 0.000255356 -0.0002925 0 +448 0.00011942 -0.000153077 0 +449 0.000360318 -0.000572514 0 +450 0.000393801 -0.000781714 0 +451 0.000224354 -0.0023026 0 +452 -0.00043088 -0.0030113 0 +453 0.000212213 -0.000231695 0 +454 0.000404303 -0.00137964 0 +455 0.000395326 -0.00150766 0 +456 0.000409415 -0.00126026 0 +457 0.000382015 -0.00164511 0 +458 0.000143996 -0.000167319 0 +459 0.000411082 -0.00114879 0 +460 0.000363717 -0.00179296 0 +461 0.000312028 -0.000409662 0 +462 -0.000760823 -0.00323521 0 +463 0 -0.000117179 0 +464 0.000274575 -0.000325825 0 +465 0.000383167 -0.000703736 0 +466 0.000163416 -0.00250639 0 +467 0.000409596 -0.00104464 0 +468 0.000339699 -0.00195227 0 +469 0.000344271 -0.00051087 0 +470 0.000167423 -0.000184216 0 +471 4.68567e-05 -0.000120824 0 +472 0.000233238 -0.00025774 0 +473 0.000405222 -0.000947256 0 +474 0.000308952 -0.00212432 0 +475 7.3447e-05 -0.000127415 0 +476 0.000370147 -0.000630911 0 +477 8.73718e-05 -0.00273001 0 +478 9.94307e-05 -0.000136821 0 +479 0.000189507 -0.000203668 0 +480 -2.3166e-05 -0.00291862 0 +481 0.000398144 -0.000856202 0 +482 0.000270334 -0.00231056 0 +483 0.000291552 -0.000361785 0 +484 0.000326144 -0.000453502 0 +485 2.2471e-05 -0.000113034 0 +486 0.000252373 -0.000286356 0 +487 -0.000168919 -0.00312298 0 +488 0.00012276 -0.000148092 0 +489 0.0003981 -0.00149773 0 +490 0.000404436 -0.00136891 0 +491 0.000387935 -0.00163572 0 +492 0.000354853 -0.000562982 0 +493 0.000388529 -0.00077106 0 +494 0.000222227 -0.00251269 0 +495 0.000407365 -0.00124856 0 +496 0.000373535 -0.00178373 0 +497 -0.000385521 -0.00336497 0 +498 0.000210057 -0.000225568 0 +499 0.000145104 -0.000161718 0 +500 0.000407151 -0.001136 0 +501 0.000354247 -0.00194267 0 +502 0.000306074 -0.000400164 0 +503 0.000376495 -0.00069149 0 +504 0.000404058 -0.00103071 0 +505 0.000329475 -0.00211359 0 +506 0 -0.000107087 0 +507 -0.000683562 -0.00362425 0 +508 0.000162821 -0.00273243 0 +509 0.000269428 -0.000317376 0 +510 4.93699e-05 -0.000112444 0 +511 0.000337414 -0.00049966 0 +512 0.000166268 -0.000177621 0 +513 0.000228888 -0.00024979 0 +514 0.000398253 -0.000932151 0 +515 7.35654e-05 -0.000118742 0 +516 0.000298219 -0.00229763 0 +517 0.000362154 -0.000617164 0 +518 8.99356e-05 -0.00297128 0 +519 0.000101917 -0.000129835 0 +520 0.000389893 -0.000839926 0 +521 0.000259628 -0.00249593 0 +522 0.000186074 -0.000195702 0 +523 -1.16555e-05 -0.00318219 0 +524 2.66195e-05 -0.000103665 0 +525 0.000284194 -0.000350624 0 +526 0.000317918 -0.000440712 0 +527 0.000393668 -0.00147632 0 +528 0.000385738 -0.00161375 0 +529 0.000122854 -0.000140551 0 +530 0.000245808 -0.000276197 0 +531 0.000398199 -0.00134769 0 +532 0.000374034 -0.00176068 0 +533 -0.000144598 -0.003425 0 +534 0.000399587 -0.00122724 0 +535 0.000358164 -0.0019179 0 +536 0.000379081 -0.000753619 0 +537 0.000212268 -0.00270966 0 +538 0.000345587 -0.000547801 0 +539 0.000204335 -0.000215863 0 +540 0.000398078 -0.00111438 0 +541 0.00033759 -0.0020862 0 +542 0.000142784 -0.000153244 0 +543 -0.000331348 -0.00369035 0 +544 0.00039383 -0.00100862 0 +545 0.00031175 -0.00226645 0 +546 0.000365908 -0.000672912 0 +547 4.99818e-05 -0.00010222 0 +548 0.000155058 -0.00293911 0 +549 0.000296478 -0.000385868 0 +550 0 -9.50274e-05 0 +551 -0.000568054 -0.00394432 0 +552 0.000260635 -0.000304625 0 +553 0.000161531 -0.000167851 0 +554 0.000326872 -0.00048312 0 +555 7.59308e-05 -0.000109798 0 +556 0.000386993 -0.000909502 0 +557 0.000279935 -0.00245942 0 +558 0.000220882 -0.000237974 0 +559 0.000101003 -0.00012038 0 +560 0.000350438 -0.000597471 0 +561 8.69471e-05 -0.00318408 0 +562 0.000377654 -0.000816627 0 +563 0.000241426 -0.00266576 0 +564 0.000376845 -0.00158031 0 +565 0.000178932 -0.00018428 0 +566 0.000383325 -0.00144436 0 +567 0.000367006 -0.00172518 0 +568 2.30547e-05 -9.03613e-05 0 +569 0.00038663 -0.00131675 0 +570 0.000353421 -0.00187959 0 +571 -4.15827e-06 -0.00342124 0 +572 0.000273175 -0.000334888 0 +573 0.000119352 -0.000130218 0 +574 0.000306072 -0.000422863 0 +575 0.000235533 -0.000261908 0 +576 0.000387025 -0.00119694 0 +577 0.000335833 -0.00204416 0 +578 0.000365895 -0.000729629 0 +579 0.000195592 -0.00288554 0 +580 -0.000116104 -0.00367104 0 +581 0.000332719 -0.000527025 0 +582 0.000384627 -0.00108445 0 +583 0.000313739 -0.00221953 0 +584 0.000194818 -0.000202432 0 +585 0.000136708 -0.00014169 0 +586 3.99583e-05 -8.90318e-05 0 +587 -0.000264174 -0.00392742 0 +588 0.000379597 -0.000978826 0 +589 0.000286831 -0.00240616 0 +590 5.75799e-05 -9.30425e-05 0 +591 0.000351756 -0.000648189 0 +592 0.000142108 -0.00311815 0 +593 0.000283252 -0.000366763 0 +594 0 -8.08521e-05 0 +595 -0.00043465 -0.00417933 0 +596 0.00024812 -0.000287494 0 +597 7.9902e-05 -0.000100864 0 +598 0.000152913 -0.000154734 0 +599 0.000312792 -0.000461284 0 +600 0.000371998 -0.000879667 0 +601 0.000254612 -0.00260444 0 +602 0.000209029 -0.000222188 0 +603 9.6295e-05 -0.000108195 0 +604 0.000362683 -0.00153664 0 +605 0.000353996 -0.00167867 0 +606 1.62437e-05 -7.72539e-05 0 +607 0.000335274 -0.000572001 0 +608 0.000368213 -0.00140289 0 +609 0.00034196 -0.00182947 0 +610 8.18771e-05 -0.0033613 0 +611 0.000361913 -0.000786622 0 +612 0.000216895 -0.00281413 0 +613 0.000370786 -0.00127697 0 +614 0.000326318 -0.0019895 0 +615 0.000167821 -0.000169254 0 +616 6.38136e-06 -0.00360096 0 +617 0.000111881 -0.000116889 0 +618 0.000258469 -0.00031456 0 +619 0.000370531 -0.00115843 0 +620 0.000306838 -0.00215918 0 +621 0.000290683 -0.000399994 0 +622 0.000221403 -0.00024342 0 +623 3.05025e-05 -7.46354e-05 0 +624 0.000349359 -0.000699348 0 +625 0.0001738 -0.00303456 0 +626 0.000367576 -0.00104685 0 +627 0.000283274 -0.0023388 0 +628 0.000316456 -0.00050079 0 +629 4.53734e-05 -7.75617e-05 0 +630 0.000126526 -0.000126886 0 +631 0.000181278 -0.00018517 0 +632 0.000361989 -0.000941869 0 +633 0.000255465 -0.0025285 0 +634 5.99291e-05 -8.16147e-05 0 +635 -6.14041e-05 -0.00385403 0 +636 0.000334363 -0.000617556 0 +637 0.000126039 -0.00326364 0 +638 0.000266424 -0.000342876 0 +639 0 -6.43313e-05 0 +640 -0.000306176 -0.00432473 0 +641 7.39577e-05 -8.68154e-05 0 +642 0.000231788 -0.000265971 0 +643 -0.000162436 -0.00409698 0 +644 0.000140091 -0.000138124 0 +645 0.000353833 -0.000843131 0 +646 0.000223429 -0.00272798 0 +647 0.00029531 -0.00043428 0 +648 0.000336386 -0.00162255 0 +649 0.000193146 -0.000202359 0 +650 0.000344352 -0.00148393 0 +651 0.000325264 -0.00176916 0 +652 0.000349368 -0.00135294 0 +653 0.00031091 -0.00192406 0 +654 8.73728e-05 -9.3077e-05 0 +655 0.00031691 -0.000540952 0 +656 1.25619e-05 -5.99955e-05 0 +657 0.000351494 -0.00122923 0 +658 0.000293106 -0.00208757 0 +659 7.60823e-05 -0.00349804 0 +660 0.000343123 -0.000750321 0 +661 0.000187485 -0.00293646 0 +662 0.000152448 -0.000150525 0 +663 0.00035088 -0.00111244 0 +664 0.000271823 -0.00225977 0 +665 0.000100049 -0.000100387 0 +666 0.000240032 -0.000289668 0 +667 2.91043e-05 -6.00083e-05 0 +668 0.000271828 -0.00037221 0 +669 0.000203278 -0.000220712 0 +670 0.000347549 -0.00100224 0 +671 0.000246992 -0.00244069 0 +672 4.08039e-05 -6.2529e-05 0 +673 0.000329867 -0.000663143 0 +674 0.000148674 -0.00315228 0 +675 0.000296984 -0.000469279 0 +676 2.84365e-05 -0.00373252 0 +677 0.000111875 -0.000108679 0 +678 0.000163465 -0.000164006 0 +679 5.27158e-05 -6.56955e-05 0 +680 0.000341581 -0.000898316 0 +681 0.000218809 -0.00262992 0 +682 0.000314035 -0.000581325 0 +683 0.000108914 -0.00337274 0 +684 6.35184e-05 -6.98904e-05 0 +685 0.000246001 -0.000314306 0 +686 0.000315318 -0.00155816 0 +687 0.000304746 -0.00170017 0 +688 0 -4.54839e-05 0 +689 -0.000178356 -0.00442783 0 +690 0.000211546 -0.000240073 0 +691 0.000332959 -0.000800377 0 +692 0.000187789 -0.00282673 0 +693 0.000122732 -0.000117914 0 +694 -8.82705e-05 -0.00419919 0 +695 0.000322932 -0.00142337 0 +696 0.000291122 -0.0018496 0 +697 0.00027455 -0.000402265 0 +698 -1.07895e-05 -0.00396026 0 +699 0.000327659 -0.00129555 0 +700 0.000274394 -0.00200661 0 +701 0.000173021 -0.000178468 0 +702 1.29132e-05 -4.38729e-05 0 +703 7.3789e-05 -7.4853e-05 0 +704 0.000329581 -0.00117444 0 +705 0.000254542 -0.00217119 0 +706 0.000295593 -0.000504606 0 +707 0.000321699 -0.000708153 0 +708 0.000154838 -0.0030297 0 +709 7.18439e-05 -0.003594 0 +710 0.000328739 -0.00105978 0 +711 0.000231655 -0.00234324 0 +712 0.000132517 -0.00012801 0 +713 2.41634e-05 -4.32466e-05 0 +714 8.34269e-05 -8.05569e-05 0 +715 0.000217818 -0.000260296 0 +716 3.27008e-05 -4.48068e-05 0 +717 0.000249564 -0.000339659 0 +718 0.000325174 -0.00095131 0 +719 0.000205997 -0.00252232 0 +720 0.000180993 -0.000193803 0 +721 0.000307742 -0.000621385 0 +722 0.000121988 -0.00323664 0 +723 0.000274477 -0.000432737 0 +724 4.26059e-05 -0.00381117 0 +725 9.23498e-05 -8.69602e-05 0 +726 4.07084e-05 -4.69191e-05 0 +727 0.000141117 -0.000138913 0 +728 0.000318879 -0.000848777 0 +729 0.000178105 -0.00270771 0 +730 0.000281467 -0.00162395 0 +731 0.000291796 -0.00148676 0 +732 0.00026827 -0.0017677 0 +733 4.80885e-05 -4.98945e-05 0 +734 0.000291048 -0.000539834 0 +735 9.19114e-05 -0.00344477 0 +736 0.000299232 -0.00135606 0 +737 0.000252144 -0.00191809 0 +738 0.000309842 -0.00075195 0 +739 0.000148987 -0.00289821 0 +740 0.000221984 -0.000281183 0 +741 -5.3577e-05 -0.0044859 0 +742 0 -2.41746e-05 0 +743 0.000100463 -9.40212e-05 0 +744 0.000187274 -0.000209883 0 +745 0.000303864 -0.00123168 0 +746 0.00023319 -0.002075 0 +747 5.06199e-06 -2.42931e-05 0 +748 -9.96109e-06 -0.004258 0 +749 0.000250621 -0.000365465 0 +750 2.77185e-05 -0.00401962 0 +751 5.50615e-05 -5.33468e-05 0 +752 0.000148437 -0.000150523 0 +753 0.000305671 -0.00111346 0 +754 0.000211507 -0.00223826 0 +755 1.08577e-05 -2.23806e-05 0 +756 0.000298009 -0.000660598 0 +757 0.000120276 -0.00309203 0 +758 0.000271525 -0.000463262 0 +759 6.92998e-05 -0.00365015 0 +760 0.00030471 -0.00100121 0 +761 0.000187428 -0.00240737 0 +762 1.52431e-05 -2.31864e-05 0 +763 0.000107687 -0.000101685 0 +764 6.1558e-05 -5.72773e-05 0 +765 0.000300932 -0.000894736 0 +766 0.000161505 -0.00258166 0 +767 1.93669e-05 -2.37708e-05 0 +768 0.000191755 -0.000226568 0 +769 0.00022394 -0.000302541 0 +770 0.000154373 -0.000162761 0 +771 0.000283312 -0.000574508 0 +772 9.4524e-05 -0.00328691 0 +773 2.33418e-05 -2.50874e-05 0 +774 0.000249085 -0.000391441 0 +775 6.75227e-05 -6.16334e-05 0 +776 5.94526e-05 -0.00384929 0 +777 0.000294341 -0.000793854 0 +778 0.000134636 -0.00276003 0 +779 0.000113935 -0.000109897 0 +780 0.000256409 -0.00154176 0 +781 0.000243391 -0.00167979 0 +782 0.000266624 -0.00140951 0 +783 0.000227612 -0.00182356 0 +784 0.00027403 -0.00128304 0 +785 0.000209155 -0.00197291 0 +786 2.71144e-05 -2.66472e-05 0 +787 0.00026565 -0.000493469 0 +788 7.53847e-05 -0.0034799 0 +789 0.000278617 -0.00116228 0 +790 0.0001882 -0.00212755 0 +791 0.000284847 -0.000698383 0 +792 0.000108346 -0.00294098 0 +793 7.28878e-05 -6.64068e-05 0 +794 0.00019435 -0.000243696 0 +795 0 0 0 +796 7.14691e-05 -0.00450533 0 +797 0.000158844 -0.000175507 0 +798 0 0 0 +799 7.04389e-05 -0.00427693 0 +800 0.000280382 -0.00104713 0 +801 0.000165067 -0.00228701 0 +802 0 0 0 +803 0.000223612 -0.000324131 0 +804 3.06565e-05 -2.84373e-05 0 +805 6.92585e-05 -0.00403823 0 +806 0.000119135 -0.000118589 0 +807 0 0 0 +808 0.000272391 -0.000608138 0 +809 0.000279293 -0.000937474 0 +810 0.000140286 -0.00245059 0 +811 8.47138e-05 -0.00312266 0 +812 0.000244907 -0.000417274 0 +813 0 0 0 +814 6.76704e-05 -0.00366801 0 +815 7.7603e-05 -7.15388e-05 0 +816 3.39312e-05 -3.04466e-05 0 +817 0 0 0 +818 0.000275311 -0.000833195 0 +819 0.000114706 -0.00261728 0 +820 0.000161762 -0.000188656 0 +821 0.000194981 -0.000261093 0 +822 0.000256839 -0.000522948 0 +823 6.6907e-05 -0.0033026 0 +824 0.000123208 -0.000127689 0 +825 0.000217374 -0.00158715 0 +826 0 0 0 +827 0.0002303 -0.0014548 0 +828 0.000201753 -0.00172444 0 +829 3.69107e-05 -3.26581e-05 0 +830 0.000220941 -0.000345712 0 +831 0.000268359 -0.000734156 0 +832 0.000240505 -0.00132749 0 +833 0.000183592 -0.00186642 0 +834 8.96021e-05 -0.00278578 0 +835 7.73302e-05 -0.00384805 0 +836 8.16035e-05 -7.70099e-05 0 +837 0.000247899 -0.0012053 0 +838 0.000163052 -0.00201277 0 +839 0 0 0 +840 0.000252484 -0.00108822 0 +841 0.000140477 -0.00216295 0 +842 0.000238067 -0.000442632 0 +843 5.89325e-05 -0.00347851 0 +844 0.000258346 -0.000640231 0 +845 6.68067e-05 -0.00295444 0 +846 3.95597e-05 -3.50571e-05 0 +847 0.000163066 -0.000202064 0 +848 0.000254175 -0.000976241 0 +849 0.000116349 -0.00231631 0 +850 0.000196866 -0.00448472 0 +851 0.000126092 -0.000137111 0 +852 0.000150799 -0.00425623 0 +853 0 0 0 +854 0.000193595 -0.000278563 0 +855 0.000110924 -0.00401743 0 +856 8.48457e-05 -8.2754e-05 0 +857 0.000252945 -0.000869297 0 +858 9.14276e-05 -0.00247185 0 +859 0.000245139 -0.000551279 0 +860 4.89066e-05 -0.00312126 0 +861 0.000215901 -0.000367012 0 +862 6.59637e-05 -0.00364746 0 +863 0 0 0 +864 4.1852e-05 -3.76222e-05 0 +865 0.00024868 -0.00076734 0 +866 6.68167e-05 -0.0026284 0 +867 0.000190898 -0.00149092 0 +868 0.000175378 -0.00162194 0 +869 0.000127727 -0.000146768 0 +870 0.0002038 -0.00136411 0 +871 0.000157379 -0.00175684 0 +872 0.000162698 -0.000215596 0 +873 0.000228587 -0.000467169 0 +874 3.924e-05 -0.00328411 0 +875 8.72715e-05 -8.87382e-05 0 +876 0.000213987 -0.00124165 0 +877 0.000137101 -0.00189527 0 +878 0.000241297 -0.000670278 0 +879 4.40677e-05 -0.00278448 0 +880 0 0 0 +881 0.000190157 -0.000295899 0 +882 0.000221385 -0.0011237 0 +883 0.000114859 -0.00203668 0 +884 9.41375e-05 -0.00380758 0 +885 4.37553e-05 -4.03345e-05 0 +886 0.000225918 -0.00101031 0 +887 9.11063e-05 -0.00218037 0 +888 0.0002085 -0.000387752 0 +889 4.22251e-05 -0.00344063 0 +890 0.000230632 -0.000578041 0 +891 2.52894e-05 -0.00293828 0 +892 0.000227505 -0.000901532 0 +893 6.65186e-05 -0.00232543 0 +894 0 0 0 +895 0.000128069 -0.000156554 0 +896 0.000321685 -0.00442481 0 +897 8.88472e-05 -9.48894e-05 0 +898 0.000229293 -0.00419523 0 +899 0.000160626 -0.00022909 0 +900 0.000150507 -0.00395617 0 +901 4.5246e-05 -4.31672e-05 0 +902 0.000226046 -0.00079736 0 +903 4.20432e-05 -0.00247071 0 +904 0.000216532 -0.000490527 0 +905 1.33294e-05 -0.0030879 0 +906 0.000184663 -0.00031288 0 +907 6.29908e-05 -0.00358873 0 +908 0 0 0 +909 0.000149093 -0.00151714 0 +910 0.000221418 -0.000697796 0 +911 0.000164541 -0.00139212 0 +912 0.000131229 -0.00164533 0 +913 1.89895e-05 -0.00261485 0 +914 0.000177393 -0.00127063 0 +915 0.000111137 -0.00177631 0 +916 0.000187557 -0.00115287 0 +917 8.91338e-05 -0.00190947 0 +918 8.95266e-05 -0.000101159 0 +919 0.000198777 -0.000407645 0 +920 1.1623e-05 -0.00323114 0 +921 0.000127081 -0.000166364 0 +922 4.62971e-05 -4.6097e-05 0 +923 0.000194897 -0.00103907 0 +924 6.56303e-05 -0.00204415 0 +925 0.000213467 -0.000602804 0 +926 -8.7081e-07 -0.00275622 0 +927 0.000156834 -0.000242384 0 +928 0.000108046 -0.00372626 0 +929 0 0 0 +930 0.000199334 -0.000929306 0 +931 4.12306e-05 -0.00217942 0 +932 0.000177138 -0.000329277 0 +933 0.000202009 -0.000512355 0 +934 -1.5268e-05 -0.00289296 0 +935 2.47981e-05 -0.00336596 0 +936 0.000200723 -0.000823709 0 +937 1.67515e-05 -0.00231423 0 +938 8.92909e-05 -0.000107467 0 +939 0.000449527 -0.00432107 0 +940 4.68896e-05 -4.90916e-05 0 +941 0.000303614 -0.0040904 0 +942 0.000124746 -0.000176078 0 +943 0.000198951 -0.000722312 0 +944 -6.68616e-06 -0.00244725 0 +945 0.000184662 -0.00385144 0 +946 0 0 0 +947 0.000186818 -0.000426392 0 +948 -2.12482e-05 -0.00302306 0 +949 0.000123397 -0.00141096 0 +950 0.000105666 -0.00153285 0 +951 0.000138739 -0.0012916 0 +952 8.57585e-05 -0.00165685 0 +953 0.000151334 -0.000255304 0 +954 5.78374e-05 -0.0034901 0 +955 0.000151518 -0.00117517 0 +956 6.39705e-05 -0.00178236 0 +957 0.000193829 -0.000625176 0 +958 -2.76318e-05 -0.00257697 0 +959 0.000161591 -0.00106193 0 +960 4.06867e-05 -0.0019087 0 +961 4.70046e-05 -5.21226e-05 0 +962 0.000167634 -0.000344858 0 +963 0.000168822 -0.000952115 0 +964 1.64514e-05 -0.00203498 0 +965 -1.52809e-05 -0.00314435 0 +966 8.81128e-05 -0.00011375 0 +967 0 0 0 +968 0.000185176 -0.000532304 0 +969 -4.41467e-05 -0.00270162 0 +970 0.000121063 -0.000185577 0 +971 0.000173071 -0.00084589 0 +972 -8.02587e-06 -0.00216017 0 +973 0.000117664 -0.0036014 0 +974 0.00017418 -0.000743408 0 +975 -3.17809e-05 -0.00228303 0 +976 0.000172737 -0.000443718 0 +977 -5.39294e-05 -0.00281927 0 +978 0.000144158 -0.00026767 0 +979 7.11527e-06 -0.00325459 0 +980 4.66307e-05 -5.51529e-05 0 +981 0.000574808 -0.00417074 0 +982 0 0 0 +983 0.000370256 -0.00393472 0 +984 0.00017197 -0.000644764 0 +985 -5.35808e-05 -0.0024021 0 +986 8.11161e-05 -0.00142023 0 +987 8.59942e-05 -0.000119928 0 +988 9.86699e-05 -0.0013042 0 +989 6.14191e-05 -0.00153778 0 +990 0.000212047 -0.00369708 0 +991 0.000113868 -0.00119015 0 +992 3.987e-05 -0.00165624 0 +993 0.000156246 -0.000359392 0 +994 -5.38951e-05 -0.0029277 0 +995 0.000126508 -0.0010785 0 +996 1.68347e-05 -0.00177496 0 +997 0.000116049 -0.000194732 0 +998 5.11538e-05 -0.00335129 0 +999 0.000166227 -0.000550054 0 +1000 -7.18356e-05 -0.00251571 0 +1001 0.000136437 -0.000969524 0 +1002 -7.20313e-06 -0.00189304 0 +1003 0.000143472 -0.000863531 0 +1004 -3.15999e-05 -0.00200952 0 +1005 0.000135371 -0.000279312 0 +1006 0 0 0 +1007 -4.0701e-05 -0.00302467 0 +1008 4.57608e-05 -5.81501e-05 0 +1009 0.0001567 -0.000459333 0 +1010 -8.45721e-05 -0.00262199 0 +1011 0.000147455 -0.000760704 0 +1012 -5.5535e-05 -0.00212318 0 +1013 8.2933e-05 -0.000125918 0 +1014 0.000123662 -0.00343187 0 +1015 0.000148172 -0.000661252 0 +1016 -7.79359e-05 -0.00223269 0 +1017 0.000143092 -0.000372657 0 +1018 -8.93608e-05 -0.00271881 0 +1019 0.000109746 -0.000203418 0 +1020 -9.70732e-06 -0.00310736 0 +1021 5.78868e-05 -0.00130814 0 +1022 3.84432e-05 -0.00141976 0 +1023 7.522e-05 -0.00119753 0 +1024 1.71796e-05 -0.0015318 0 +1025 0.000145413 -0.000565302 0 +1026 -9.7465e-05 -0.00233644 0 +1027 0 0 0 +1028 0.000695546 -0.00393295 0 +1029 9.02172e-05 -0.00108841 0 +1030 -5.56451e-06 -0.00164358 0 +1031 0.000426804 -0.00371393 0 +1032 4.43941e-05 -6.10733e-05 0 +1033 0.000233452 -0.00349335 0 +1034 0.000102666 -0.000981217 0 +1035 -2.93289e-05 -0.00175427 0 +1036 0.000125061 -0.000290044 0 +1037 -8.32805e-05 -0.00280386 0 +1038 0.000112378 -0.000876275 0 +1039 -5.35555e-05 -0.00186292 0 +1040 7.89571e-05 -0.000131649 0 +1041 0.000138899 -0.000473003 0 +1042 -0.00011246 -0.00243269 0 +1043 4.39035e-05 -0.00317307 0 +1044 0.000119151 -0.000773898 0 +1045 -7.74963e-05 -0.0019684 0 +1046 0.00010221 -0.000211508 0 +1047 -6.27934e-05 -0.00287439 0 +1048 0.000128333 -0.00038444 0 +1049 -0.000120876 -0.00251936 0 +1050 0 0 0 +1051 0.000122774 -0.000674327 0 +1052 -0.000100245 -0.00206943 0 +1053 4.25387e-05 -6.38878e-05 0 +1054 0.000127048 -0.00321658 0 +1055 0.000123005 -0.000577794 0 +1056 -0.000120626 -0.00216453 0 +1057 0.000113346 -0.000299718 0 +1058 1.70962e-05 -0.00130341 0 +1059 -0.00012029 -0.00259429 0 +1060 3.62378e-05 -0.00119718 0 +1061 -3.8406e-06 -0.00140961 0 +1062 7.40943e-05 -0.000137025 0 +1063 -2.37039e-05 -0.00292743 0 +1064 5.33045e-05 -0.00109155 0 +1065 -2.62279e-05 -0.00151516 0 +1066 6.80542e-05 -0.000986977 0 +1067 -4.96604e-05 -0.00161921 0 +1068 0.000119572 -0.000484477 0 +1069 -0.00013724 -0.00225205 0 +1070 0.000804186 -0.00361766 0 +1071 8.0256e-05 -0.00088393 0 +1072 -7.3598e-05 -0.0017209 0 +1073 0.000473697 -0.00342637 0 +1074 0 0 0 +1075 0.00024857 -0.00323256 0 +1076 9.35285e-05 -0.000218882 0 +1077 -0.000107764 -0.0026548 0 +1078 8.96965e-05 -0.000782751 0 +1079 -9.74113e-05 -0.00181914 0 +1080 0.00011215 -0.000394554 0 +1081 -0.000148334 -0.0023301 0 +1082 4.02068e-05 -6.6552e-05 0 +1083 3.94069e-05 -0.00295896 0 +1084 9.61346e-05 -0.000683792 0 +1085 -0.000120254 -0.00191276 0 +1086 6.84012e-05 -0.000141989 0 +1087 -7.97999e-05 -0.00269815 0 +1088 0.000100371 -0.000308159 0 +1089 9.93277e-05 -0.000587312 0 +1090 -0.000141156 -0.00200037 0 +1091 -0.000151873 -0.00239661 0 +1092 0 0 0 +1093 0.000133345 -0.0029646 0 +1094 -2.44148e-06 -0.00118914 0 +1095 -2.30059e-05 -0.0012901 0 +1096 9.89783e-05 -0.00049359 0 +1097 -0.00015884 -0.00208046 0 +1098 1.63707e-05 -0.00108781 0 +1099 -4.50047e-05 -0.00139004 0 +1100 3.31357e-05 -0.000986713 0 +1101 -6.80297e-05 -0.00148821 0 +1102 8.3797e-05 -0.000225424 0 +1103 -0.000145352 -0.00244921 0 +1104 3.74239e-05 -6.90312e-05 0 +1105 4.76048e-05 -0.000886329 0 +1106 -9.16149e-05 -0.00158375 0 +1107 -3.22517e-05 -0.00272077 0 +1108 9.47673e-05 -0.00040283 0 +1109 -0.000171876 -0.00215129 0 +1110 5.95239e-05 -0.000787114 0 +1111 -0.000115151 -0.00167565 0 +1112 0.000874364 -0.00322556 0 +1113 0.000511012 -0.00308554 0 +1114 6.86495e-05 -0.000689449 0 +1115 -0.000137931 -0.00176283 0 +1116 0.000267551 -0.00293953 0 +1117 6.19371e-05 -0.00014644 0 +1118 -0.000125925 -0.00248532 0 +1119 8.63026e-05 -0.000315258 0 +1120 -0.000178419 -0.00221101 0 +1121 0 0 0 +1122 4.02113e-05 -0.00271901 0 +1123 7.47085e-05 -0.000593696 0 +1124 -0.000159043 -0.00184402 0 +1125 7.74103e-05 -0.000500157 0 +1126 -0.000177435 -0.00191783 0 +1127 3.42163e-05 -7.12864e-05 0 +1128 7.31486e-05 -0.000231034 0 +1129 -0.000176468 -0.00225748 0 +1130 -9.00701e-05 -0.00250203 0 +1131 -4.01673e-05 -0.00117361 0 +1132 -1.9985e-05 -0.00107736 0 +1133 -6.17354e-05 -0.00126858 0 +1134 -1.52551e-06 -0.000980457 0 +1135 -8.43304e-05 -0.00136153 0 +1136 7.64125e-05 -0.000409131 0 +1137 -0.000191787 -0.00198272 0 +1138 0.000143704 -0.00268801 0 +1139 1.49284e-05 -0.000883482 0 +1140 -0.000107479 -0.00145167 0 +1141 2.91012e-05 -0.000786918 0 +1142 -0.000130672 -0.00153806 0 +1143 5.47865e-05 -0.00015034 0 +1144 -0.000163435 -0.00228849 0 +1145 0 0 0 +1146 -3.38032e-05 -0.00249616 0 +1147 4.07235e-05 -0.000691243 0 +1148 -0.000153216 -0.00161969 0 +1149 7.13321e-05 -0.000320868 0 +1150 -0.000200597 -0.002037 0 +1151 4.95178e-05 -0.000596839 0 +1152 -0.000174367 -0.00169541 0 +1153 0.000915782 -0.00282182 0 +1154 0.000540033 -0.00272542 0 +1155 3.0627e-05 -7.32864e-05 0 +1156 0.0002862 -0.00262359 0 +1157 -0.000136647 -0.00230156 0 +1158 6.17123e-05 -0.00023562 0 +1159 -0.000202027 -0.00207887 0 +1160 5.51739e-05 -0.000504104 0 +1161 -0.000193116 -0.00176398 0 +1162 4.78219e-05 -0.00246439 0 +1163 5.7356e-05 -0.000413354 0 +1164 -0.000208403 -0.00182402 0 +1165 -5.51984e-05 -0.0010604 0 +1166 -7.63499e-05 -0.00115094 0 +1167 4.70375e-05 -0.000153593 0 +1168 -3.54039e-05 -0.000968355 0 +1169 -9.84824e-05 -0.00123931 0 +1170 -0.000194024 -0.00210636 0 +1171 0 0 0 +1172 -9.25409e-05 -0.00229415 0 +1173 -1.72773e-05 -0.00087543 0 +1174 -0.000121188 -0.00132472 0 +1175 -1.12607e-06 -0.000782186 0 +1176 -0.000143955 -0.00140634 0 +1177 5.56657e-05 -0.000324932 0 +1178 -0.000218808 -0.00187403 0 +1179 0.000160215 -0.00240381 0 +1180 1.27706e-05 -0.000689119 0 +1181 -0.000166204 -0.00148322 0 +1182 2.66958e-05 -7.49981e-05 0 +1183 -0.000174142 -0.0021175 0 +1184 2.41112e-05 -0.000596697 0 +1185 -0.000187209 -0.00155433 0 +1186 -2.76958e-05 -0.00226395 0 +1187 4.9657e-05 -0.000239109 0 +1188 -0.000222878 -0.00191246 0 +1189 3.25906e-05 -0.000505334 0 +1190 -0.000206147 -0.00161854 0 +1191 0.000913341 -0.0024227 0 +1192 0.000558283 -0.00237034 0 +1193 0 0 0 +1194 -0.000139692 -0.00211026 0 +1195 0.000308631 -0.00231342 0 +1196 3.87978e-05 -0.000156188 0 +1197 -0.000218695 -0.00193765 0 +1198 3.78564e-05 -0.000415431 0 +1199 -0.000222002 -0.00167465 0 +1200 6.22646e-05 -0.00220889 0 +1201 -8.87215e-05 -0.00103732 0 +1202 -6.79764e-05 -0.000950677 0 +1203 -0.000110426 -0.00112165 0 +1204 -4.85235e-05 -0.000862387 0 +1205 -0.000132665 -0.00120296 0 +1206 3.95242e-05 -0.000327349 0 +1207 -0.000233628 -0.00172134 0 +1208 -3.0698e-05 -0.000773029 0 +1209 -0.00015501 -0.00128046 0 +1210 2.24811e-05 -7.63972e-05 0 +1211 -0.000204374 -0.00194801 0 +1212 -8.76593e-05 -0.00208298 0 +1213 -1.47967e-05 -0.000683168 0 +1214 -0.000176881 -0.00135329 0 +1215 3.71367e-05 -0.000241445 0 +1216 -0.000239656 -0.00175728 0 +1217 -1.12975e-06 -0.000593285 0 +1218 -0.000197686 -0.00142052 0 +1219 0.000180965 -0.00212902 0 +1220 0 0 0 +1221 9.98582e-06 -0.000503869 0 +1222 -0.000216621 -0.00148114 0 +1223 -0.00017748 -0.0019419 0 +1224 3.01784e-05 -0.000158039 0 +1225 -0.000238564 -0.00178108 0 +1226 -1.49258e-05 -0.00203434 0 +1227 1.82049e-05 -0.000415334 0 +1228 -0.000232869 -0.00153408 0 +1229 0.000886289 -0.00206343 0 +1230 0.000567859 -0.0020485 0 +1231 -0.000135754 -0.0019182 0 +1232 2.31365e-05 -0.000328119 0 +1233 -0.000245338 -0.00157821 0 +1234 1.80333e-05 -7.74601e-05 0 +1235 0.000330412 -0.00202641 0 +1236 -0.000228605 -0.00179144 0 +1237 -9.87818e-05 -0.000927786 0 +1238 -0.000120087 -0.00100859 0 +1239 -7.83678e-05 -0.000844592 0 +1240 -0.000141917 -0.00108634 0 +1241 -5.91988e-05 -0.000759635 0 +1242 -0.000163829 -0.0011603 0 +1243 8.12342e-05 -0.0019645 0 +1244 2.43421e-05 -0.000242592 0 +1245 -4.15867e-05 -0.000673483 0 +1246 -0.000185342 -0.00122969 0 +1247 -0.000252938 -0.00161239 0 +1248 0 0 0 +1249 -2.58556e-05 -0.000586677 0 +1250 -0.000205866 -0.00129367 0 +1251 -0.000207887 -0.0017871 0 +1252 -7.65875e-05 -0.00187596 0 +1253 -1.23199e-05 -0.000499713 0 +1254 -0.000224747 -0.00135134 0 +1255 2.13018e-05 -0.000159165 0 +1256 -0.000254251 -0.00163543 0 +1257 0.000202527 -0.00187527 0 +1258 -1.33213e-06 -0.000413072 0 +1259 -0.000241194 -0.00140176 0 +1260 -0.000174412 -0.00176719 0 +1261 1.3422e-05 -7.81715e-05 0 +1262 -0.000247897 -0.0016463 0 +1263 2.13611e-06 -0.00181569 0 +1264 6.73408e-06 -0.000327197 0 +1265 -0.000254324 -0.00144393 0 +1266 -0.000127391 -0.000900152 0 +1267 -0.000106386 -0.000822431 0 +1268 -0.000148856 -0.000974815 0 +1269 0.000838363 -0.00179159 0 +1270 1.14393e-05 -0.000242535 0 +1271 -0.000263106 -0.00147691 0 +1272 0.000568015 -0.0017803 0 +1273 -8.62224e-05 -0.000742275 0 +1274 -0.000170407 -0.00104574 0 +1275 0 0 0 +1276 -0.000126156 -0.00173118 0 +1277 -0.000232182 -0.00164397 0 +1278 0.000347534 -0.00177129 0 +1279 -6.72188e-05 -0.000660288 0 +1280 -0.000191559 -0.00111222 0 +1281 -4.97095e-05 -0.000577009 0 +1282 -0.00021183 -0.00117349 0 +1283 0.000101606 -0.00173883 0 +1284 1.22921e-05 -0.0001595 0 +1285 -0.000266405 -0.00149968 0 +1286 -3.40115e-05 -0.000492984 0 +1287 -0.000230578 -0.00122874 0 +1288 -0.000205518 -0.00162787 0 +1289 -6.14461e-05 -0.00167948 0 +1290 -2.04688e-05 -0.000408693 0 +1291 -0.000247165 -0.00127715 0 +1292 8.70431e-06 -7.85202e-05 0 +1293 -0.000262954 -0.00151139 0 +1294 -9.45234e-06 -0.000324643 0 +1295 -0.000260753 -0.00131786 0 +1296 0.000221762 -0.00164986 0 +1297 -0.000166227 -0.00159756 0 +1298 0 0 0 +1299 -0.000251395 -0.00151125 0 +1300 -1.37596e-06 -0.000241279 0 +1301 -0.000270514 -0.00135006 0 +1302 2.08873e-05 -0.00161352 0 +1303 -0.00013223 -0.00079631 0 +1304 -0.000153452 -0.000868304 0 +1305 -0.000111421 -0.000721281 0 +1306 -0.000174703 -0.000936638 0 +1307 -9.13596e-05 -0.000643809 0 +1308 -0.000195578 -0.00100065 0 +1309 3.27653e-06 -0.00015909 0 +1310 -0.000275398 -0.00137287 0 +1311 -7.23802e-05 -0.000564463 0 +1312 -0.000215598 -0.00105966 0 +1313 0.000783611 -0.00156918 0 +1314 0.000556644 -0.00155826 0 +1315 -0.000230347 -0.00149878 0 +1316 -0.000112866 -0.00155358 0 +1317 0.000357834 -0.00155576 0 +1318 -5.47985e-05 -0.000483779 0 +1319 -0.000234239 -0.00111295 0 +1320 3.95488e-06 -7.85016e-05 0 +1321 -0.000274383 -0.00138563 0 +1322 0.000120457 -0.00153635 0 +1323 -3.89553e-05 -0.000402282 0 +1324 -0.000250885 -0.00115979 0 +1325 -0.000198423 -0.00147376 0 +1326 -2.52013e-05 -0.000320471 0 +1327 -0.000264856 -0.00119943 0 +1328 -4.46593e-05 -0.00149701 0 +1329 0 0 0 +1330 -0.000266271 -0.00138766 0 +1331 -1.39406e-05 -0.000238849 0 +1332 -0.000275376 -0.00123116 0 +1333 0.000234848 -0.00145282 0 +1334 -0.000154493 -0.00143658 0 +1335 -5.61899e-06 -0.000157897 0 +1336 -0.000281593 -0.00125427 0 +1337 -0.000249918 -0.00137864 0 +1338 -0.00015558 -0.000766733 0 +1339 -0.00013448 -0.000697048 0 +1340 -0.000176667 -0.000832846 0 +1341 -0.000113695 -0.000624378 0 +1342 -0.000197337 -0.000894782 0 +1343 3.86473e-05 -0.00143022 0 +1344 -9.35672e-05 -0.000549276 0 +1345 -0.000217196 -0.000951922 0 +1346 -7.44042e-05 -0.000472299 0 +1347 -0.000235735 -0.00100361 0 +1348 -7.67646e-07 -7.81174e-05 0 +1349 -0.000282585 -0.00126818 0 +1350 -0.000224181 -0.00135839 0 +1351 0.00073331 -0.0013832 0 +1352 -5.6536e-05 -0.00039396 0 +1353 -0.000252457 -0.00104923 0 +1354 -9.77109e-05 -0.0013882 0 +1355 0.000537638 -0.00137349 0 +1356 0.000358768 -0.00136824 0 +1357 -4.03005e-05 -0.000314793 0 +1358 -0.000266721 -0.00108809 0 +1359 0 0 0 +1360 -0.000277365 -0.00127237 0 +1361 0.000135178 -0.00135678 0 +1362 -2.60708e-05 -0.000235291 0 +1363 -0.000277898 -0.00111961 0 +1364 -0.000188034 -0.00132729 0 +1365 -2.80318e-05 -0.00133042 0 +1366 -0.000264953 -0.00126656 0 +1367 -1.42737e-05 -0.00015599 0 +1368 -0.000285214 -0.00114317 0 +1369 -0.000155147 -0.000670003 0 +1370 -0.000176207 -0.000734218 0 +1371 -0.000133976 -0.000602321 0 +1372 -0.000196818 -0.000794402 0 +1373 0.000241833 -0.00128067 0 +1374 -0.000140877 -0.0012861 0 +1375 -5.38998e-06 -7.73747e-05 0 +1376 -0.000113023 -0.000531716 0 +1377 -0.000216592 -0.000849992 0 +1378 -0.00028791 -0.00115829 0 +1379 -0.000244367 -0.00125065 0 +1380 -9.25924e-05 -0.000458723 0 +1381 -0.000235116 -0.000900404 0 +1382 5.36939e-05 -0.00126595 0 +1383 -7.29988e-05 -0.000383873 0 +1384 -0.000251914 -0.00094507 0 +1385 0 0 0 +1386 -0.000285129 -0.00116453 0 +1387 -5.45574e-05 -0.000307679 0 +1388 -0.000266466 -0.000983412 0 +1389 -0.000214802 -0.00122495 0 +1390 0.000682521 -0.00122347 0 +1391 -8.2363e-05 -0.00123628 0 +1392 0.000512887 -0.00121311 0 +1393 -3.76206e-05 -0.00023067 0 +1394 0.000353249 -0.00120664 0 +1395 -0.000278191 -0.0010149 0 +1396 -0.000276038 -0.0011617 0 +1397 0.000145198 -0.00119797 0 +1398 -2.25707e-05 -0.000153358 0 +1399 -0.000286458 -0.00103902 0 +1400 -0.000175609 -0.00119011 0 +1401 -0.000259834 -0.0011497 0 +1402 -1.32325e-05 -0.00117991 0 +1403 -9.85718e-06 -7.62878e-05 0 +1404 -0.000290591 -0.00105536 0 +1405 -0.000173218 -0.000640616 0 +1406 -0.000151979 -0.000578031 0 +1407 -0.000193916 -0.000699323 0 +1408 -0.000130527 -0.000512088 0 +1409 -0.000213755 -0.000753632 0 +1410 -0.000109147 -0.000443308 0 +1411 -0.000232341 -0.000803013 0 +1412 0 0 0 +1413 -0.000289875 -0.00106357 0 +1414 0.000242829 -0.00113021 0 +1415 -8.8139e-05 -0.000372197 0 +1416 -0.00024929 -0.000846963 0 +1417 -0.0001266 -0.00114727 0 +1418 -0.000235768 -0.00112884 0 +1419 -6.77957e-05 -0.000299282 0 +1420 -0.000264123 -0.000884964 0 +1421 6.52438e-05 -0.00111945 0 +1422 -0.000283607 -0.00106348 0 +1423 -4.84336e-05 -0.000225064 0 +1424 -0.000276366 -0.000916566 0 +1425 -0.000203371 -0.00109962 0 +1426 -6.80359e-05 -0.00109809 0 +1427 -3.04063e-05 -0.00015009 0 +1428 -0.000285457 -0.000941309 0 +1429 0.00063505 -0.00108367 0 +1430 0.000484832 -0.00107291 0 +1431 0.00034158 -0.00106607 0 +1432 -0.000271082 -0.00105504 0 +1433 -1.41037e-05 -7.48741e-05 0 +1434 -0.000290836 -0.000958864 0 +1435 0.000150367 -0.001058 0 +1436 -0.000162296 -0.00106299 0 +1437 -0.000167551 -0.0005519 0 +1438 -0.00018855 -0.000609359 0 +1439 -0.00014591 -0.000490714 0 +1440 -0.000208604 -0.000662611 0 +1441 -0.000251715 -0.00103848 0 +1442 0 0 0 +1443 -0.000291891 -0.000968916 0 +1444 -9.40032e-07 -0.00104456 0 +1445 -0.000123901 -0.000426292 0 +1446 -0.000227395 -0.000711175 0 +1447 -0.000101797 -0.000359127 0 +1448 -0.000244568 -0.000754593 0 +1449 -7.98655e-05 -0.000289715 0 +1450 -0.000259734 -0.000792411 0 +1451 -0.000288018 -0.00097135 0 +1452 0.000238638 -0.00099805 0 +1453 -0.000112818 -0.00102028 0 +1454 -0.00022501 -0.00101426 0 +1455 -5.83923e-05 -0.000218569 0 +1456 -0.00027247 -0.000824223 0 +1457 7.29229e-05 -0.000989076 0 +1458 -3.76817e-05 -0.000146202 0 +1459 -0.000282314 -0.000849645 0 +1460 -0.000278649 -0.000966117 0 +1461 -1.80829e-05 -7.31591e-05 0 +1462 -0.000288781 -0.000868377 0 +1463 -0.000190751 -0.000983143 0 +1464 -5.54677e-05 -0.000973069 0 +1465 0.000587289 -0.000960515 0 +1466 0.000454579 -0.000949393 0 +1467 -0.000263236 -0.000953435 0 +1468 0.000326277 -0.000941784 0 +1469 0 0 0 +1470 -0.000291359 -0.000880174 0 +1471 0.000151046 -0.000933897 0 +1472 -0.00018057 -0.000524336 0 +1473 -0.000159041 -0.000467933 0 +1474 -0.000201053 -0.000576717 0 +1475 -0.000136711 -0.000407958 0 +1476 -0.000220201 -0.000624632 0 +1477 -0.000148965 -0.000946199 0 +1478 -0.000113832 -0.000344872 0 +1479 -0.000237728 -0.000667668 0 +1480 -0.000289548 -0.000884919 0 +1481 -0.000241422 -0.000933667 0 +1482 -9.06389e-05 -0.000279156 0 +1483 -0.000253292 -0.000705414 0 +1484 8.38487e-06 -0.000923349 0 +1485 -6.73785e-05 -0.000211289 0 +1486 -0.00026655 -0.000737517 0 +1487 -0.000282845 -0.000882602 0 +1488 -4.43179e-05 -0.000141789 0 +1489 -0.000277103 -0.000763631 0 +1490 -0.000212905 -0.000907464 0 +1491 -0.000100123 -0.000904748 0 +1492 0.000230346 -0.000881052 0 +1493 -2.1742e-05 -7.11685e-05 0 +1494 -0.000284552 -0.000783509 0 +1495 -0.000270831 -0.000873386 0 +1496 7.69593e-05 -0.000872953 0 +1497 0 0 0 +1498 -0.00028847 -0.000796928 0 +1499 -0.00017777 -0.000875706 0 +1500 -4.5103e-05 -0.000860383 0 +1501 0.000541353 -0.000850972 0 +1502 -0.000253136 -0.000857603 0 +1503 0.000422876 -0.000839914 0 +1504 -0.000169835 -0.000444083 0 +1505 -0.000190978 -0.000495746 0 +1506 -0.000288428 -0.000803807 0 +1507 0.000307548 -0.00083214 0 +1508 -0.000147485 -0.000388576 0 +1509 -0.000210687 -0.000543156 0 +1510 -0.000124144 -0.00032965 0 +1511 -0.000228714 -0.000585931 0 +1512 -0.000100016 -0.000267749 0 +1513 0.000147945 -0.000823814 0 +1514 -0.000244787 -0.000623702 0 +1515 -0.000136223 -0.000839476 0 +1516 -0.000284031 -0.000804125 0 +1517 -7.531e-05 -0.000203337 0 +1518 -0.000258613 -0.000656148 0 +1519 -0.000229572 -0.000835781 0 +1520 1.47362e-05 -0.000814716 0 +1521 -5.02408e-05 -0.000136895 0 +1522 -0.000269873 -0.000682972 0 +1523 -0.000274889 -0.000798042 0 +1524 -2.50459e-05 -6.89358e-05 0 +1525 -0.000278233 -0.000703948 0 +1526 -0.000200084 -0.000808662 0 +1527 -8.89974e-05 -0.000800116 0 +1528 0.000218639 -0.000777308 0 +1529 0 0 0 +1530 -0.000283339 -0.000718895 0 +1531 -0.000260746 -0.000785824 0 +1532 7.76135e-05 -0.000769381 0 +1533 -0.00028485 -0.000727732 0 +1534 -0.0001649 -0.000777157 0 +1535 -0.000178246 -0.000419501 0 +1536 -0.000156155 -0.000368427 0 +1537 -0.000198746 -0.000466519 0 +1538 -0.000132658 -0.000313684 0 +1539 -0.000217465 -0.000509131 0 +1540 -3.7038e-05 -0.000758959 0 +1541 -0.000241363 -0.000767931 0 +1542 -0.000282419 -0.000730458 0 +1543 0.000495624 -0.00075382 0 +1544 -0.000107922 -0.000255677 0 +1545 -0.000234182 -0.000546996 0 +1546 0.000390191 -0.000742621 0 +1547 0.000286709 -0.000734344 0 +1548 -8.21122e-05 -0.000194833 0 +1549 -0.000248667 -0.000579829 0 +1550 -5.54002e-05 -0.000131613 0 +1551 0.000141511 -0.000725752 0 +1552 -0.000260663 -0.000607358 0 +1553 -0.000275759 -0.000727196 0 +1554 -0.000124473 -0.000742375 0 +1555 -0.000216763 -0.000744983 0 +1556 -2.79577e-05 -6.64923e-05 0 +1557 -0.0002699 -0.000629393 0 +1558 1.82738e-05 -0.000717476 0 +1559 0 0 0 +1560 -0.000276101 -0.000645765 0 +1561 -0.000264611 -0.000718189 0 +1562 -0.000187016 -0.000717745 0 +1563 -0.000278977 -0.000656416 0 +1564 -7.95809e-05 -0.000705485 0 +1565 0.000204265 -0.00068486 0 +1566 -0.000248835 -0.000703817 0 +1567 7.53035e-05 -0.000676888 0 +1568 -0.000278272 -0.000661335 0 +1569 -0.000162696 -0.000347783 0 +1570 -0.000184264 -0.000394509 0 +1571 -0.000139334 -0.000297192 0 +1572 -0.000203896 -0.000437037 0 +1573 -0.000114308 -0.0002431 0 +1574 -0.000221431 -0.000475058 0 +1575 -0.000152553 -0.000687168 0 +1576 -8.77402e-05 -0.000185898 0 +1577 -0.000236693 -0.000508306 0 +1578 -0.000273721 -0.00066064 0 +1579 -0.000228372 -0.000684614 0 +1580 -3.12636e-05 -0.000667734 0 +1581 -5.97491e-05 -0.000126005 0 +1582 -0.000249487 -0.000536544 0 +1583 0.000451346 -0.000666892 0 +1584 0.000356863 -0.000655855 0 +1585 0.00026381 -0.000647501 0 +1586 -3.04554e-05 -6.38763e-05 0 +1587 -0.000259609 -0.000559591 0 +1588 -0.000265161 -0.00065453 0 +1589 0.000132369 -0.000638292 0 +1590 0 0 0 +1591 -0.000266835 -0.00057731 0 +1592 -0.000113895 -0.000654235 0 +1593 -0.000203347 -0.000661229 0 +1594 1.92061e-05 -0.000630271 0 +1595 -0.000270955 -0.000589638 0 +1596 -0.000252424 -0.000643339 0 +1597 -0.00027175 -0.000596577 0 +1598 -0.00017402 -0.000634469 0 +1599 -7.19162e-05 -0.000620063 0 +1600 0.000187606 -0.000602446 0 +1601 -0.00016711 -0.000326902 0 +1602 -0.00023553 -0.000627518 0 +1603 -0.000144157 -0.000280389 0 +1604 -0.000187918 -0.000369416 0 +1605 -0.000119151 -0.000230189 0 +1606 -0.000206478 -0.000407638 0 +1607 -0.000269042 -0.000598218 0 +1608 -9.21623e-05 -0.000176651 0 +1609 -0.000222672 -0.000441327 0 +1610 7.03864e-05 -0.000594117 0 +1611 -6.32666e-05 -0.000120158 0 +1612 -0.000236365 -0.000470263 0 +1613 -0.000140872 -0.000605194 0 +1614 -3.25189e-05 -6.11213e-05 0 +1615 -0.000247407 -0.000494288 0 +1616 -0.00026267 -0.000594745 0 +1617 -0.000214506 -0.000607621 0 +1618 -2.76114e-05 -0.000585656 0 +1619 0 0 0 +1620 0.000407477 -0.00058952 0 +1621 -0.000255645 -0.000513272 0 +1622 0.000323096 -0.000578427 0 +1623 0.000239608 -0.000569707 0 +1624 -0.000252552 -0.000586434 0 +1625 -0.00026091 -0.000527168 0 +1626 0.000120829 -0.00056009 0 +1627 -0.00010455 -0.000574364 0 +1628 -0.000189641 -0.000584346 0 +1629 -0.000263063 -0.00053597 0 +1630 1.78544e-05 -0.00055201 0 +1631 -0.000238659 -0.000573678 0 +1632 -0.000261946 -0.000539763 0 +1633 -0.00014714 -0.000263481 0 +1634 -0.000169426 -0.000306037 0 +1635 -0.000161251 -0.000558423 0 +1636 -0.000122444 -0.000217106 0 +1637 -0.000189257 -0.000344505 0 +1638 -6.58936e-05 -0.000542903 0 +1639 -9.53682e-05 -0.000167214 0 +1640 -0.000206572 -0.000378654 0 +1641 0.00016913 -0.000528698 0 +1642 -0.00022108 -0.000556952 0 +1643 -6.59315e-05 -0.000114143 0 +1644 -0.000221293 -0.000408286 0 +1645 -0.000257478 -0.000538699 0 +1646 -3.41389e-05 -5.82669e-05 0 +1647 -0.000233334 -0.000433253 0 +1648 6.32077e-05 -0.000519922 0 +1649 0 0 0 +1650 -0.000242591 -0.000453443 0 +1651 -0.00012994 -0.000530714 0 +1652 -0.000249567 -0.000533023 0 +1653 -0.000199998 -0.000536851 0 +1654 -0.000248964 -0.000468807 0 +1655 -2.58675e-05 -0.00051172 0 +1656 0.00036485 -0.000520034 0 +1657 0.000289045 -0.000509128 0 +1658 0.000214038 -0.000500344 0 +1659 -0.000252346 -0.000479345 0 +1660 -0.000238249 -0.000523071 0 +1661 0.000107319 -0.000489988 0 +1662 -0.000175742 -0.000514016 0 +1663 -9.6342e-05 -0.000502016 0 +1664 -0.000252656 -0.000485125 0 +1665 -0.000223558 -0.000509248 0 +1666 1.44784e-05 -0.000481603 0 +1667 -0.000148315 -0.000246657 0 +1668 -0.00012421 -0.000204 0 +1669 -0.000169701 -0.000285407 0 +1670 -0.00024982 -0.000486287 0 +1671 -9.73633e-05 -0.000157697 0 +1672 -0.00018836 -0.000320037 0 +1673 -6.77492e-05 -0.000108035 0 +1674 -0.000204281 -0.000350361 0 +1675 -0.000148759 -0.000489188 0 +1676 -3.53106e-05 -5.53462e-05 0 +1677 -0.000217427 -0.000376245 0 +1678 -6.13222e-05 -0.000473194 0 +1679 -0.000205718 -0.000492075 0 +1680 -0.000243816 -0.000483035 0 +1681 0.000148989 -0.00046264 0 +1682 0 0 0 +1683 -0.000227761 -0.000397584 0 +1684 -0.000235224 -0.000414337 0 +1685 5.40982e-05 -0.000453185 0 +1686 -0.000234656 -0.000475664 0 +1687 -0.000119643 -0.000463089 0 +1688 -0.000239778 -0.0004265 0 +1689 -0.000184952 -0.000472092 0 +1690 -2.57486e-05 -0.000444971 0 +1691 -0.000241366 -0.000434138 0 +1692 0.000322711 -0.000458045 0 +1693 0.000254752 -0.000447091 0 +1694 -0.000222432 -0.000464524 0 +1695 0.000187527 -0.000437927 0 +1696 9.20201e-05 -0.000426958 0 +1697 -0.00023998 -0.000437368 0 +1698 -0.00016171 -0.000449964 0 +1699 -8.90897e-05 -0.00043649 0 +1700 -0.000124478 -0.000191023 0 +1701 -0.000147735 -0.000230097 0 +1702 -9.81659e-05 -0.000148212 0 +1703 -0.000168002 -0.00026523 0 +1704 -0.000207297 -0.000450061 0 +1705 -6.87206e-05 -0.000101909 0 +1706 -0.00018532 -0.00029625 0 +1707 9.43027e-06 -0.00041802 0 +1708 -0.0002356 -0.000436373 0 +1709 -3.60362e-05 -5.23972e-05 0 +1710 -0.00019972 -0.000323029 0 +1711 0 0 0 +1712 -0.000211211 -0.000345477 0 +1713 -0.000136439 -0.000426302 0 +1714 -0.000219802 -0.000363551 0 +1715 -5.78967e-05 -0.000410075 0 +1716 -0.000228294 -0.000431407 0 +1717 -0.000189505 -0.00043275 0 +1718 0.000127467 -0.000403137 0 +1719 -0.000225487 -0.000377252 0 +1720 4.33361e-05 -0.000392864 0 +1721 -0.000218124 -0.000422772 0 +1722 -0.000228275 -0.000386635 0 +1723 -0.000109814 -0.000401823 0 +1724 -0.000169399 -0.000413157 0 +1725 -2.68878e-05 -0.000384504 0 +1726 -0.000228175 -0.000391806 0 +1727 -0.000205279 -0.00041086 0 +1728 0.000281761 -0.000402004 0 +1729 0.000220244 -0.000391243 0 +1730 0.000159872 -0.000381903 0 +1731 -0.000225225 -0.000392925 0 +1732 -0.000123302 -0.000178297 0 +1733 -9.78103e-05 -0.000138855 0 +1734 -0.000145468 -0.000213962 0 +1735 -0.000147422 -0.000391832 0 +1736 -6.8872e-05 -9.58255e-05 0 +1737 -0.000164423 -0.000245684 0 +1738 7.52294e-05 -0.000369822 0 +1739 -8.2467e-05 -0.000377115 0 +1740 -3.63235e-05 -4.94504e-05 0 +1741 -0.000180249 -0.00027335 0 +1742 -0.00018995 -0.000396076 0 +1743 0 0 0 +1744 -0.000193025 -0.000296872 0 +1745 -0.000219486 -0.000390215 0 +1746 3.0923e-06 -0.000360303 0 +1747 -0.000202799 -0.000316217 0 +1748 -0.000209632 -0.000331383 0 +1749 -0.000124116 -0.00036939 0 +1750 -0.000211066 -0.000383943 0 +1751 -0.000172486 -0.000378924 0 +1752 -5.5237e-05 -0.000352838 0 +1753 -0.000213562 -0.000342423 0 +1754 0.000104511 -0.000349167 0 +1755 -0.000214655 -0.00034943 0 +1756 -0.000200117 -0.000374447 0 +1757 3.13315e-05 -0.000337901 0 +1758 -0.000100099 -0.000346374 0 +1759 -0.000153236 -0.000359865 0 +1760 -0.000212963 -0.00035255 0 +1761 -2.88081e-05 -0.000329455 0 +1762 -0.000186854 -0.000362088 0 +1763 -9.63357e-05 -0.000129724 0 +1764 -0.000120735 -0.000165955 0 +1765 -6.82208e-05 -8.9857e-05 0 +1766 -0.000141591 -0.000198401 0 +1767 0.000241371 -0.000351697 0 +1768 0.000185365 -0.000340774 0 +1769 -3.61831e-05 -4.654e-05 0 +1770 -0.000159058 -0.00022695 0 +1771 -0.000208591 -0.000351981 0 +1772 0.000131228 -0.000330686 0 +1773 0 0 0 +1774 -0.000173263 -0.000251529 0 +1775 -0.000132725 -0.000339465 0 +1776 -7.60629e-05 -0.000323362 0 +1777 5.71556e-05 -0.000317588 0 +1778 -0.000184326 -0.000272103 0 +1779 -0.00017156 -0.000347295 0 +1780 -0.00020164 -0.000347959 0 +1781 -0.000192342 -0.000288678 0 +1782 -4.04828e-06 -0.000307469 0 +1783 -0.000197412 -0.0003013 0 +1784 -0.000111456 -0.000318167 0 +1785 -0.000192289 -0.000340784 0 +1786 -0.000199625 -0.000310058 0 +1787 -0.000154579 -0.000330488 0 +1788 -5.27381e-05 -0.000300792 0 +1789 8.0391e-05 -0.000299457 0 +1790 -0.000199087 -0.000315084 0 +1791 -0.000180722 -0.000330771 0 +1792 1.85537e-05 -0.000287134 0 +1793 -9.01014e-05 -0.000296528 0 +1794 -0.000136344 -0.000312144 0 +1795 -0.000195908 -0.000316558 0 +1796 -9.37962e-05 -0.0001209 0 +1797 -6.6808e-05 -8.40494e-05 0 +1798 -0.000116855 -0.000154096 0 +1799 -3.56322e-05 -4.36928e-05 0 +1800 -0.000136196 -0.000183543 0 +1801 -3.08614e-05 -0.000279135 0 +1802 0 0 0 +1803 -0.00015202 -0.000209168 0 +1804 -0.00016722 -0.000318307 0 +1805 -0.000164491 -0.000230949 0 +1806 -0.000190227 -0.000314693 0 +1807 0.000202621 -0.000304898 0 +1808 0.000149967 -0.000294199 0 +1809 0.00010112 -0.000283499 0 +1810 -0.000173773 -0.000248888 0 +1811 -0.000117333 -0.000292681 0 +1812 -6.92579e-05 -0.000274883 0 +1813 3.81968e-05 -0.00026873 0 +1814 -0.000179999 -0.000263037 0 +1815 -0.000182209 -0.000309755 0 +1816 -0.000152082 -0.000303751 0 +1817 -0.000183315 -0.000273477 0 +1818 -1.11305e-05 -0.000258618 0 +1819 -0.000172057 -0.000302032 0 +1820 -0.000183848 -0.000280334 0 +1821 -9.81214e-05 -0.00027256 0 +1822 -0.000135701 -0.000287545 0 +1823 -4.97277e-05 -0.000253719 0 +1824 -0.00018175 -0.000283772 0 +1825 5.50646e-05 -0.000252177 0 +1826 -0.000160019 -0.000291862 0 +1827 -6.46627e-05 -7.84699e-05 0 +1828 -9.02449e-05 -0.000112464 0 +1829 5.93641e-06 -0.000239545 0 +1830 -3.46873e-05 -4.09385e-05 0 +1831 -0.000111731 -0.000142831 0 +1832 -0.000177169 -0.000283989 0 +1833 0 0 0 +1834 -0.000129376 -0.00016951 0 +1835 -0.000118493 -0.00027005 0 +1836 -7.92622e-05 -0.000252087 0 +1837 -0.000143417 -0.000192483 0 +1838 -0.000154061 -0.000211759 0 +1839 -0.000146382 -0.000279582 0 +1840 -3.20526e-05 -0.000233081 0 +1841 -0.000170291 -0.000281227 0 +1842 -0.000161505 -0.00022739 0 +1843 0.000164715 -0.000261281 0 +1844 0.000113392 -0.000249926 0 +1845 6.95643e-05 -0.000237211 0 +1846 -0.000100958 -0.000251708 0 +1847 -0.000165925 -0.000239458 0 +1848 -6.14394e-05 -0.000231642 0 +1849 -0.000161312 -0.000275747 0 +1850 1.96182e-05 -0.000221906 0 +1851 -0.000131496 -0.000265569 0 +1852 -0.000167499 -0.000248082 0 +1853 -1.71551e-05 -0.00021341 0 +1854 -0.000166397 -0.000253418 0 +1855 -0.000150476 -0.00026786 0 +1856 -8.3615e-05 -0.00023272 0 +1857 -0.000115733 -0.000250171 0 +1858 -0.000162803 -0.00025565 0 +1859 -6.18352e-05 -7.31513e-05 0 +1860 -3.33717e-05 -3.82995e-05 0 +1861 -8.57488e-05 -0.000104483 0 +1862 -4.53139e-05 -0.000208155 0 +1863 2.98131e-05 -0.000205916 0 +1864 -0.000138053 -0.000257871 0 +1865 0 0 0 +1866 -0.000105452 -0.000132236 0 +1867 -0.000121236 -0.000156406 0 +1868 -0.000156907 -0.000255004 0 +1869 -4.95001e-06 -0.000194692 0 +1870 -0.000133376 -0.000177004 0 +1871 -9.95499e-05 -0.000233754 0 +1872 -6.70203e-05 -0.00021353 0 +1873 -0.000142112 -0.00019409 0 +1874 -0.000124354 -0.000246134 0 +1875 -0.00014892 -0.000251726 0 +1876 -0.000147677 -0.000207743 0 +1877 -3.16951e-05 -0.000188356 0 +1878 0.000129965 -0.000215172 0 +1879 -0.00015028 -0.000218085 0 +1880 7.50252e-05 -0.000203585 0 +1881 3.64667e-05 -0.000190364 0 +1882 -0.000139079 -0.000246097 0 +1883 -0.000109742 -0.000232957 0 +1884 -0.000150133 -0.000225262 0 +1885 2.99961e-06 -0.000177351 0 +1886 -5.12324e-05 -0.000191652 0 +1887 -0.000147439 -0.000229456 0 +1888 -2.0262e-05 -0.000171696 0 +1889 -0.000127642 -0.000238412 0 +1890 -7.81388e-05 -0.000207868 0 +1891 -9.4568e-05 -0.000218715 0 +1892 -3.17057e-05 -3.58009e-05 0 +1893 -5.83624e-05 -6.81545e-05 0 +1894 -0.000142413 -0.000230876 0 +1895 0 0 0 +1896 -8.03694e-05 -9.70234e-05 0 +1897 -9.80993e-05 -0.000122407 0 +1898 -0.000111879 -0.000144329 0 +1899 -0.000114906 -0.00022899 0 +1900 7.41679e-06 -0.000156714 0 +1901 -0.000122014 -0.000162852 0 +1902 -0.000135275 -0.000229757 0 +1903 -3.73551e-05 -0.000170222 0 +1904 -6.28665e-05 -0.000190922 0 +1905 -0.000128779 -0.000178062 0 +1906 -1.26867e-05 -0.000151525 0 +1907 -0.000132435 -0.00019008 0 +1908 -5.16121e-05 -0.000179381 0 +1909 -0.000126262 -0.000226367 0 +1910 -9.91209e-05 -0.000216121 0 +1911 -0.000133222 -0.000199052 0 +1912 -2.68331e-05 -0.000153217 0 +1913 9.53799e-05 -0.000161582 0 +1914 -7.33131e-05 -0.000196441 0 +1915 3.394e-05 -0.000147141 0 +1916 5.1593e-06 -0.000135627 0 +1917 -0.000115635 -0.000220981 0 +1918 -0.000131381 -0.000205155 0 +1919 -8.47784e-05 -0.000204274 0 +1920 -0.000127143 -0.000208592 0 +1921 -3.76159e-05 -0.000159923 0 +1922 -0.000103664 -0.000213907 0 +1923 -1.83057e-05 -0.000135831 0 +1924 -2.97164e-05 -3.34611e-05 0 +1925 0 0 0 +1926 -5.42998e-05 -6.35012e-05 0 +1927 -7.41822e-05 -9.01389e-05 0 +1928 -8.97696e-05 -0.0001134 0 +1929 -0.000120747 -0.000209591 0 +1930 -7.22405e-05 -0.000193605 0 +1931 -0.000101418 -0.000133362 0 +1932 -0.000109465 -0.000150111 0 +1933 -0.000112439 -0.000208406 0 +1934 -8.85644e-05 -0.000203808 0 +1935 -5.28411e-05 -0.000175455 0 +1936 -0.000114209 -0.000163778 0 +1937 -9.77285e-06 -0.000111518 0 +1938 -0.000115937 -0.000174507 0 +1939 -4.31776e-05 -0.000164913 0 +1940 -0.000102474 -0.000205307 0 +1941 -0.000114919 -0.000182477 0 +1942 -3.40886e-05 -0.000153797 0 +1943 -7.26996e-05 -0.000192823 0 +1944 -5.14279e-05 -0.000175249 0 +1945 -0.000111415 -0.000187888 0 +1946 5.57248e-05 -8.56756e-05 0 +1947 -9.1136e-05 -0.000200585 0 +1948 1.31168e-05 -8.12836e-05 0 +1949 -8.62277e-06 -8.39173e-05 0 +1950 -8.05345e-06 -9.03226e-05 0 +1951 -2.20023e-05 -0.000136518 0 +1952 -6.08047e-05 -0.000184235 0 +1953 -0.000105684 -0.000190956 0 +1954 0 0 0 +1955 -2.74266e-05 -3.1301e-05 0 +1956 -4.96903e-05 -5.92463e-05 0 +1957 -9.41022e-06 -0.000105089 0 +1958 -6.72548e-05 -8.38844e-05 0 +1959 -7.87143e-05 -0.000194549 0 +1960 -8.0552e-05 -0.000105297 0 +1961 -1.07984e-05 -0.000113975 0 +1962 -9.79835e-05 -0.000191941 0 +1963 -8.99653e-05 -0.000123586 0 +1964 -4.89379e-05 -0.000175154 0 +1965 -1.33762e-05 -0.00012269 0 +1966 -9.58543e-05 -0.000138882 0 +1967 -9.85448e-05 -0.000151339 0 +1968 -8.85768e-05 -0.000191102 0 +1969 -6.33491e-05 -0.000186298 0 +1970 -9.83437e-05 -0.000161134 0 +1971 -1.62471e-05 -0.000136321 0 +1972 -2.59274e-05 -0.000153442 0 +1973 -7.7728e-05 -0.000188719 0 +1974 -9.5541e-05 -0.000168477 0 +1975 -1.82071e-05 -0.000144164 0 +1976 -2.79463e-05 -0.000159562 0 +1977 -6.57645e-05 -0.00018506 0 +1978 0 -5.45292e-05 0 +1979 0 -4.40347e-05 0 +1980 -8.83415e-05 -0.000171858 0 +1981 0 -4.86602e-05 0 +1982 0 0 0 +1983 -2.48662e-05 -2.93355e-05 0 +1984 -4.45929e-05 -5.54021e-05 0 +1985 0 -6.52759e-05 0 +1986 -5.96696e-05 -7.83032e-05 0 +1987 0 -8.15608e-05 0 +1988 -7.05503e-05 -9.8141e-05 0 +1989 -8.11324e-05 -0.00017511 0 +1990 -5.30017e-05 -0.000180536 0 +1991 0 -9.48045e-05 0 +1992 -7.76427e-05 -0.000115067 0 +1993 -3.67435e-05 -0.000172779 0 +1994 -2.42439e-05 -0.000162259 0 +1995 -7.43194e-05 -0.000178058 0 +1996 0 -0.000106672 0 +1997 -8.13227e-05 -0.000129234 0 +1998 0 -0.000116831 0 +1999 -8.19425e-05 -0.000140816 0 +2000 -6.38877e-05 -0.000177991 0 +2001 -2.53152e-05 -0.000166694 0 +2002 0 -0.000126447 0 +2003 -7.98278e-05 -0.000150051 0 +2004 0 -0.00013516 0 +2005 -7.32465e-05 -0.000155623 0 +2006 0 -0.000143113 0 +2007 -2.63938e-05 -0.00017134 0 +2008 0 0 0 +2009 -2.20597e-05 -2.75817e-05 0 +2010 -3.90559e-05 -5.20187e-05 0 +2011 0 -0.000150338 0 +2012 -5.14998e-05 -7.34388e-05 0 +2013 -6.44256e-05 -0.000159614 0 +2014 -5.98643e-05 -9.19993e-05 0 +2015 -5.79192e-05 -0.00016464 0 +2016 -6.45705e-05 -0.000107872 0 +2017 -2.65555e-05 -0.000172064 0 +2018 0 -0.000156632 0 +2019 -3.9305e-05 -0.000172316 0 +2020 -4.99917e-05 -0.000168014 0 +2021 0 -0.000161652 0 +2022 -2.65201e-05 -0.000171276 0 +2023 -6.13003e-05 -0.000118763 0 +2024 -5.90722e-05 -0.000140779 0 +2025 0 -0.000165495 0 +2026 -5.92897e-05 -0.000129828 0 +2027 0 0 0 +2028 -1.90395e-05 -2.60513e-05 0 +2029 -5.07168e-05 -0.000146829 0 +2030 -3.3141e-05 -4.90994e-05 0 +2031 0 -0.000168123 0 +2032 -4.28351e-05 -6.93205e-05 0 +2033 -2.57285e-05 -0.000166122 0 +2034 -4.86065e-05 -8.68911e-05 0 +2035 0 -0.000169199 0 +2036 -2.48541e-05 -0.000160842 0 +2037 -4.66392e-05 -0.000100114 0 +2038 0 -0.00016873 0 +2039 -3.20281e-05 -0.000147328 0 +2040 -3.77383e-05 -0.000134272 0 +2041 -2.3817e-05 -0.000153797 0 +2042 -3.98434e-05 -0.000123618 0 +2043 0 -0.000166746 0 +2044 0 0 0 +2045 -1.5831e-05 -2.47579e-05 0 +2046 -4.04272e-05 -0.000111232 0 +2047 -2.66754e-05 -4.70663e-05 0 +2048 -3.32152e-05 -6.62548e-05 0 +2049 -3.68571e-05 -8.29041e-05 0 +2050 0 -0.000163079 0 +2051 -1.97901e-05 -0.00013723 0 +2052 -3.24042e-05 -9.61629e-05 0 +2053 0 -0.000157637 0 +2054 0 0 0 +2055 0 -0.000150481 0 +2056 -1.81293e-05 -0.000125339 0 +2057 -1.24818e-05 -2.42212e-05 0 +2058 -2.1526e-05 -0.000113753 0 +2059 -1.97401e-05 -4.55752e-05 0 +2060 -2.3722e-05 -6.37738e-05 0 +2061 -2.48085e-05 -8.00223e-05 0 +2062 0 -0.000141657 0 +2063 -1.86964e-05 -9.8125e-05 0 +2064 0 -0.00013088 0 +2065 0 0 0 +2066 -8.90148e-06 -2.34286e-05 0 +2067 -1.32079e-05 -8.32154e-05 0 +2068 0 -0.000118249 0 +2069 -1.05618e-05 -4.64046e-05 0 +2070 -1.02457e-05 -6.39954e-05 0 +2071 0 -0.000103789 0 +2072 0 0 0 +2073 0 -8.73835e-05 0 +2074 -4.15231e-06 -2.55004e-05 0 +2075 0 -6.88435e-05 0 +2076 0 0 0 +2077 0 -4.82094e-05 0 +2078 0 -2.53794e-05 0 +2079 0 0 0 +End Values Result "TOTAL_DISPLACEMENT" "Kratos" 2 Vector OnNodes Values 1 0 -1.92896e-05 0 diff --git a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage3.post.orig.res b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage3.post.orig.res index 17fde7809f40..adc5424185da 100644 --- a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage3.post.orig.res +++ b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage3.post.orig.res @@ -2088,6 +2088,2088 @@ Values 2078 0 -5.59503e-05 0 2079 0 0 0 End Values +Result "INCREMENTAL_DISPLACEMENT" "Kratos" 3 Vector OnNodes +Values +1 0 -0.000526393 0 +2 0 -0.000509052 0 +3 -7.53247e-05 -0.000532075 0 +4 -6.38296e-05 -0.000514693 0 +5 0 -0.000494665 0 +6 -0.000150781 -0.000549101 0 +7 -0.000112569 -0.000523512 0 +8 -4.27424e-05 -0.000494496 0 +9 -0.000183721 -0.000556014 0 +10 0 -0.000483226 0 +11 -0.000226571 -0.000577601 0 +12 -7.77253e-05 -0.00050378 0 +13 -0.000134131 -0.00053259 0 +14 -3.26049e-05 -0.000484174 0 +15 -0.000203262 -0.000571179 0 +16 -0.000250808 -0.00059329 0 +17 0 -0.000474664 0 +18 -0.000302857 -0.000617908 0 +19 -5.44107e-05 -0.000493054 0 +20 -9.55716e-05 -0.000518728 0 +21 -0.000151308 -0.000554834 0 +22 -2.10236e-05 -0.000475588 0 +23 -0.00026129 -0.000617473 0 +24 -0.000209107 -0.000594775 0 +25 0 -0.000468654 0 +26 -0.000379888 -0.000670573 0 +27 -6.2416e-05 -0.000509704 0 +28 -3.27557e-05 -0.000485661 0 +29 -0.00010142 -0.000543145 0 +30 -0.000146785 -0.000581167 0 +31 -1.20507e-05 -0.000470757 0 +32 -0.000319315 -0.000676207 0 +33 -0.000201192 -0.000627172 0 +34 0 -0.000464881 0 +35 -0.000457411 -0.000735963 0 +36 -3.80067e-05 -0.00050834 0 +37 -6.76292e-05 -0.000541778 0 +38 -1.54183e-05 -0.000481867 0 +39 -0.0001298 -0.000616122 0 +40 -3.71609e-06 -0.000467923 0 +41 -0.000275126 -0.000705911 0 +42 -0.000418489 -0.000764279 0 +43 -0.000180258 -0.000668553 0 +44 -3.39413e-05 -0.000542547 0 +45 0 -0.000462883 0 +46 -0.000536085 -0.00081467 0 +47 -1.18228e-05 -0.000505361 0 +48 5.65755e-07 -0.000479809 0 +49 -8.02256e-05 -0.000617464 0 +50 3.90846e-06 -0.000466609 0 +51 -0.000360751 -0.000802147 0 +52 -0.000245682 -0.00075768 0 +53 -0.000482175 -0.000851707 0 +54 1.52717e-06 -0.000535559 0 +55 -0.000146804 -0.000718778 0 +56 1.24641e-05 -0.000500486 0 +57 -1.86931e-05 -0.00059006 0 +58 -0.000615509 -0.000907702 0 +59 0 -0.000462165 0 +60 1.50526e-05 -0.000478974 0 +61 -0.000424534 -0.00088853 0 +62 -6.14412e-05 -0.000682474 0 +63 -0.000561369 -0.000943838 0 +64 1.07677e-05 -0.0004663 0 +65 -0.000322683 -0.000877564 0 +66 3.1549e-05 -0.000529868 0 +67 2.37321e-05 -0.000582085 0 +68 -0.000202082 -0.000830989 0 +69 3.29952e-05 -0.000499856 0 +70 -0.00010195 -0.000778237 0 +71 6.50843e-06 -0.000650369 0 +72 0 -0.000462209 0 +73 -0.000696477 -0.00101598 0 +74 -0.000493438 -0.000986968 0 +75 2.79604e-05 -0.000478818 0 +76 -0.000377506 -0.000975309 0 +77 -1.6053e-05 -0.000738724 0 +78 -0.000628404 -0.00106015 0 +79 1.68206e-05 -0.000466466 0 +80 5.72507e-05 -0.000529121 0 +81 6.28177e-05 -0.000577513 0 +82 -0.000266621 -0.000967027 0 +83 3.85606e-05 -0.000693234 0 +84 -0.000145582 -0.000903842 0 +85 5.84845e-05 -0.00064407 0 +86 5.10867e-05 -0.000499542 0 +87 0 -0.000462476 0 +88 -4.71847e-05 -0.000846488 0 +89 -0.000778401 -0.0011407 0 +90 -0.000511213 -0.00109248 0 +91 3.92266e-05 -0.000478815 0 +92 2.20101e-05 -0.000791205 0 +93 -0.000382238 -0.00108185 0 +94 -0.000656681 -0.00117247 0 +95 2.2064e-05 -0.000466577 0 +96 7.95793e-05 -0.00052822 0 +97 7.48551e-05 -0.000740854 0 +98 9.36357e-05 -0.000575978 0 +99 9.21292e-05 -0.000685967 0 +100 -0.000154155 -0.00102071 0 +101 0.000102645 -0.000637819 0 +102 -4.47571e-05 -0.000954867 0 +103 6.66776e-05 -0.00049899 0 +104 1.28731e-05 -0.000895623 0 +105 -0.00052169 -0.00121214 0 +106 0 -0.000462465 0 +107 -0.000862339 -0.00128382 0 +108 -0.000246251 -0.00112408 0 +109 7.5942e-05 -0.000836005 0 +110 4.88706e-05 -0.000478418 0 +111 0.000109572 -0.000560041 0 +112 0.000126208 -0.000617327 0 +113 0.000116989 -0.000784992 0 +114 0.000130399 -0.00072504 0 +115 -0.000719293 -0.00132265 0 +116 2.65029e-05 -0.000466132 0 +117 -0.000365468 -0.00125829 0 +118 2.36357e-05 -0.00101157 0 +119 -3.89951e-05 -0.00107993 0 +120 7.50158e-05 -0.000947776 0 +121 0.000105381 -0.000531614 0 +122 0.00015254 -0.000683107 0 +123 0.000123862 -0.000887609 0 +124 -0.000115311 -0.00118972 0 +125 8.60584e-05 -0.000501319 0 +126 6.00693e-05 -0.000479987 0 +127 0 -0.000461669 0 +128 -0.000947295 -0.00144646 0 +129 0.000142801 -0.0005976 0 +130 -0.000499434 -0.00138711 0 +131 0.000160791 -0.000831594 0 +132 -0.000208511 -0.00131072 0 +133 3.42023e-05 -0.000466259 0 +134 0.000138114 -0.000562945 0 +135 3.76127e-05 -0.00114444 0 +136 0.000173199 -0.000658342 0 +137 9.29817e-05 -0.00107084 0 +138 0.000187285 -0.000779552 0 +139 -0.000712095 -0.00151083 0 +140 0.000146201 -0.00100093 0 +141 -2.78073e-05 -0.00126176 0 +142 -0.000321242 -0.00144446 0 +143 0.000100174 -0.000502857 0 +144 7.10274e-05 -0.000480651 0 +145 0.000128295 -0.000533269 0 +146 0.000186931 -0.000935376 0 +147 0.000204489 -0.000731283 0 +148 0 -0.000459613 0 +149 -0.00103384 -0.00163245 0 +150 0.000179434 -0.000621651 0 +151 0.000216642 -0.000874031 0 +152 0.000113849 -0.00121096 0 +153 -0.000456176 -0.00159179 0 +154 3.7665e-05 -0.000463522 0 +155 0.000171094 -0.000582768 0 +156 0.000171041 -0.00113023 0 +157 0.000213508 -0.000686542 0 +158 -2.6815e-05 -0.00142255 0 +159 0.000236661 -0.00081672 0 +160 -0.000762925 -0.00170823 0 +161 0.000214983 -0.00105418 0 +162 -0.000147295 -0.00152081 0 +163 9.5811e-05 -0.000488357 0 +164 0.000127472 -0.000514574 0 +165 0.000247411 -0.000982558 0 +166 -0.00061818 -0.00175384 0 +167 0.000248158 -0.000763296 0 +168 0 -0.000455957 0 +169 -0.0011204 -0.00184274 0 +170 0.000215451 -0.000645215 0 +171 0.000127799 -0.00136394 0 +172 0.000165474 -0.000553095 0 +173 -0.00025812 -0.00167602 0 +174 0.000269793 -0.00091534 0 +175 0.000198578 -0.00127675 0 +176 -0.000969078 -0.0018848 0 +177 6.00637e-05 -0.000465662 0 +178 0.00024498 -0.00118881 0 +179 -0.000374107 -0.00179992 0 +180 0.000252262 -0.000713576 0 +181 0.000283359 -0.000852342 0 +182 0.000279537 -0.00110581 0 +183 -0.000810039 -0.00193314 0 +184 0.000211355 -0.000607097 0 +185 0.000121364 -0.000496108 0 +186 4.88698e-05 -0.00164725 0 +187 0.000143865 -0.00153647 0 +188 0.000303775 -0.00102762 0 +189 -6.95535e-05 -0.00176318 0 +190 0.000218912 -0.00143632 0 +191 0.000161792 -0.000529113 0 +192 0.000289271 -0.000793454 0 +193 0 -0.000450451 0 +194 -0.00121073 -0.00208157 0 +195 -0.000531197 -0.00198288 0 +196 0.000249984 -0.000667383 0 +197 4.17371e-05 -0.000454385 0 +198 0.000276862 -0.00134029 0 +199 0.000318972 -0.00095413 0 +200 -0.000162521 -0.00189546 0 +201 0.000202157 -0.00057189 0 +202 -0.00103513 -0.0021316 0 +203 0.000312905 -0.00124454 0 +204 -0.000742539 -0.00211817 0 +205 0.000105111 -0.000476334 0 +206 0.000288528 -0.000738469 0 +207 0.000338454 -0.0011542 0 +208 -0.000272126 -0.00203684 0 +209 0.000326315 -0.000885176 0 +210 0.000242271 -0.000624491 0 +211 0.000146978 -0.000503222 0 +212 0.000250988 -0.00162021 0 +213 0.000185997 -0.00174204 0 +214 0.000354805 -0.00106911 0 +215 9.09312e-05 -0.00187101 0 +216 -0.000447417 -0.00217597 0 +217 0.000188643 -0.000539296 0 +218 0.00031032 -0.00150931 0 +219 -1.31379e-05 -0.00200604 0 +220 0.000326818 -0.000820601 0 +221 0 -0.000442423 0 +222 -0.00130232 -0.00235325 0 +223 0.000282101 -0.000687209 0 +224 -0.00096934 -0.00233513 0 +225 0.000347183 -0.00139935 0 +226 4.30286e-05 -0.000445981 0 +227 0.000363203 -0.000989127 0 +228 -0.00065823 -0.00232364 0 +229 0.000229967 -0.000584639 0 +230 0.000373464 -0.00129552 0 +231 -0.000103831 -0.00215829 0 +232 8.63e-05 -0.000458038 0 +233 0.000129138 -0.000479223 0 +234 0.000321439 -0.000760209 0 +235 0.000390514 -0.00119765 0 +236 -0.00025417 -0.00230999 0 +237 0.000364629 -0.000914055 0 +238 0.000270823 -0.000639419 0 +239 0.00017173 -0.000509041 0 +240 0.000295779 -0.00183021 0 +241 0.00034503 -0.00169685 0 +242 0.000232342 -0.00197129 0 +243 0.000399566 -0.00110555 0 +244 -0.000437941 -0.00247034 0 +245 0.000381932 -0.00157088 0 +246 0.000151899 -0.00212039 0 +247 0.000213914 -0.000547543 0 +248 0.000360064 -0.000843713 0 +249 0.000408388 -0.00145204 0 +250 0 -0.000431856 0 +251 -0.00139801 -0.00266756 0 +252 5.15102e-05 -0.00227794 0 +253 0.000311011 -0.000703778 0 +254 -0.00101306 -0.00264969 0 +255 4.37273e-05 -0.000435022 0 +256 0.000401623 -0.00101903 0 +257 -0.000662361 -0.00264086 0 +258 0.00010901 -0.000456737 0 +259 0.000425647 -0.00134006 0 +260 -7.28423e-05 -0.00244461 0 +261 0.000255522 -0.000594851 0 +262 0.000152177 -0.000480762 0 +263 0.000435005 -0.00123469 0 +264 -0.000226581 -0.00262131 0 +265 0.000350292 -0.000777867 0 +266 0.00039762 -0.000937847 0 +267 0.000194874 -0.000512887 0 +268 0.000296332 -0.000651054 0 +269 0.000379955 -0.00190322 0 +270 0.000331418 -0.00205587 0 +271 0.000416376 -0.00175937 0 +272 0.00026874 -0.00221789 0 +273 0.00043738 -0.00113566 0 +274 0.000442461 -0.00162392 0 +275 0.000189167 -0.00238984 0 +276 -0.000416733 -0.00280869 0 +277 0.000236925 -0.000553195 0 +278 0.00045956 -0.00149643 0 +279 8.94594e-05 -0.00257255 0 +280 0.000388343 -0.000861776 0 +281 0 -0.000418697 0 +282 -0.00149245 -0.00303417 0 +283 6.565e-05 -0.000427931 0 +284 0.000336115 -0.000716272 0 +285 -0.00104559 -0.00301398 0 +286 0.000130724 -0.000454099 0 +287 0.000433738 -0.00104271 0 +288 -0.000653278 -0.00300995 0 +289 0.000468871 -0.00137656 0 +290 -3.49143e-05 -0.00276701 0 +291 0.000278112 -0.000601755 0 +292 0.000173576 -0.00048032 0 +293 0.000471349 -0.00126395 0 +294 0.000414205 -0.00212859 0 +295 0.000374538 -0.000790552 0 +296 0.000449521 -0.00196488 0 +297 0.000366999 -0.00230302 0 +298 -0.000196796 -0.00300753 0 +299 0.00042478 -0.000955562 0 +300 0.00021576 -0.000514131 0 +301 0.000474868 -0.00181107 0 +302 0.000306078 -0.0024889 0 +303 0.000318189 -0.000658643 0 +304 0.000491431 -0.00166665 0 +305 0.00022838 -0.00268739 0 +306 0.000467864 -0.00115826 0 +307 4.33459e-05 -0.00040936 0 +308 -0.000392865 -0.00323355 0 +309 0.000257045 -0.000555564 0 +310 0.000500489 -0.001531 0 +311 0.000130887 -0.00289967 0 +312 0.000108102 -0.000428657 0 +313 0.000411261 -0.00087392 0 +314 -0.00159425 -0.00347264 0 +315 0 -0.000402551 0 +316 0.000356851 -0.000723885 0 +317 -0.00106329 -0.00345175 0 +318 0.000150711 -0.000449468 0 +319 0.000459128 -0.00105915 0 +320 0.000502856 -0.00140372 0 +321 0.000297198 -0.000604674 0 +322 3.44401e-06 -0.00316204 0 +323 0.000192673 -0.000477292 0 +324 0.000480062 -0.00218679 0 +325 0.000446099 -0.00237245 0 +326 0.000504348 -0.00201301 0 +327 0.000400776 -0.00257098 0 +328 0.000499435 -0.00128431 0 +329 0.000393746 -0.000797488 0 +330 0.000520255 -0.00185018 0 +331 0.000342043 -0.00278378 0 +332 0.000233758 -0.000512136 0 +333 0.000445807 -0.000966307 0 +334 -0.000158469 -0.00344929 0 +335 -0.000611593 -0.0036476 0 +336 0.000335907 -0.000661467 0 +337 0.000528884 -0.00169758 0 +338 0.000267169 -0.00301238 0 +339 8.50214e-05 -0.000403918 0 +340 0.000490826 -0.00117239 0 +341 4.22539e-05 -0.000390431 0 +342 0.000126946 -0.000419918 0 +343 0.000273717 -0.000554026 0 +344 0.000531105 -0.00155454 0 +345 0.000172681 -0.00325909 0 +346 0.000428462 -0.000879362 0 +347 0 -0.000383213 0 +348 -0.00168134 -0.00400876 0 +349 0.000168322 -0.000442298 0 +350 0.000372854 -0.000725928 0 +351 0.00052768 -0.0014205 0 +352 0.0004777 -0.00106753 0 +353 4.90682e-05 -0.00356539 0 +354 0.000312262 -0.000602955 0 +355 0.000506354 -0.00242391 0 +356 0.000529617 -0.00222857 0 +357 0.000473904 -0.00263318 0 +358 0.000208872 -0.000471097 0 +359 -0.000325479 -0.00390198 0 +360 0.000544802 -0.00204612 0 +361 0.000430463 -0.00285809 0 +362 0.000519231 -0.0012949 0 +363 0.000553074 -0.00187541 0 +364 0.00037421 -0.00310021 0 +365 -0.00104647 -0.00424961 0 +366 -0.000102449 -0.0038627 0 +367 0.000407628 -0.000797979 0 +368 0.000248352 -0.000506333 0 +369 0.000460521 -0.000969358 0 +370 0.00034907 -0.000658903 0 +371 0.000555153 -0.00171569 0 +372 0.000302188 -0.00336231 0 +373 9.92442e-05 -0.000388696 0 +374 0.000506314 -0.00117729 0 +375 0.000551829 -0.00156612 0 +376 0.000211045 -0.00364714 0 +377 0.000139634 -0.000405605 0 +378 0.000286467 -0.00054799 0 +379 4.07352e-05 -0.000368279 0 +380 0.000182964 -0.000432045 0 +381 0.000439818 -0.000877459 0 +382 0 -0.000360765 0 +383 -0.00173354 -0.00472419 0 +384 -0.000544022 -0.00444068 0 +385 0.000383777 -0.000721781 0 +386 0.0005436 -0.00142613 0 +387 0.000548993 -0.00245606 0 +388 0.000526594 -0.00267399 0 +389 9.58619e-05 -0.0039596 0 +390 0.000489395 -0.00106717 0 +391 0.000563745 -0.00225289 0 +392 0.000495285 -0.00290835 0 +393 -0.000267045 -0.00438222 0 +394 0.000322926 -0.000596034 0 +395 0.000221632 -0.000461205 0 +396 0.000571812 -0.00206327 0 +397 0.000453536 -0.00316096 0 +398 0.000573994 -0.00188603 0 +399 0.000399228 -0.00343438 0 +400 0.000531031 -0.00129505 0 +401 -5.0531e-05 -0.0043057 0 +402 -0.00101326 -0.00492464 0 +403 0.000259031 -0.000496178 0 +404 0.000415973 -0.000791459 0 +405 0.000468904 -0.00096413 0 +406 0.000570928 -0.00172031 0 +407 0.000329727 -0.00373153 0 +408 0.000357365 -0.000650392 0 +409 0.000111063 -0.000370555 0 +410 0.000514484 -0.00117239 0 +411 0.000152991 -0.000391163 0 +412 0.000563152 -0.00156524 0 +413 5.50343e-05 -0.000347554 0 +414 0.000241211 -0.00405649 0 +415 0.000294864 -0.000536936 0 +416 0.000194123 -0.000418221 0 +417 0.000560849 -0.00269261 0 +418 0.000575574 -0.00246831 0 +419 0.000538723 -0.00293381 0 +420 0.000445214 -0.000867702 0 +421 0 -0.000335261 0 +422 -0.00173375 -0.00551351 0 +423 0.000389427 -0.00071093 0 +424 0.000583885 -0.00225918 0 +425 0.000508002 -0.00319359 0 +426 0.000551104 -0.00142016 0 +427 0.000128593 -0.00441423 0 +428 0.000494381 -0.00105759 0 +429 0.000586496 -0.00206403 0 +430 0.000467123 -0.0034745 0 +431 -0.000222538 -0.00493968 0 +432 0.000230463 -0.000447106 0 +433 0.000328813 -0.000583403 0 +434 0.000584055 -0.00188164 0 +435 -0.000512096 -0.00525862 0 +436 0.000413953 -0.00377909 0 +437 0.000535163 -0.00128438 0 +438 -1.59101e-05 -0.00481082 0 +439 8.75228e-05 -0.00034066 0 +440 0.000265376 -0.000481184 0 +441 0.000418677 -0.000777466 0 +442 0.000577014 -0.00171113 0 +443 0.000345887 -0.00411109 0 +444 0.000126883 -0.000355096 0 +445 0.000471005 -0.000950193 0 +446 3.40757e-05 -0.000321877 0 +447 0.000360522 -0.000635473 0 +448 0.000166345 -0.000376944 0 +449 0.000515648 -0.00115734 0 +450 0.000565811 -0.00155159 0 +451 0.000258929 -0.00447443 0 +452 -0.000990357 -0.00587718 0 +453 0.000298542 -0.000520398 0 +454 0.000578899 -0.00268944 0 +455 0.000563498 -0.00293489 0 +456 0.000588003 -0.00246087 0 +457 0.000540922 -0.00319895 0 +458 0.000201259 -0.000400331 0 +459 0.000591593 -0.00224763 0 +460 0.000509883 -0.00348375 0 +461 0.00044469 -0.000849698 0 +462 -0.0016481 -0.00632469 0 +463 0 -0.000306159 0 +464 0.000389613 -0.000692969 0 +465 0.000550746 -0.00140234 0 +466 0.000148425 -0.00487422 0 +467 0.000590214 -0.00204849 0 +468 0.000468907 -0.00379174 0 +469 0.000492836 -0.00103847 0 +470 0.00023489 -0.000428347 0 +471 6.51479e-05 -0.000310818 0 +472 0.000329653 -0.000564636 0 +473 0.000584358 -0.00186232 0 +474 0.000415808 -0.00412586 0 +475 0.000102312 -0.000321513 0 +476 0.000532126 -0.00126265 0 +477 7.7376e-06 -0.00531524 0 +478 0.000138853 -0.000336891 0 +479 0.000266955 -0.000460923 0 +480 -0.000201629 -0.00568933 0 +481 0.000574373 -0.00168818 0 +482 0.000348023 -0.00448943 0 +483 0.000415673 -0.000755658 0 +484 0.000466974 -0.000927269 0 +485 3.12833e-05 -0.000290751 0 +486 0.000358339 -0.000613769 0 +487 -0.000481927 -0.00609607 0 +488 0.000171924 -0.000355391 0 +489 0.000572326 -0.00291257 0 +490 0.000582978 -0.0026651 0 +491 0.000555428 -0.00317818 0 +492 0.000510154 -0.00113195 0 +493 0.000560576 -0.00152521 0 +494 0.00026187 -0.00488611 0 +495 0.000588189 -0.00243428 0 +496 0.000531469 -0.00346388 0 +497 -0.00090865 -0.00657898 0 +498 0.00029715 -0.000497982 0 +499 0.00020389 -0.000377949 0 +500 0.000588477 -0.00221862 0 +501 0.000499085 -0.00377171 0 +502 0.00043828 -0.000823208 0 +503 0.000543192 -0.00137267 0 +504 0.000584323 -0.00201702 0 +505 0.000456979 -0.00410411 0 +506 0 -0.000273627 0 +507 -0.00150279 -0.00709922 0 +508 0.000153176 -0.00531954 0 +509 0.000384245 -0.000667575 0 +510 6.89222e-05 -0.000282838 0 +511 0.000485056 -0.00100964 0 +512 0.000234472 -0.00040452 0 +513 0.000325156 -0.000539391 0 +514 0.000576058 -0.00182833 0 +515 0.00010289 -0.000293131 0 +516 0.000402871 -0.00446367 0 +517 0.000522427 -0.00122988 0 +518 1.65745e-05 -0.00579284 0 +519 0.000142962 -0.000311789 0 +520 0.000563968 -0.0016517 0 +521 0.000334726 -0.00485295 0 +522 0.000263404 -0.00043502 0 +523 -0.000178822 -0.00621216 0 +524 3.71832e-05 -0.000261049 0 +525 0.000406961 -0.000725805 0 +526 0.000456978 -0.000895206 0 +527 0.000567868 -0.00286843 0 +528 0.000554856 -0.00313338 0 +529 0.000172828 -0.000329515 0 +530 0.000350626 -0.000584991 0 +531 0.000575429 -0.00262097 0 +532 0.000535617 -0.00341743 0 +533 -0.000438665 -0.00669591 0 +534 0.000578046 -0.00238961 0 +535 0.000509319 -0.00372232 0 +536 0.00054826 -0.00148627 0 +537 0.000249114 -0.00527451 0 +538 0.000498428 -0.00109623 0 +539 0.000290378 -0.000469362 0 +540 0.000576204 -0.00217308 0 +541 0.000474752 -0.00404994 0 +542 0.000201514 -0.000350689 0 +543 -0.000809892 -0.00722572 0 +544 0.000570205 -0.0019703 0 +545 0.000430595 -0.00440229 0 +546 0.0005291 -0.00133134 0 +547 6.99945e-05 -0.000251701 0 +548 0.000143255 -0.00572902 0 +549 0.000426098 -0.000788081 0 +550 0 -0.000237675 0 +551 -0.00128209 -0.00773473 0 +552 0.000373212 -0.000634548 0 +553 0.000228765 -0.00037527 0 +554 0.000471329 -0.000971112 0 +555 0.000106576 -0.000264589 0 +556 0.000560343 -0.00178029 0 +557 0.000375115 -0.00478115 0 +558 0.000315099 -0.00050739 0 +559 0.000142208 -0.000282525 0 +560 0.000506612 -0.0011862 0 +561 1.39258e-05 -0.00621607 0 +562 0.000546784 -0.0016022 0 +563 0.000306451 -0.00518804 0 +564 0.000541911 -0.00306663 0 +565 0.000254322 -0.00040317 0 +566 0.000552598 -0.00280422 0 +567 0.000525771 -0.00334699 0 +568 3.22885e-05 -0.000223024 0 +569 0.000558238 -0.00255841 0 +570 0.000503335 -0.00364673 0 +571 -0.000163985 -0.00668877 0 +572 0.000392536 -0.000687778 0 +573 0.000168529 -0.000298923 0 +574 0.000441234 -0.000853991 0 +575 0.000337231 -0.00054894 0 +576 0.000559367 -0.00232802 0 +577 0.000473987 -0.00396731 0 +578 0.000529694 -0.00143523 0 +579 0.000222806 -0.00562316 0 +580 -0.000388649 -0.00718743 0 +581 0.00048088 -0.00105028 0 +582 0.000556234 -0.00211193 0 +583 0.00043652 -0.00431023 0 +584 0.000277902 -0.000434281 0 +585 0.000193652 -0.000318196 0 +586 5.60477e-05 -0.000216468 0 +587 -0.000687132 -0.00769861 0 +588 0.000549159 -0.00190919 0 +589 0.000390091 -0.00467665 0 +590 8.08874e-05 -0.000223069 0 +591 0.00050915 -0.00127869 0 +592 0.000122748 -0.00608526 0 +593 0.000408236 -0.000744312 0 +594 0 -0.000198116 0 +595 -0.00102633 -0.008203 0 +596 0.000356455 -0.00059375 0 +597 0.000112549 -0.000236463 0 +598 0.000217334 -0.000340296 0 +599 0.000451976 -0.000922959 0 +600 0.000538276 -0.00171889 0 +601 0.000333339 -0.00506752 0 +602 0.000299224 -0.000468451 0 +603 0.000135996 -0.000248677 0 +604 0.000519369 -0.00298033 0 +605 0.000504915 -0.0032554 0 +606 2.27795e-05 -0.000187846 0 +607 0.000485225 -0.00113194 0 +608 0.000528727 -0.00272193 0 +609 0.000484918 -0.00354831 0 +610 7.14208e-06 -0.00656963 0 +611 0.000523751 -0.00154026 0 +612 0.000265472 -0.00548246 0 +613 0.000533441 -0.00247915 0 +614 0.000458746 -0.00386015 0 +615 0.000239344 -0.000365112 0 +616 -0.000143341 -0.00704782 0 +617 0.000158472 -0.00026327 0 +618 0.000372422 -0.000641553 0 +619 0.00053379 -0.00225096 0 +620 0.000425783 -0.00419201 0 +621 0.000419937 -0.000803708 0 +622 0.00031798 -0.000505494 0 +623 4.28211e-05 -0.000179168 0 +624 0.000505633 -0.00137257 0 +625 0.000186226 -0.00592014 0 +626 0.00053006 -0.00203644 0 +627 0.000385317 -0.00454462 0 +628 0.000457937 -0.000994379 0 +629 6.37945e-05 -0.000183996 0 +630 0.000179784 -0.000280182 0 +631 0.000259414 -0.000392552 0 +632 0.000522394 -0.00183472 0 +633 0.000336745 -0.00491844 0 +634 8.44225e-05 -0.000190729 0 +635 -0.000284084 -0.00755425 0 +636 0.000483977 -0.00121518 0 +637 9.6309e-05 -0.00637634 0 +638 0.00038481 -0.000691956 0 +639 0 -0.00015464 0 +640 -0.000769124 -0.00849751 0 +641 0.000104431 -0.000199395 0 +642 0.000333879 -0.000545168 0 +643 -0.000486074 -0.00804154 0 +644 0.000199714 -0.000299347 0 +645 0.000510941 -0.00164503 0 +646 0.000279763 -0.00531295 0 +647 0.000427299 -0.000865431 0 +648 0.000475727 -0.00314534 0 +649 0.000277294 -0.00042244 0 +650 0.000489342 -0.00287674 0 +651 0.00045691 -0.00343021 0 +652 0.000498252 -0.00262352 0 +653 0.000432645 -0.00373213 0 +654 0.000123711 -0.000209905 0 +655 0.000458769 -0.00106746 0 +656 1.76317e-05 -0.000143136 0 +657 0.000502628 -0.00238484 0 +658 0.000402339 -0.00405189 0 +659 1.725e-07 -0.00684422 0 +660 0.000495743 -0.00146667 0 +661 0.000214592 -0.00572663 0 +662 0.000218051 -0.000320672 0 +663 0.000502808 -0.00215985 0 +664 0.000365764 -0.00438984 0 +665 0.000142086 -0.000222259 0 +666 0.000346612 -0.000587187 0 +667 4.09098e-05 -0.000141355 0 +668 0.000393291 -0.000744556 0 +669 0.000292707 -0.000454618 0 +670 0.000498876 -0.00194779 0 +671 0.000322525 -0.00474618 0 +672 5.74512e-05 -0.000145544 0 +673 0.000476837 -0.00129899 0 +674 0.000142857 -0.00615614 0 +675 0.000429988 -0.000928862 0 +676 -9.4646e-05 -0.00731329 0 +677 0.000159387 -0.000236381 0 +678 0.000234561 -0.000344048 0 +679 7.43937e-05 -0.000150483 0 +680 0.000491015 -0.00174793 0 +681 0.000272744 -0.00512016 0 +682 0.000454183 -0.00114138 0 +683 6.79051e-05 -0.00659593 0 +684 8.98688e-05 -0.000157527 0 +685 0.000355899 -0.000631201 0 +686 0.000440421 -0.00301944 0 +687 0.000422079 -0.00329542 0 +688 0 -0.000107306 0 +689 -0.000510156 -0.00870349 0 +690 0.000305397 -0.000488829 0 +691 0.000479225 -0.00155961 0 +692 0.000217111 -0.0055104 0 +693 0.000175425 -0.000252233 0 +694 -0.000330238 -0.00824746 0 +695 0.000453944 -0.00275818 0 +696 0.00039862 -0.00358666 0 +697 0.000397575 -0.000798816 0 +698 -0.000174216 -0.00776931 0 +699 0.00046286 -0.00251098 0 +700 0.000369812 -0.00389363 0 +701 0.000249024 -0.000369327 0 +702 1.81318e-05 -0.000102844 0 +703 0.000104701 -0.000165916 0 +704 0.000467407 -0.00227721 0 +705 0.000335442 -0.00421649 0 +706 0.000427737 -0.000993294 0 +707 0.000463559 -0.00138222 0 +708 0.000157076 -0.005914 0 +709 -3.39903e-06 -0.0070382 0 +710 0.000467709 -0.00205619 0 +711 0.000295486 -0.00455512 0 +712 0.000190024 -0.000269701 0 +713 3.39904e-05 -0.000100027 0 +714 0.000118745 -0.000175625 0 +715 0.000315096 -0.000524831 0 +716 4.60953e-05 -0.000102289 0 +717 0.000361459 -0.000676805 0 +718 0.000463897 -0.00184732 0 +719 0.000250231 -0.00490878 0 +720 0.000261199 -0.000396341 0 +721 0.00044394 -0.00121517 0 +722 9.63597e-05 -0.0063265 0 +723 0.000397398 -0.000854186 0 +724 -6.04716e-05 -0.00747275 0 +725 0.000131873 -0.000186606 0 +726 5.75304e-05 -0.000105501 0 +727 0.000202981 -0.000288713 0 +728 0.000455997 -0.00165 0 +729 0.000200471 -0.00527604 0 +730 0.000382466 -0.00314673 0 +731 0.00040095 -0.00288014 0 +732 0.000359232 -0.00342684 0 +733 6.81494e-05 -0.000110534 0 +734 0.000420316 -0.00105793 0 +735 3.99431e-05 -0.00674216 0 +736 0.000414725 -0.00262679 0 +737 0.000330985 -0.00372076 0 +738 0.000444027 -0.00146367 0 +739 0.000147938 -0.00565449 0 +740 0.000321568 -0.000562274 0 +741 -0.000255229 -0.00882047 0 +742 0 -5.59503e-05 0 +743 0.000143927 -0.000198804 0 +744 0.000270871 -0.000424878 0 +745 0.000424059 -0.00238619 0 +746 0.000297789 -0.00402839 0 +747 7.10299e-06 -5.61566e-05 0 +748 -0.000166949 -0.00836606 0 +749 0.000363059 -0.000723532 0 +750 -8.95054e-05 -0.00789017 0 +751 7.82705e-05 -0.000116416 0 +752 0.000214116 -0.000309111 0 +753 0.000428975 -0.00215791 0 +754 0.000259647 -0.00434948 0 +755 1.52574e-05 -5.12178e-05 0 +756 0.000427917 -0.00128781 0 +757 9.55937e-05 -0.00604048 0 +758 0.000392543 -0.000909989 0 +759 -2.80358e-06 -0.00715283 0 +760 0.000429652 -0.00194143 0 +761 0.000217027 -0.00468315 0 +762 2.14567e-05 -5.25706e-05 0 +763 0.000154771 -0.000212145 0 +764 8.77907e-05 -0.000123154 0 +765 0.000426049 -0.0017363 0 +766 0.00017079 -0.00502807 0 +767 2.73274e-05 -5.32187e-05 0 +768 0.000277814 -0.000454699 0 +769 0.000324583 -0.000600819 0 +770 0.000223228 -0.000330774 0 +771 0.000407583 -0.00112192 0 +772 4.82948e-05 -0.00642935 0 +773 3.30242e-05 -5.54524e-05 0 +774 0.000360484 -0.000770854 0 +775 9.66195e-05 -0.000130676 0 +776 -2.08565e-05 -0.00755142 0 +777 0.000418222 -0.00154203 0 +778 0.000122487 -0.00538205 0 +779 0.000164243 -0.000226546 0 +780 0.000340001 -0.00298664 0 +781 0.000316495 -0.00325549 0 +782 0.000358873 -0.00272971 0 +783 0.000288324 -0.00353632 0 +784 0.000373209 -0.00248457 0 +785 0.00025551 -0.00382889 0 +786 3.84785e-05 -5.81136e-05 0 +787 0.000382865 -0.000965537 0 +788 1.32174e-05 -0.00681497 0 +789 0.000383071 -0.00225094 0 +790 0.000218248 -0.00413278 0 +791 0.000406051 -0.00135819 0 +792 7.49262e-05 -0.005742 0 +793 0.000104644 -0.000138978 0 +794 0.000281837 -0.000485516 0 +795 0 0 0 +796 1.26519e-07 -0.00886042 0 +797 0.000230143 -0.000353492 0 +798 0 0 0 +799 -7.15296e-08 -0.00840528 0 +800 0.000388536 -0.00202854 0 +801 0.000176993 -0.00444706 0 +802 0 0 0 +803 0.000323953 -0.000640023 0 +804 4.36485e-05 -6.1187e-05 0 +805 -5.72172e-08 -0.00792952 0 +806 0.000172204 -0.000241898 0 +807 0 0 0 +808 0.000389468 -0.00118433 0 +809 0.000389604 -0.00181701 0 +810 0.000132602 -0.00477041 0 +811 3.20301e-05 -0.00610416 0 +812 0.000353589 -0.000818197 0 +813 0 0 0 +814 2.07e-08 -0.0071912 0 +815 0.000111771 -0.000147966 0 +816 4.84775e-05 -6.46582e-05 0 +817 0 0 0 +818 0.000386271 -0.00161601 0 +819 8.65599e-05 -0.00510083 0 +820 0.000234679 -0.000377087 0 +821 0.000282756 -0.000517014 0 +822 0.00036827 -0.00102005 0 +823 2.169e-09 -0.00646339 0 +824 0.000178495 -0.000258083 0 +825 0.000272134 -0.00307513 0 +826 0 0 0 +827 0.000296071 -0.00281747 0 +828 0.000243666 -0.00334311 0 +829 5.29188e-05 -6.8505e-05 0 +830 0.000319527 -0.000679449 0 +831 0.000378444 -0.00142519 0 +832 0.000315548 -0.00257021 0 +833 0.000210854 -0.003621 0 +834 4.11986e-05 -0.00543562 0 +835 2.09068e-05 -0.00755136 0 +836 0.000117882 -0.000157616 0 +837 0.000330487 -0.00233341 0 +838 0.000173856 -0.00390829 0 +839 0 0 0 +840 0.000340988 -0.00210692 0 +841 0.000133205 -0.00420395 0 +842 0.000342273 -0.00086493 0 +843 -1.31951e-05 -0.00681496 0 +844 0.000366012 -0.00124421 0 +845 -3.27585e-09 -0.00577144 0 +846 5.69112e-05 -7.27053e-05 0 +847 0.00023669 -0.000401297 0 +848 0.000346961 -0.00189062 0 +849 8.9672e-05 -0.00450671 0 +850 0.000256263 -0.00882111 0 +851 0.000182988 -0.000274952 0 +852 0.000166537 -0.00836577 0 +853 0 0 0 +854 0.000280434 -0.000548835 0 +855 8.932e-05 -0.00788999 0 +856 0.000122885 -0.000167815 0 +857 0.000348438 -0.00168427 0 +858 4.45964e-05 -0.00481461 0 +859 0.000348778 -0.00107272 0 +860 -3.20316e-05 -0.00610414 0 +861 0.000311198 -0.00071858 0 +862 2.86613e-06 -0.0071528 0 +863 0 0 0 +864 6.04054e-05 -7.72269e-05 0 +865 0.000345264 -0.00148767 0 +866 -5.37218e-09 -0.00512526 0 +867 0.000227455 -0.00288797 0 +868 0.000198593 -0.00314349 0 +869 0.000185544 -0.00029235 0 +870 0.00025196 -0.00264124 0 +871 0.000165519 -0.00340729 0 +872 0.000236038 -0.000425883 0 +873 0.000326517 -0.000910398 0 +874 -4.82884e-05 -0.00642931 0 +875 0.000126667 -0.000178512 0 +876 0.000272029 -0.00240352 0 +877 0.000128497 -0.00367872 0 +878 0.000337354 -0.00130057 0 +879 -4.12078e-05 -0.00543561 0 +880 0 0 0 +881 0.000274761 -0.000580592 0 +882 0.000287619 -0.002175 0 +883 8.79994e-05 -0.00395674 0 +884 6.06975e-05 -0.00747291 0 +885 6.33395e-05 -8.20386e-05 0 +886 0.000298673 -0.00195568 0 +887 4.47714e-05 -0.00424002 0 +888 0.000298929 -0.000756895 0 +889 -3.99327e-05 -0.00674209 0 +890 0.000324463 -0.00112274 0 +891 -7.49313e-05 -0.00574198 0 +892 0.00030513 -0.00174554 0 +893 -4.93405e-09 -0.00452674 0 +894 0 0 0 +895 0.000186061 -0.000310087 0 +896 0.000511279 -0.00870369 0 +897 0.000129147 -0.000189572 0 +898 0.000329381 -0.00824619 0 +899 0.000232626 -0.000450536 0 +900 0.00017459 -0.00776995 0 +901 6.56653e-05 -8.70965e-05 0 +902 0.000306871 -0.0015445 0 +903 -4.46069e-05 -0.0048146 0 +904 0.000306373 -0.000953911 0 +905 -9.55914e-05 -0.00604043 0 +906 0.000265682 -0.00061187 0 +907 3.397e-06 -0.00703811 0 +908 0 0 0 +909 0.00015425 -0.00293962 0 +910 0.000303749 -0.00135246 0 +911 0.000183565 -0.002696 0 +912 0.00012088 -0.00319002 0 +913 -8.65696e-05 -0.00510081 0 +914 0.000208581 -0.0024598 0 +915 8.36873e-05 -0.00344651 0 +916 0.000229236 -0.00223133 0 +917 4.31726e-05 -0.00370795 0 +918 0.000130227 -0.000200916 0 +919 0.000282733 -0.000793835 0 +920 -9.63435e-05 -0.00632642 0 +921 0.00018444 -0.00032797 0 +922 6.73251e-05 -9.23588e-05 0 +923 0.000245361 -0.00201091 0 +924 -3.55944e-09 -0.00397307 0 +925 0.00029554 -0.00116927 0 +926 -0.000122494 -0.00538201 0 +927 0.000226386 -0.000474961 0 +928 9.48709e-05 -0.00731302 0 +929 0 0 0 +930 0.00025691 -0.00179864 0 +931 -4.47798e-05 -0.00424002 0 +932 0.00025319 -0.000642233 0 +933 0.000281978 -0.000994785 0 +934 -0.00014794 -0.00565444 0 +935 -6.79081e-05 -0.00659575 0 +936 0.000263687 -0.00159465 0 +937 -8.9681e-05 -0.0045067 0 +938 0.000129849 -0.000212393 0 +939 0.000772462 -0.00849903 0 +940 6.82768e-05 -9.77697e-05 0 +941 0.000483918 -0.00803935 0 +942 0.000180623 -0.000345777 0 +943 0.00026557 -0.00139894 0 +944 -0.000132611 -0.00477039 0 +945 0.000249112 -0.00756331 0 +946 0 0 0 +947 0.000262712 -0.000828833 0 +948 -0.000157066 -0.00591392 0 +949 0.000111592 -0.00273325 0 +950 7.79252e-05 -0.00297107 0 +951 0.000141279 -0.0025009 0 +952 4.0575e-05 -0.00321358 0 +953 0.000217296 -0.000498823 0 +954 -2.38435e-07 -0.00684383 0 +955 0.000166762 -0.00227471 0 +956 -2.21055e-09 -0.00345965 0 +957 0.00026228 -0.00121152 0 +958 -0.000170796 -0.00502803 0 +959 0.000187873 -0.00205512 0 +960 -4.31781e-05 -0.00370795 0 +961 6.84741e-05 -0.000103277 0 +962 0.000237339 -0.000671236 0 +963 0.00020445 -0.00184251 0 +964 -8.80059e-05 -0.00395673 0 +965 -0.000142822 -0.00615603 0 +966 0.000127945 -0.000223889 0 +967 0 0 0 +968 0.000253564 -0.00103233 0 +969 -0.000200474 -0.00527599 0 +970 0.000174572 -0.00036328 0 +971 0.000216323 -0.00163712 0 +972 -0.000133212 -0.00420394 0 +973 0.000120607 -0.00706636 0 +974 0.00022329 -0.00143915 0 +975 -0.000176999 -0.00444704 0 +976 0.000239023 -0.000861339 0 +977 -0.000217108 -0.00551032 0 +978 0.000205379 -0.000521782 0 +979 -9.62136e-05 -0.0063762 0 +980 6.78871e-05 -0.000108813 0 +981 0.00102862 -0.00820153 0 +982 0 0 0 +983 0.00062317 -0.00773118 0 +984 0.000225098 -0.00124871 0 +985 -0.000217032 -0.00468311 0 +986 3.7448e-05 -0.00275209 0 +987 0.000124494 -0.000235248 0 +988 7.13102e-05 -0.00252598 0 +989 -1.19056e-09 -0.00298168 0 +990 0.000310197 -0.00725779 0 +991 0.000101293 -0.00230417 0 +992 -4.05782e-05 -0.00321358 0 +993 0.000218249 -0.000698426 0 +994 -0.000214575 -0.00572653 0 +995 0.000127108 -0.00208742 0 +996 -8.36912e-05 -0.0034465 0 +997 0.000166289 -0.000380238 0 +998 -6.76575e-06 -0.00656946 0 +999 0.000221437 -0.00106591 0 +1000 -0.000250233 -0.00490873 0 +1001 0.000148576 -0.00187624 0 +1002 -0.000128502 -0.00367871 0 +1003 0.00016544 -0.0016711 0 +1004 -0.00017386 -0.00390828 0 +1005 0.000190706 -0.000543503 0 +1006 0 0 0 +1007 -0.00018619 -0.00592002 0 +1008 6.6489e-05 -0.000114316 0 +1009 0.000211924 -0.000890788 0 +1010 -0.000272741 -0.0051201 0 +1011 0.000177507 -0.00147231 0 +1012 -0.000218251 -0.00413276 0 +1013 0.000119471 -0.000246324 0 +1014 0.000139226 -0.00673064 0 +1015 0.000184461 -0.00128019 0 +1016 -0.000259649 -0.00434945 0 +1017 0.000196096 -0.000723367 0 +1018 -0.000279753 -0.00531286 0 +1019 0.000155814 -0.000396407 0 +1020 -0.000122652 -0.00608517 0 +1021 -5.28568e-10 -0.00253437 0 +1022 -3.74496e-05 -0.00275209 0 +1023 3.39663e-05 -0.00231907 0 +1024 -7.79273e-05 -0.00297107 0 +1025 0.00018601 -0.00109492 0 +1026 -0.000295486 -0.00455508 0 +1027 0 0 0 +1028 0.00127581 -0.00772939 0 +1029 6.4123e-05 -0.00210706 0 +1030 -0.000120882 -0.00319001 0 +1031 0.000742311 -0.00729307 0 +1032 6.42683e-05 -0.000119711 0 +1033 0.000359401 -0.00685379 0 +1034 9.01701e-05 -0.00189913 0 +1035 -0.000165521 -0.00340728 0 +1036 0.000173408 -0.000563629 0 +1037 -0.000265454 -0.00548235 0 +1038 0.000111849 -0.00169586 0 +1039 -0.000210857 -0.00362099 0 +1040 0.000112902 -0.000256966 0 +1041 0.000181719 -0.0009167 0 +1042 -0.00032252 -0.00474612 0 +1043 -1.4304e-05 -0.00621651 0 +1044 0.00012888 -0.00149779 0 +1045 -0.000255511 -0.00382887 0 +1046 0.000143223 -0.00041154 0 +1047 -0.000222776 -0.00562303 0 +1048 0.000171135 -0.000745635 0 +1049 -0.000336736 -0.00491836 0 +1050 0 0 0 +1051 0.000140965 -0.00130532 0 +1052 -0.000297789 -0.00402836 0 +1053 6.12252e-05 -0.00012493 0 +1054 0.000152717 -0.00630365 0 +1055 0.000147748 -0.00111882 0 +1056 -0.000335439 -0.00421645 0 +1057 0.000153661 -0.000581859 0 +1058 -7.13111e-05 -0.00252598 0 +1059 -0.000333324 -0.00506742 0 +1060 -3.39668e-05 -0.00231907 0 +1061 -0.000111593 -0.00273324 0 +1062 0.000104818 -0.000267005 0 +1063 -0.000143318 -0.00572894 0 +1064 -1.33906e-10 -0.00211369 0 +1065 -0.000154251 -0.00293961 0 +1066 3.02341e-05 -0.0019107 0 +1067 -0.000198594 -0.00314348 0 +1068 0.000148816 -0.00093857 0 +1069 -0.000365757 -0.00438979 0 +1070 0.00149888 -0.00710252 0 +1071 5.63933e-05 -0.00171095 0 +1072 -0.000243666 -0.0033431 0 +1073 0.000842207 -0.00672166 0 +1074 0 0 0 +1075 0.000396111 -0.00633594 0 +1076 0.000128644 -0.000425401 0 +1077 -0.000306437 -0.00518791 0 +1078 7.81813e-05 -0.00151506 0 +1079 -0.000288323 -0.0035363 0 +1080 0.000143664 -0.000764849 0 +1081 -0.000385305 -0.00454457 0 +1082 5.73722e-05 -0.000129894 0 +1083 -1.62318e-05 -0.00579203 0 +1084 9.52393e-05 -0.00132365 0 +1085 -0.000330983 -0.00372074 0 +1086 9.52979e-05 -0.000276313 0 +1087 -0.000249091 -0.0052743 0 +1088 0.000131703 -0.000597849 0 +1089 0.000107218 -0.00113715 0 +1090 -0.000369806 -0.0038936 0 +1091 -0.000390074 -0.00467658 0 +1092 0 0 0 +1093 0.000172111 -0.00580354 0 +1094 -0.000101294 -0.00230417 0 +1095 -0.000141279 -0.0025009 0 +1096 0.000113656 -0.000956047 0 +1097 -0.00040233 -0.00405185 0 +1098 -6.41231e-05 -0.00210706 0 +1099 -0.000183565 -0.002696 0 +1100 -3.02341e-05 -0.0019107 0 +1101 -0.000227455 -0.00288797 0 +1102 0.000112228 -0.000437761 0 +1103 -0.000375092 -0.00478106 0 +1104 5.27419e-05 -0.000134535 0 +1105 7.04491e-11 -0.00171599 0 +1106 -0.000272133 -0.00307512 0 +1107 -0.000152991 -0.00531946 0 +1108 0.000114064 -0.000780661 0 +1109 -0.00042577 -0.00419197 0 +1110 2.61993e-05 -0.00152379 0 +1111 -0.000316493 -0.00325548 0 +1112 0.00164509 -0.00632226 0 +1113 0.000922998 -0.00604397 0 +1114 4.80049e-05 -0.00133477 0 +1115 -0.000359228 -0.00342683 0 +1116 0.000440601 -0.00575384 0 +1117 8.44334e-05 -0.000284704 0 +1118 -0.000334691 -0.00485284 0 +1119 0.00010781 -0.000611367 0 +1120 -0.000436501 -0.00431018 0 +1121 0 0 0 +1122 -7.47933e-06 -0.00531607 0 +1123 6.5007e-05 -0.00114958 0 +1124 -0.000398613 -0.00358664 0 +1125 7.6762e-05 -0.000968748 0 +1126 -0.000432635 -0.00373211 0 +1127 4.73736e-05 -0.000138777 0 +1128 9.41941e-05 -0.000448413 0 +1129 -0.00043057 -0.00440224 0 +1130 -0.000261845 -0.00488604 0 +1131 -0.000166762 -0.0022747 0 +1132 -0.000127108 -0.00208742 0 +1133 -0.00020858 -0.00245979 0 +1134 -9.01699e-05 -0.00189913 0 +1135 -0.000251959 -0.00264123 0 +1136 8.27355e-05 -0.000792786 0 +1137 -0.000458731 -0.00386012 0 +1138 0.00019969 -0.00525444 0 +1139 -5.63931e-05 -0.00171095 0 +1140 -0.000296069 -0.00281747 0 +1141 -2.6199e-05 -0.00152379 0 +1142 -0.000339998 -0.00298663 0 +1143 7.23601e-05 -0.00029209 0 +1144 -0.000402842 -0.00446362 0 +1145 0 0 0 +1146 -0.000148593 -0.00487431 0 +1147 1.56177e-10 -0.00133853 0 +1148 -0.000382461 -0.00314672 0 +1149 8.23159e-05 -0.000622119 0 +1150 -0.000473968 -0.00396728 0 +1151 2.17872e-05 -0.00115586 0 +1152 -0.000422072 -0.00329541 0 +1153 0.0017338 -0.00551899 0 +1154 0.000987234 -0.00532791 0 +1155 4.13342e-05 -0.000142556 0 +1156 0.000484474 -0.00512615 0 +1157 -0.000347994 -0.00448941 0 +1158 7.47631e-05 -0.000457172 0 +1159 -0.000474727 -0.00404991 0 +1160 3.86802e-05 -0.000976494 0 +1161 -0.0004569 -0.00343019 0 +1162 1.49543e-05 -0.00481103 0 +1163 5.01584e-05 -0.000800997 0 +1164 -0.000484904 -0.00354829 0 +1165 -0.000187872 -0.00205511 0 +1166 -0.000229235 -0.00223132 0 +1167 5.92268e-05 -0.000298287 0 +1168 -0.000148576 -0.00187623 0 +1169 -0.000272027 -0.00240352 0 +1170 -0.000456952 -0.0041041 0 +1171 0 0 0 +1172 -0.000258928 -0.00447448 0 +1173 -0.000111848 -0.00169586 0 +1174 -0.000315546 -0.00257021 0 +1175 -7.8181e-05 -0.00151506 0 +1176 -0.000358869 -0.0027297 0 +1177 5.55811e-05 -0.000629972 0 +1178 -0.000503317 -0.00364671 0 +1179 0.000239625 -0.00469035 0 +1180 -4.80045e-05 -0.00133477 0 +1181 -0.000400945 -0.00288013 0 +1182 3.469e-05 -0.000145808 0 +1183 -0.000415784 -0.00412586 0 +1184 -2.17868e-05 -0.00115586 0 +1185 -0.000440413 -0.00301943 0 +1186 -0.000128808 -0.00441422 0 +1187 5.42279e-05 -0.000463883 0 +1188 -0.000509296 -0.00372231 0 +1189 1.64994e-10 -0.000979069 0 +1190 -0.000475717 -0.00314533 0 +1191 0.00173478 -0.00472519 0 +1192 0.00102994 -0.00462219 0 +1193 0 0 0 +1194 -0.000345883 -0.00411114 0 +1195 0.000535944 -0.00451025 0 +1196 4.52181e-05 -0.000303258 0 +1197 -0.00049906 -0.00377171 0 +1198 1.68019e-05 -0.000805142 0 +1199 -0.000504902 -0.00325539 0 +1200 5.11077e-05 -0.00430446 0 +1201 -0.00024536 -0.00201091 0 +1202 -0.000204449 -0.00184251 0 +1203 -0.000287617 -0.002175 0 +1204 -0.000165439 -0.0016711 0 +1205 -0.000330485 -0.00233341 0 +1206 2.80044e-05 -0.000634715 0 +1207 -0.000525755 -0.00334698 0 +1208 -0.000128879 -0.00149779 0 +1209 -0.000373206 -0.00248457 0 +1210 2.75393e-05 -0.000148481 0 +1211 -0.000468884 -0.00379176 0 +1212 -0.000241239 -0.00405658 0 +1213 -9.52389e-05 -0.00132365 0 +1214 -0.00041472 -0.00262678 0 +1215 3.28642e-05 -0.000468426 0 +1216 -0.000535597 -0.00341743 0 +1217 -6.50066e-05 -0.00114958 0 +1218 -0.000453937 -0.00275818 0 +1219 0.000288078 -0.00414533 0 +1220 0 0 0 +1221 -3.86798e-05 -0.000976493 0 +1222 -0.000489333 -0.00287674 0 +1223 -0.00041394 -0.00377915 0 +1224 3.05301e-05 -0.000306838 0 +1225 -0.000531448 -0.0034639 0 +1226 -9.56352e-05 -0.00395957 0 +1227 -1.68016e-05 -0.000805142 0 +1228 -0.000519358 -0.00298032 0 +1229 0.00168649 -0.00401139 0 +1230 0.00105529 -0.00398323 0 +1231 -0.000329742 -0.00373162 0 +1232 1.28411e-10 -0.00063633 0 +1233 -0.000541898 -0.00306663 0 +1234 1.99711e-05 -0.000150526 0 +1235 0.000586131 -0.00394092 0 +1236 -0.000509864 -0.00348378 0 +1237 -0.000256908 -0.00179864 0 +1238 -0.000298671 -0.00195567 0 +1239 -0.000216322 -0.00163711 0 +1240 -0.000340985 -0.00210692 0 +1241 -0.000177506 -0.00147231 0 +1242 -0.000383068 -0.00225094 0 +1243 9.63702e-05 -0.00382039 0 +1244 1.10149e-05 -0.000470718 0 +1245 -0.000140964 -0.00130532 0 +1246 -0.000424054 -0.00238618 0 +1247 -0.000554841 -0.00313339 0 +1248 0 0 0 +1249 -0.000107217 -0.00113715 0 +1250 -0.000462854 -0.00251098 0 +1251 -0.000467111 -0.00347456 0 +1252 -0.000211107 -0.00364729 0 +1253 -7.67616e-05 -0.000968748 0 +1254 -0.000498244 -0.00262352 0 +1255 1.53821e-05 -0.000309046 0 +1256 -0.000555411 -0.00317819 0 +1257 0.000338196 -0.00364268 0 +1258 -5.0158e-05 -0.000800997 0 +1259 -0.000528718 -0.00272193 0 +1260 -0.000399233 -0.00343448 0 +1261 1.2108e-05 -0.000151911 0 +1262 -0.000540907 -0.00319898 0 +1263 -5.38161e-05 -0.00352713 0 +1264 -2.80041e-05 -0.000634715 0 +1265 -0.000552587 -0.00280422 0 +1266 -0.000305128 -0.00174554 0 +1267 -0.000263686 -0.00159465 0 +1268 -0.000346959 -0.00189061 0 +1269 0.00159638 -0.00347272 0 +1270 -1.10147e-05 -0.000470718 0 +1271 -0.000567855 -0.00286844 0 +1272 0.00106177 -0.00345184 0 +1273 -0.000223289 -0.00143915 0 +1274 -0.000388533 -0.00202854 0 +1275 0 0 0 +1276 -0.000302222 -0.00336248 0 +1277 -0.000507994 -0.00319365 0 +1278 0.000627016 -0.00343569 0 +1279 -0.00018446 -0.00128019 0 +1280 -0.000428971 -0.0021579 0 +1281 -0.000147748 -0.00111882 0 +1282 -0.000467402 -0.00227721 0 +1283 0.000144488 -0.00337407 0 +1284 6.6333e-11 -0.000309757 0 +1285 -0.000572313 -0.00291258 0 +1286 -0.000113655 -0.000956047 0 +1287 -0.000502622 -0.00238484 0 +1288 -0.00045354 -0.00316105 0 +1289 -0.000172766 -0.00325938 0 +1290 -8.27351e-05 -0.000792786 0 +1291 -0.000533434 -0.00247916 0 +1292 4.05427e-06 -0.000152609 0 +1293 -0.000563487 -0.00293492 0 +1294 -5.55808e-05 -0.000629972 0 +1295 -0.000558229 -0.00255841 0 +1296 0.000383688 -0.00319703 0 +1297 -0.000374243 -0.00310034 0 +1298 0 0 0 +1299 -0.000538717 -0.00293385 0 +1300 -3.2864e-05 -0.000468426 0 +1301 -0.00057542 -0.00262098 0 +1302 -8.55302e-06 -0.00312801 0 +1303 -0.000306869 -0.0015445 0 +1304 -0.000348436 -0.00168426 0 +1305 -0.000265569 -0.00139894 0 +1306 -0.000389601 -0.00181701 0 +1307 -0.000225097 -0.00124871 0 +1308 -0.000429649 -0.00194143 0 +1309 -1.53819e-05 -0.000309046 0 +1310 -0.000582969 -0.00266512 0 +1311 -0.00018601 -0.00109492 0 +1312 -0.000467705 -0.00205619 0 +1313 0.00149252 -0.00303329 0 +1314 0.00104515 -0.00301314 0 +1315 -0.00049529 -0.00290842 0 +1316 -0.000267252 -0.00301255 0 +1317 0.000654248 -0.00300998 0 +1318 -0.000148815 -0.00093857 0 +1319 -0.000502803 -0.00215985 0 +1320 -4.05421e-06 -0.000152609 0 +1321 -0.000578892 -0.00268946 0 +1322 0.000189621 -0.0029745 0 +1323 -0.000114063 -0.00078066 0 +1324 -0.000533785 -0.00225097 0 +1325 -0.000430486 -0.00285817 0 +1326 -8.23156e-05 -0.000622119 0 +1327 -0.00055936 -0.00232803 0 +1328 -0.000131063 -0.00289986 0 +1329 0 0 0 +1330 -0.000560846 -0.00269265 0 +1331 -5.42277e-05 -0.000463883 0 +1332 -0.000578039 -0.00238961 0 +1333 0.00041692 -0.00280853 0 +1334 -0.000342096 -0.00278388 0 +1335 -3.05299e-05 -0.000306838 0 +1336 -0.000588183 -0.0024343 0 +1337 -0.000526597 -0.00267404 0 +1338 -0.000345262 -0.00148767 0 +1339 -0.000303747 -0.00135246 0 +1340 -0.000386268 -0.00161601 0 +1341 -0.000262278 -0.00121152 0 +1342 -0.000426046 -0.0017363 0 +1343 3.48041e-05 -0.00276701 0 +1344 -0.000221436 -0.00106591 0 +1345 -0.000463894 -0.00184732 0 +1346 -0.000181719 -0.000916699 0 +1347 -0.000498872 -0.00194779 0 +1348 -1.21079e-05 -0.000151911 0 +1349 -0.000587999 -0.00246089 0 +1350 -0.000473918 -0.00263324 0 +1351 0.00139741 -0.00266714 0 +1352 -0.000143663 -0.000764849 0 +1353 -0.000530055 -0.00203644 0 +1354 -0.000228477 -0.00268749 0 +1355 0.00101319 -0.00264937 0 +1356 0.000662764 -0.00264073 0 +1357 -0.00010781 -0.000611367 0 +1358 -0.00055623 -0.00211194 0 +1359 0 0 0 +1360 -0.000575573 -0.00246834 0 +1361 0.000226559 -0.00262115 0 +1362 -7.47628e-05 -0.000457172 0 +1363 -0.0005762 -0.00217309 0 +1364 -0.000400806 -0.00257105 0 +1365 -8.95885e-05 -0.00257258 0 +1366 -0.000548997 -0.00245609 0 +1367 -4.52179e-05 -0.000303257 0 +1368 -0.000588473 -0.00221864 0 +1369 -0.000337353 -0.00130057 0 +1370 -0.000378442 -0.00142519 0 +1371 -0.000295539 -0.00116927 0 +1372 -0.00041822 -0.00154204 0 +1373 0.000437995 -0.00247024 0 +1374 -0.000306126 -0.00248895 0 +1375 -1.9971e-05 -0.000150526 0 +1376 -0.000253563 -0.00103233 0 +1377 -0.000455994 -0.00165 0 +1378 -0.000591591 -0.00224765 0 +1379 -0.000506363 -0.00242395 0 +1380 -0.000211923 -0.000890788 0 +1381 -0.000491012 -0.00174794 0 +1382 7.28237e-05 -0.00244456 0 +1383 -0.000171134 -0.000745635 0 +1384 -0.000522391 -0.00183472 0 +1385 0 0 0 +1386 -0.000583886 -0.0022592 0 +1387 -0.000131702 -0.000597849 0 +1388 -0.000549156 -0.0019092 0 +1389 -0.000446115 -0.0023725 0 +1390 0.00130118 -0.00235399 0 +1391 -0.000189229 -0.00238987 0 +1392 0.000969669 -0.00233487 0 +1393 -9.41938e-05 -0.000448413 0 +1394 0.000658366 -0.00232379 0 +1395 -0.000570202 -0.00197031 0 +1396 -0.000563749 -0.00225292 0 +1397 0.000254179 -0.00230986 0 +1398 -5.92266e-05 -0.000298287 0 +1399 -0.000584321 -0.00201703 0 +1400 -0.000367019 -0.00230306 0 +1401 -0.000529625 -0.0022286 0 +1402 -5.16712e-05 -0.00227799 0 +1403 -2.75392e-05 -0.000148481 0 +1404 -0.000590213 -0.00204851 0 +1405 -0.00036601 -0.00124421 0 +1406 -0.000324462 -0.00112274 0 +1407 -0.000406049 -0.00135819 0 +1408 -0.000281977 -0.000994785 0 +1409 -0.000444025 -0.00146367 0 +1410 -0.000239022 -0.000861339 0 +1411 -0.000479222 -0.00155961 0 +1412 0 0 0 +1413 -0.000586498 -0.00206405 0 +1414 0.000447146 -0.00217589 0 +1415 -0.000196095 -0.000723367 0 +1416 -0.000510939 -0.00164503 0 +1417 -0.000268759 -0.0022179 0 +1418 -0.000480074 -0.00218682 0 +1419 -0.000153661 -0.000581859 0 +1420 -0.000538274 -0.00171889 0 +1421 0.000103962 -0.00215826 0 +1422 -0.000571816 -0.00206328 0 +1423 -0.000112228 -0.000437761 0 +1424 -0.000560341 -0.0017803 0 +1425 -0.000414215 -0.00212862 0 +1426 -0.000151925 -0.00212035 0 +1427 -7.23599e-05 -0.00029209 0 +1428 -0.000576057 -0.00182833 0 +1429 0.00121137 -0.0020813 0 +1430 0.000919461 -0.00206135 0 +1431 0.000641693 -0.00204951 0 +1432 -0.00054481 -0.00204614 0 +1433 -3.46899e-05 -0.000145808 0 +1434 -0.000584358 -0.00186233 0 +1435 0.000272198 -0.00203685 0 +1436 -0.000331415 -0.00205588 0 +1437 -0.000348777 -0.00107272 0 +1438 -0.000389467 -0.00118433 0 +1439 -0.000306371 -0.000953911 0 +1440 -0.000427916 -0.00128781 0 +1441 -0.000504358 -0.00201303 0 +1442 0 0 0 +1443 -0.000584057 -0.00188165 0 +1444 -1.86375e-05 -0.00201441 0 +1445 -0.000262712 -0.000828833 0 +1446 -0.000463558 -0.00138222 0 +1447 -0.000218249 -0.000698426 0 +1448 -0.000495741 -0.00146667 0 +1449 -0.000173408 -0.000563629 0 +1450 -0.00052375 -0.00154027 0 +1451 -0.000573998 -0.00188605 0 +1452 0.000446008 -0.00191881 0 +1453 -0.000232306 -0.00197125 0 +1454 -0.000449529 -0.00196489 0 +1455 -0.000128643 -0.000425401 0 +1456 -0.000546783 -0.0016022 0 +1457 0.000127496 -0.00190489 0 +1458 -8.44331e-05 -0.000284704 0 +1459 -0.000563967 -0.00165171 0 +1460 -0.000553081 -0.00187542 0 +1461 -4.13341e-05 -0.000142556 0 +1462 -0.000574373 -0.00168819 0 +1463 -0.000379949 -0.00190321 0 +1464 -0.000118015 -0.00187793 0 +1465 0.00112081 -0.00184257 0 +1466 0.000864784 -0.00182186 0 +1467 -0.000520264 -0.00185019 0 +1468 0.000617771 -0.00180851 0 +1469 0 0 0 +1470 -0.000577016 -0.00171114 0 +1471 0.000281381 -0.00179633 0 +1472 -0.000368269 -0.00102005 0 +1473 -0.000326516 -0.000910399 0 +1474 -0.000407581 -0.00112192 0 +1475 -0.000282732 -0.000793836 0 +1476 -0.000443939 -0.00121517 0 +1477 -0.000295745 -0.00183017 0 +1478 -0.000237338 -0.000671236 0 +1479 -0.000476836 -0.00129899 0 +1480 -0.000570932 -0.00172032 0 +1481 -0.000474877 -0.00181108 0 +1482 -0.000190706 -0.000543503 0 +1483 -0.000505632 -0.00137257 0 +1484 8.60745e-06 -0.00177991 0 +1485 -0.000143222 -0.00041154 0 +1486 -0.000529694 -0.00143523 0 +1487 -0.000555159 -0.0017157 0 +1488 -9.52976e-05 -0.000276313 0 +1489 -0.00054826 -0.00148627 0 +1490 -0.000416379 -0.00175937 0 +1491 -0.000197939 -0.0017484 0 +1492 0.000436776 -0.00169283 0 +1493 -4.73734e-05 -0.000138777 0 +1494 -0.000560576 -0.00152521 0 +1495 -0.000528891 -0.00169759 0 +1496 0.000143924 -0.00168087 0 +1497 0 0 0 +1498 -0.000565813 -0.00155159 0 +1499 -0.000344998 -0.00169682 0 +1500 -8.83835e-05 -0.00166111 0 +1501 0.00103362 -0.00163194 0 +1502 -0.00049144 -0.00166665 0 +1503 0.000807129 -0.0016113 0 +1504 -0.000342272 -0.000864931 0 +1505 -0.000382864 -0.000965538 0 +1506 -0.000563155 -0.00156525 0 +1507 0.000587072 -0.00159762 0 +1508 -0.000298928 -0.000756895 0 +1509 -0.000420315 -0.00105793 0 +1510 -0.000253189 -0.000642234 0 +1511 -0.000454183 -0.00114139 0 +1512 -0.000205378 -0.000521782 0 +1513 0.000283176 -0.00158474 0 +1514 -0.000483977 -0.00121518 0 +1515 -0.000261227 -0.00162561 0 +1516 -0.000551833 -0.00156613 0 +1517 -0.000155814 -0.000396407 0 +1518 -0.00050915 -0.00127869 0 +1519 -0.000442469 -0.00162391 0 +1520 3.00943e-05 -0.00157153 0 +1521 -0.000104818 -0.000267005 0 +1522 -0.0005291 -0.00133134 0 +1523 -0.000531111 -0.00155454 0 +1524 -5.27417e-05 -0.000134535 0 +1525 -0.000543193 -0.00137268 0 +1526 -0.000381933 -0.00157087 0 +1527 -0.000166628 -0.00154842 0 +1528 0.000420887 -0.00149431 0 +1529 0 0 0 +1530 -0.000550748 -0.00140234 0 +1531 -0.000500496 -0.00153101 0 +1532 0.000153801 -0.00148299 0 +1533 -0.000551107 -0.00142016 0 +1534 -0.000310346 -0.00150932 0 +1535 -0.000353588 -0.000818198 0 +1536 -0.000311197 -0.000718581 0 +1537 -0.000392542 -0.000909991 0 +1538 -0.000265681 -0.000611871 0 +1539 -0.000427737 -0.000993296 0 +1540 -6.3193e-05 -0.00146794 0 +1541 -0.000459566 -0.00149643 0 +1542 -0.000543604 -0.00142614 0 +1543 0.000946638 -0.00144701 0 +1544 -0.000217296 -0.000498823 0 +1545 -0.000458769 -0.00106746 0 +1546 0.000747459 -0.00142608 0 +1547 0.000552238 -0.00141146 0 +1548 -0.000166289 -0.000380238 0 +1549 -0.000485225 -0.00113194 0 +1550 -0.000112902 -0.000256967 0 +1551 0.000278555 -0.00139828 0 +1552 -0.000506612 -0.00118621 0 +1553 -0.000527685 -0.0014205 0 +1554 -0.000228709 -0.00144149 0 +1555 -0.000408394 -0.00145203 0 +1556 -5.73721e-05 -0.000129894 0 +1557 -0.000522427 -0.00122989 0 +1558 4.61618e-05 -0.00138716 0 +1559 0 0 0 +1560 -0.000532128 -0.00126265 0 +1561 -0.000502861 -0.00140372 0 +1562 -0.000347195 -0.00139935 0 +1563 -0.000535166 -0.00128438 0 +1564 -0.000138666 -0.00136973 0 +1565 0.000399874 -0.00131953 0 +1566 -0.000468877 -0.00137656 0 +1567 0.000158032 -0.00130853 0 +1568 -0.000531034 -0.00129505 0 +1569 -0.000319526 -0.00067945 0 +1570 -0.000360484 -0.000770855 0 +1571 -0.00027476 -0.000580592 0 +1572 -0.000397397 -0.000854188 0 +1573 -0.000226386 -0.000474961 0 +1574 -0.000429988 -0.000928864 0 +1575 -0.000276876 -0.00134027 0 +1576 -0.000174572 -0.00036328 0 +1577 -0.000457937 -0.000994381 0 +1578 -0.000519235 -0.0012949 0 +1579 -0.000425653 -0.00134006 0 +1580 -4.24413e-05 -0.00129656 0 +1581 -0.000119471 -0.000246324 0 +1582 -0.00048088 -0.00105028 0 +1583 0.000862223 -0.00128381 0 +1584 0.000686466 -0.00126313 0 +1585 0.000513477 -0.0012484 0 +1586 -6.12251e-05 -0.00012493 0 +1587 -0.000498428 -0.00109623 0 +1588 -0.00049944 -0.00128431 0 +1589 0.000268814 -0.00123436 0 +1590 0 0 0 +1591 -0.000510156 -0.00113196 0 +1592 -0.00019859 -0.00127675 0 +1593 -0.000373471 -0.00129552 0 +1594 5.72697e-05 -0.0012243 0 +1595 -0.00051565 -0.00115734 0 +1596 -0.000471354 -0.00126395 0 +1597 -0.000514487 -0.00117239 0 +1598 -0.000312912 -0.00124453 0 +1599 -0.000114176 -0.00121105 0 +1600 0.000374628 -0.00116621 0 +1601 -0.000323953 -0.000640024 0 +1602 -0.00043501 -0.00123469 0 +1603 -0.000280434 -0.000548835 0 +1604 -0.000363058 -0.000723533 0 +1605 -0.000232626 -0.000450537 0 +1606 -0.000397575 -0.000798817 0 +1607 -0.000506317 -0.00117729 0 +1608 -0.000180623 -0.000345777 0 +1609 -0.000427299 -0.000865433 0 +1610 0.000157364 -0.00115508 0 +1611 -0.000124494 -0.000235248 0 +1612 -0.000451976 -0.000922961 0 +1613 -0.000244991 -0.00118881 0 +1614 -6.42682e-05 -0.000119711 0 +1615 -0.00047133 -0.000971115 0 +1616 -0.00049083 -0.00117239 0 +1617 -0.00039052 -0.00119765 0 +1618 -2.57841e-05 -0.00114518 0 +1619 0 0 0 +1620 0.000778403 -0.00114103 0 +1621 -0.000485057 -0.00100965 0 +1622 0.000624623 -0.00112025 0 +1623 0.000472331 -0.00110496 0 +1624 -0.000467868 -0.00115826 0 +1625 -0.000492838 -0.00103847 0 +1626 0.000254699 -0.00109057 0 +1627 -0.000171106 -0.00113027 0 +1628 -0.00033846 -0.0011542 0 +1629 -0.000494383 -0.00105759 0 +1630 6.40625e-05 -0.0010812 0 +1631 -0.000437384 -0.00113566 0 +1632 -0.000489398 -0.00106717 0 +1633 -0.000282755 -0.000517014 0 +1634 -0.000324583 -0.00060082 0 +1635 -0.000279546 -0.00110581 0 +1636 -0.000236038 -0.000425883 0 +1637 -0.000361459 -0.000676806 0 +1638 -9.30332e-05 -0.00107078 0 +1639 -0.00018444 -0.00032797 0 +1640 -0.000393292 -0.000744557 0 +1641 0.000346151 -0.00103197 0 +1642 -0.000399571 -0.00110555 0 +1643 -0.000127945 -0.000223889 0 +1644 -0.000419938 -0.000803709 0 +1645 -0.000477703 -0.00106753 0 +1646 -6.64888e-05 -0.000114316 0 +1647 -0.000441234 -0.000853993 0 +1648 0.000152582 -0.00102072 0 +1649 0 0 0 +1650 -0.000456979 -0.000895207 0 +1651 -0.000214996 -0.00105418 0 +1652 -0.000459132 -0.00105915 0 +1653 -0.00035481 -0.00106911 0 +1654 -0.000466975 -0.000927271 0 +1655 -1.28876e-05 -0.00101217 0 +1656 0.000696628 -0.00101593 0 +1657 0.000562279 -0.000995451 0 +1658 0.000428873 -0.000980156 0 +1659 -0.000471007 -0.000950195 0 +1660 -0.000433741 -0.00104271 0 +1661 0.00023713 -0.0009651 0 +1662 -0.000303782 -0.00102762 0 +1663 -0.000146219 -0.00100092 0 +1664 -0.000468907 -0.000964131 0 +1665 -0.000401627 -0.00101902 0 +1666 6.70439e-05 -0.000956036 0 +1667 -0.000281837 -0.000485517 0 +1668 -0.00023669 -0.000401298 0 +1669 -0.000321568 -0.000562275 0 +1670 -0.000460523 -0.000969359 0 +1671 -0.000186061 -0.000310088 0 +1672 -0.0003559 -0.000631202 0 +1673 -0.000129849 -0.000212393 0 +1674 -0.00038481 -0.000691957 0 +1675 -0.00024742 -0.000982558 0 +1676 -6.7887e-05 -0.000108813 0 +1677 -0.000408237 -0.000744313 0 +1678 -7.49938e-05 -0.00094775 0 +1679 -0.000363207 -0.000989125 0 +1680 -0.00044581 -0.000966307 0 +1681 0.000314989 -0.000915272 0 +1682 0 0 0 +1683 -0.000426099 -0.000788082 0 +1684 -0.000438281 -0.00082321 0 +1685 0.000144326 -0.000903747 0 +1686 -0.000424783 -0.000955561 0 +1687 -0.000186948 -0.000935379 0 +1688 -0.000444691 -0.000849699 0 +1689 -0.000318977 -0.000954128 0 +1690 -3.29301e-06 -0.000896135 0 +1691 -0.000445216 -0.000867703 0 +1692 0.000615564 -0.000907753 0 +1693 0.000499667 -0.000887278 0 +1694 -0.000397624 -0.000937846 0 +1695 0.00038405 -0.000871652 0 +1696 0.00021664 -0.000856351 0 +1697 -0.00043982 -0.00087746 0 +1698 -0.000269799 -0.000915339 0 +1699 -0.000123846 -0.000887611 0 +1700 -0.000234679 -0.000377088 0 +1701 -0.000277814 -0.000454699 0 +1702 -0.000185544 -0.00029235 0 +1703 -0.000315097 -0.000524832 0 +1704 -0.000364633 -0.000914054 0 +1705 -0.000130227 -0.000200916 0 +1706 -0.000346613 -0.000587188 0 +1707 6.68257e-05 -0.000847468 0 +1708 -0.000428464 -0.000879362 0 +1709 -6.8474e-05 -0.000103277 0 +1710 -0.000372422 -0.000641554 0 +1711 0 0 0 +1712 -0.000392536 -0.000687779 0 +1713 -0.000216651 -0.000874033 0 +1714 -0.000406962 -0.000725806 0 +1715 -5.97812e-05 -0.000840655 0 +1716 -0.000411263 -0.00087392 0 +1717 -0.00032632 -0.000885174 0 +1718 0.0002818 -0.000814531 0 +1719 -0.000415675 -0.000755659 0 +1720 0.000133192 -0.000802826 0 +1721 -0.000388346 -0.000861775 0 +1722 -0.000418678 -0.000777467 0 +1723 -0.000160829 -0.00083162 0 +1724 -0.000283364 -0.00085234 0 +1725 3.40384e-06 -0.000795824 0 +1726 -0.000415974 -0.00079146 0 +1727 -0.000360067 -0.000843712 0 +1728 0.000536119 -0.000814578 0 +1729 0.00043696 -0.000794378 0 +1730 0.000337873 -0.000778811 0 +1731 -0.00040763 -0.00079798 0 +1732 -0.000230143 -0.000353492 0 +1733 -0.000182988 -0.000274953 0 +1734 -0.000270871 -0.000424879 0 +1735 -0.000236662 -0.000816715 0 +1736 -0.000129147 -0.000189572 0 +1737 -0.000305397 -0.00048883 0 +1738 0.000193864 -0.000763045 0 +1739 -0.000103762 -0.00078936 0 +1740 -6.82767e-05 -9.77698e-05 0 +1741 -0.00033388 -0.000545169 0 +1742 -0.000326822 -0.000820599 0 +1743 0 0 0 +1744 -0.000356456 -0.000593751 0 +1745 -0.000393748 -0.000797488 0 +1746 6.38497e-05 -0.000754227 0 +1747 -0.000373213 -0.000634548 0 +1748 -0.000384246 -0.000667575 0 +1749 -0.000187296 -0.000779541 0 +1750 -0.00037454 -0.000790552 0 +1751 -0.000289276 -0.000793451 0 +1752 -4.70414e-05 -0.000748534 0 +1753 -0.000389614 -0.000692969 0 +1754 0.000246926 -0.000728707 0 +1755 -0.000389429 -0.000710931 0 +1756 -0.000350294 -0.000777866 0 +1757 0.000119681 -0.000716765 0 +1758 -0.000136523 -0.000742005 0 +1759 -0.000248162 -0.000763289 0 +1760 -0.000383778 -0.000721781 0 +1761 7.63784e-06 -0.000710202 0 +1762 -0.000321442 -0.000760206 0 +1763 -0.000178495 -0.000258083 0 +1764 -0.000223228 -0.000330774 0 +1765 -0.000126667 -0.000178512 0 +1766 -0.0002612 -0.000396342 0 +1767 0.00045735 -0.000735941 0 +1768 0.00037426 -0.000715786 0 +1769 -6.73251e-05 -9.23589e-05 0 +1770 -0.000292707 -0.000454619 0 +1771 -0.000372856 -0.000725928 0 +1772 0.000290935 -0.000700032 0 +1773 0 0 0 +1774 -0.000317981 -0.000505494 0 +1775 -0.000204473 -0.000731255 0 +1776 -8.57517e-05 -0.000705281 0 +1777 0.000169183 -0.000684123 0 +1778 -0.000337232 -0.00054894 0 +1779 -0.000288532 -0.000738466 0 +1780 -0.000356853 -0.000723885 0 +1781 -0.000350627 -0.000584991 0 +1782 5.86217e-05 -0.000675323 0 +1783 -0.00035834 -0.000613769 0 +1784 -0.000159283 -0.000698408 0 +1785 -0.000336116 -0.000716271 0 +1786 -0.000360523 -0.000635474 0 +1787 -0.000252272 -0.000713573 0 +1788 -3.64625e-05 -0.000670419 0 +1789 0.000210806 -0.000656727 0 +1790 -0.000357366 -0.000650392 0 +1791 -0.000311012 -0.000703776 0 +1792 0.000104236 -0.00064464 0 +1793 -0.000113859 -0.00066587 0 +1794 -0.000213507 -0.000686539 0 +1795 -0.000349071 -0.000658903 0 +1796 -0.000172204 -0.000241898 0 +1797 -0.000122885 -0.000167815 0 +1798 -0.000214116 -0.000309112 0 +1799 -6.56653e-05 -8.70966e-05 0 +1800 -0.000249024 -0.000369327 0 +1801 9.79264e-06 -0.000638361 0 +1802 0 0 0 +1803 -0.000277295 -0.00042244 0 +1804 -0.000282102 -0.000687205 0 +1805 -0.000299224 -0.000468451 0 +1806 -0.000335908 -0.000661467 0 +1807 0.000379796 -0.000670517 0 +1808 0.000311637 -0.000650587 0 +1809 0.000243222 -0.000634908 0 +1810 -0.0003151 -0.00050739 0 +1811 -0.000173218 -0.000658353 0 +1812 -6.95306e-05 -0.000634616 0 +1813 0.000143038 -0.000618699 0 +1814 -0.000325157 -0.000539391 0 +1815 -0.000318191 -0.000658642 0 +1816 -0.000249988 -0.000667382 0 +1817 -0.000329654 -0.000564636 0 +1818 5.1508e-05 -0.000609896 0 +1819 -0.000296332 -0.000651053 0 +1820 -0.000328814 -0.000583403 0 +1821 -0.000132527 -0.000630029 0 +1822 -0.000215475 -0.000645236 0 +1823 -2.7684e-05 -0.000605591 0 +1824 -0.000322927 -0.000596033 0 +1825 0.000173661 -0.000597897 0 +1826 -0.000270822 -0.000639417 0 +1827 -0.000117882 -0.000157616 0 +1828 -0.000164243 -0.000226547 0 +1829 8.72443e-05 -0.000585646 0 +1830 -6.33396e-05 -8.20387e-05 0 +1831 -0.000202981 -0.000288714 0 +1832 -0.000312263 -0.000602955 0 +1833 0 0 0 +1834 -0.000234561 -0.000344048 0 +1835 -0.000179422 -0.000621646 0 +1836 -9.2642e-05 -0.000602517 0 +1837 -0.000259414 -0.000392553 0 +1838 -0.000277903 -0.000434282 0 +1839 -0.000242264 -0.000624486 0 +1840 1.0248e-05 -0.000579582 0 +1841 -0.0002972 -0.000604673 0 +1842 -0.000290378 -0.000469363 0 +1843 0.000302788 -0.000618027 0 +1844 0.000249121 -0.000598144 0 +1845 0.000195104 -0.000582367 0 +1846 -0.000142851 -0.000597563 0 +1847 -0.000297151 -0.000497982 0 +1848 -5.48371e-05 -0.000576702 0 +1849 -0.000278113 -0.000601754 0 +1850 0.000115712 -0.000566089 0 +1851 -0.000211366 -0.000607087 0 +1852 -0.000298543 -0.000520398 0 +1853 4.29148e-05 -0.000557256 0 +1854 -0.000294865 -0.000536936 0 +1855 -0.000255522 -0.00059485 0 +1856 -0.000106867 -0.00057389 0 +1857 -0.000178944 -0.000588051 0 +1858 -0.000286468 -0.00054799 0 +1859 -0.000111771 -0.000147966 0 +1860 -6.04055e-05 -7.7227e-05 0 +1861 -0.000154772 -0.000212145 0 +1862 -2.12611e-05 -0.000549524 0 +1863 0.000135792 -0.000551518 0 +1864 -0.000229964 -0.000584636 0 +1865 0 0 0 +1866 -0.000190024 -0.000269701 0 +1867 -0.000218051 -0.000320672 0 +1868 -0.000273718 -0.000554026 0 +1869 6.90418e-05 -0.000539175 0 +1870 -0.000239344 -0.000365113 0 +1871 -0.000145908 -0.000568234 0 +1872 -7.26373e-05 -0.000551447 0 +1873 -0.000254323 -0.00040317 0 +1874 -0.000202129 -0.000571872 0 +1875 -0.000257046 -0.000555563 0 +1876 -0.000263404 -0.00043502 0 +1877 7.87613e-06 -0.000529841 0 +1878 0.000226586 -0.000577608 0 +1879 -0.000266956 -0.000460923 0 +1880 0.00018672 -0.00055788 0 +1881 0.000146573 -0.00054217 0 +1882 -0.000236926 -0.000553194 0 +1883 -0.000172759 -0.000557311 0 +1884 -0.000265376 -0.000481184 0 +1885 8.75212e-05 -0.000525704 0 +1886 -4.14103e-05 -0.000527708 0 +1887 -0.000259032 -0.000496177 0 +1888 3.31478e-05 -0.000516872 0 +1889 -0.000213916 -0.000547543 0 +1890 -0.000105106 -0.000536485 0 +1891 -0.000142721 -0.000541761 0 +1892 -5.69113e-05 -7.27053e-05 0 +1893 -0.000104645 -0.000138978 0 +1894 -0.000248353 -0.000506333 0 +1895 0 0 0 +1896 -0.000143927 -0.000198805 0 +1897 -0.000175425 -0.000252233 0 +1898 -0.000199714 -0.000299348 0 +1899 -0.000188638 -0.000539296 0 +1900 9.73481e-05 -0.000517183 0 +1901 -0.000217335 -0.000340296 0 +1902 -0.000233759 -0.000512135 0 +1903 -1.53854e-05 -0.000507692 0 +1904 -7.53538e-05 -0.00051892 0 +1905 -0.000228765 -0.00037527 0 +1906 4.99461e-05 -0.000504716 0 +1907 -0.000234472 -0.00040452 0 +1908 -5.15823e-05 -0.000509729 0 +1909 -0.000215761 -0.00051413 0 +1910 -0.000158168 -0.000526331 0 +1911 -0.00023489 -0.000428347 0 +1912 6.27127e-06 -0.000496496 0 +1913 0.000150734 -0.000549116 0 +1914 -0.000103659 -0.000515801 0 +1915 0.000124424 -0.000529406 0 +1916 9.78533e-05 -0.000513656 0 +1917 -0.000194875 -0.000512886 0 +1918 -0.000230464 -0.000447106 0 +1919 -0.000130693 -0.000515172 0 +1920 -0.000221633 -0.000461205 0 +1921 -2.71758e-05 -0.000492825 0 +1922 -0.000171737 -0.000509045 0 +1923 2.25288e-05 -0.000488297 0 +1924 -5.29189e-05 -6.8505e-05 0 +1925 0 0 0 +1926 -9.66197e-05 -0.000130677 0 +1927 -0.000131873 -0.000186606 0 +1928 -0.000159388 -0.000236381 0 +1929 -0.000208873 -0.000471096 0 +1930 -0.00010674 -0.000505984 0 +1931 -0.000179785 -0.000280182 0 +1932 -0.000193653 -0.000318196 0 +1933 -0.000192674 -0.000477291 0 +1934 -0.000143329 -0.000500988 0 +1935 -6.82432e-05 -0.000493944 0 +1936 -0.000201514 -0.000350689 0 +1937 4.42492e-05 -0.000487312 0 +1938 -0.00020389 -0.000377949 0 +1939 -4.93351e-05 -0.000487406 0 +1940 -0.000173577 -0.000480319 0 +1941 -0.00020126 -0.000400331 0 +1942 -3.18498e-05 -0.000481237 0 +1943 -0.00011422 -0.000492012 0 +1944 -7.11722e-05 -0.000487438 0 +1945 -0.000194124 -0.000418221 0 +1946 7.53098e-05 -0.000532093 0 +1947 -0.00015218 -0.000480762 0 +1948 6.38392e-05 -0.000514708 0 +1949 5.06134e-05 -0.000498468 0 +1950 3.91784e-05 -0.000487473 0 +1951 -9.83923e-06 -0.000473469 0 +1952 -9.2356e-05 -0.000486516 0 +1953 -0.000182964 -0.000432045 0 +1954 0 0 0 +1955 -4.84776e-05 -6.46583e-05 0 +1956 -8.77908e-05 -0.000123154 0 +1957 2.02883e-05 -0.000474921 0 +1958 -0.000118746 -0.000175626 0 +1959 -0.000129138 -0.000479216 0 +1960 -0.000142086 -0.000222259 0 +1961 1.02248e-05 -0.000470924 0 +1962 -0.000168323 -0.000442297 0 +1963 -0.000158472 -0.00026327 0 +1964 -7.1048e-05 -0.000480671 0 +1965 8.86921e-07 -0.000468695 0 +1966 -0.00016853 -0.000298923 0 +1967 -0.000172829 -0.000329515 0 +1968 -0.000150712 -0.000449467 0 +1969 -0.000101487 -0.000474789 0 +1970 -0.000171925 -0.000355391 0 +1971 -1.20377e-05 -0.000466892 0 +1972 -3.08411e-05 -0.000470487 0 +1973 -0.000130725 -0.000454097 0 +1974 -0.000166345 -0.000376944 0 +1975 -1.84517e-05 -0.000467072 0 +1976 -3.70783e-05 -0.000469957 0 +1977 -0.00010901 -0.000456736 0 +1978 0 -0.000526415 0 +1979 0 -0.00050907 0 +1980 -0.000152992 -0.000391163 0 +1981 0 -0.000494666 0 +1982 0 0 0 +1983 -4.36486e-05 -6.1187e-05 0 +1984 -7.82707e-05 -0.000116416 0 +1985 0 -0.00048322 0 +1986 -0.000104701 -0.000165916 0 +1987 0 -0.000474682 0 +1988 -0.000123711 -0.000209905 0 +1989 -0.000139634 -0.000405604 0 +1990 -8.6302e-05 -0.000458045 0 +1991 0 -0.000468723 0 +1992 -0.000135996 -0.000248677 0 +1993 -5.66197e-05 -0.0004647 0 +1994 -3.42041e-05 -0.000466254 0 +1995 -0.000126946 -0.000419917 0 +1996 0 -0.000464863 0 +1997 -0.000142209 -0.000282525 0 +1998 0 -0.000462776 0 +1999 -0.000142963 -0.000311789 0 +2000 -0.000108102 -0.000428656 0 +2001 -3.76735e-05 -0.000463531 0 +2002 0 -0.000462215 0 +2003 -0.000138853 -0.00033689 0 +2004 0 -0.000462236 0 +2005 -0.000126884 -0.000355096 0 +2006 0 -0.000462469 0 +2007 -4.17409e-05 -0.000454379 0 +2008 0 0 0 +2009 -3.84786e-05 -5.81136e-05 0 +2010 -6.81495e-05 -0.000110534 0 +2011 0 -0.000462465 0 +2012 -8.9869e-05 -0.000157527 0 +2013 -0.000111064 -0.000370555 0 +2014 -0.000104431 -0.000199395 0 +2015 -9.92446e-05 -0.000388696 0 +2016 -0.000112549 -0.000236463 0 +2017 -4.30297e-05 -0.000445979 0 +2018 0 -0.000461682 0 +2019 -6.56506e-05 -0.000427931 0 +2020 -8.50217e-05 -0.000403918 0 +2021 0 -0.000459615 0 +2022 -4.37288e-05 -0.000435022 0 +2023 -0.000106576 -0.000264589 0 +2024 -0.000102312 -0.000321513 0 +2025 0 -0.000455951 0 +2026 -0.00010289 -0.000293131 0 +2027 0 0 0 +2028 -3.30242e-05 -5.54524e-05 0 +2029 -8.7523e-05 -0.00034066 0 +2030 -5.75305e-05 -0.000105501 0 +2031 0 -0.000450447 0 +2032 -7.43939e-05 -0.000150483 0 +2033 -4.33462e-05 -0.000409359 0 +2034 -8.44227e-05 -0.000190729 0 +2035 0 -0.00044242 0 +2036 -4.2254e-05 -0.000390431 0 +2037 -8.08876e-05 -0.000223069 0 +2038 0 -0.000431855 0 +2039 -5.50345e-05 -0.000347554 0 +2040 -6.5148e-05 -0.000310818 0 +2041 -4.07353e-05 -0.000368278 0 +2042 -6.89223e-05 -0.000282837 0 +2043 0 -0.000418696 0 +2044 0 0 0 +2045 -2.73274e-05 -5.32187e-05 0 +2046 -6.99947e-05 -0.000251701 0 +2047 -4.60954e-05 -0.000102289 0 +2048 -5.74513e-05 -0.000145544 0 +2049 -6.37946e-05 -0.000183996 0 +2050 0 -0.000402551 0 +2051 -3.40758e-05 -0.000321876 0 +2052 -5.60479e-05 -0.000216468 0 +2053 0 -0.000383213 0 +2054 0 0 0 +2055 0 -0.000360765 0 +2056 -3.12834e-05 -0.000290751 0 +2057 -2.14568e-05 -5.25706e-05 0 +2058 -3.71832e-05 -0.000261049 0 +2059 -3.39905e-05 -0.000100027 0 +2060 -4.09099e-05 -0.000141355 0 +2061 -4.28212e-05 -0.000179168 0 +2062 0 -0.00033526 0 +2063 -3.22886e-05 -0.000223024 0 +2064 0 -0.000306159 0 +2065 0 0 0 +2066 -1.52574e-05 -5.12178e-05 0 +2067 -2.27795e-05 -0.000187846 0 +2068 0 -0.000273626 0 +2069 -1.81318e-05 -0.000102844 0 +2070 -1.76318e-05 -0.000143136 0 +2071 0 -0.000237675 0 +2072 0 0 0 +2073 0 -0.000198116 0 +2074 -7.10301e-06 -5.61566e-05 0 +2075 0 -0.00015464 0 +2076 0 0 0 +2077 0 -0.000107306 0 +2078 0 -5.59503e-05 0 +2079 0 0 0 +End Values Result "TOTAL_DISPLACEMENT" "Kratos" 3 Vector OnNodes Values 1 0 -0.000545683 0 diff --git a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage4.post.orig.res b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage4.post.orig.res index 4583870995c7..2ace70b88387 100644 --- a/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage4.post.orig.res +++ b/applications/GeoMechanicsApplication/tests/test_settlement_workflow/test_model_stage4.post.orig.res @@ -2088,6 +2088,2088 @@ Values 2078 0 -2.03919e-06 0 2079 0 0 0 End Values +Result "INCREMENTAL_DISPLACEMENT" "Kratos" 3.2 Vector OnNodes +Values +1 0 0.0200742 0 +2 0 0.019982 0 +3 0.000430185 0.0202678 0 +4 0.000118834 0.0201892 0 +5 0 0.0199289 0 +6 0.000784516 0.0208764 0 +7 2.71445e-05 0.0206802 0 +8 -0.000158266 0.0200457 0 +9 0.000440826 0.021617 0 +10 0 0.0198451 0 +11 0 0 0 +12 -0.000422834 0.0204286 0 +13 -0.000372004 0.021248 0 +14 -0.000272098 0.0199335 0 +15 -4.52606e-05 0.0225378 0 +16 0 0 0 +17 0 0.0197125 0 +18 0 0 0 +19 -0.0005996 0.0202014 0 +20 -0.000794646 0.0209206 0 +21 -0.000809349 0.0220239 0 +22 -0.000318346 0.0197213 0 +23 0 0 0 +24 -0.000641134 0.0233628 0 +25 0 0.0195 0 +26 0 0 0 +27 -0.000932102 0.0205314 0 +28 -0.000637842 0.0198767 0 +29 -0.00115852 0.0214514 0 +30 -0.0012618 0.0225666 0 +31 -0.000317327 0.0194454 0 +32 0 0 0 +33 -0.00119082 0.0239405 0 +34 0 0.0191914 0 +35 0 0 0 +36 -0.000953364 0.0202001 0 +37 -0.00124839 0.0210575 0 +38 -0.000598083 0.0195027 0 +39 -0.00161483 0.0228874 0 +40 -0.000284603 0.0190706 0 +41 0 0 0 +42 0 0 0 +43 -0.0016786 0.0242185 0 +44 -0.00117673 0.0205659 0 +45 0 0.0187817 0 +46 0 0 0 +47 -0.0008408 0.0196857 0 +48 -0.000507439 0.0190301 0 +49 -0.00160956 0.0222112 0 +50 -0.000232976 0.0185944 0 +51 0 0 0 +52 0 0 0 +53 0 0 0 +54 -0.000940637 0.0197954 0 +55 -0.00203746 0.0242577 0 +56 -0.00064451 0.0190165 0 +57 -0.00125107 0.0208646 0 +58 0 0 0 +59 0 0.0182715 0 +60 -0.000393698 0.0184622 0 +61 0 0 0 +62 -0.00164765 0.0225607 0 +63 0 0 0 +64 -0.000173618 0.0180233 0 +65 0 0 0 +66 -0.000675544 0.0189754 0 +67 -0.000915093 0.0198827 0 +68 0 0 0 +69 -0.000465704 0.0183375 0 +70 -0.00199943 0.0239674 0 +71 -0.00111455 0.0209668 0 +72 0 0.0176698 0 +73 0 0 0 +74 0 0 0 +75 -0.000273388 0.0178098 0 +76 0 0 0 +77 -0.00122088 0.0220931 0 +78 0 0 0 +79 -0.000114209 0.0173683 0 +80 -0.000439502 0.0181744 0 +81 -0.00056781 0.0188365 0 +82 0 0 0 +83 -0.000822696 0.0206106 0 +84 0 0 0 +85 -0.000680567 0.0197283 0 +86 -0.000290582 0.0175903 0 +87 0 0.0169892 0 +88 -0.00125003 0.0232829 0 +89 0 0 0 +90 0 0 0 +91 -0.000159516 0.0170855 0 +92 -0.000764587 0.0215558 0 +93 0 0 0 +94 0 0 0 +95 -5.90835e-05 0.0166432 0 +96 -0.000224036 0.0173304 0 +97 -0.000463875 0.0200747 0 +98 -0.000285524 0.0178947 0 +99 -0.000388404 0.0192726 0 +100 0 0 0 +101 -0.000305968 0.0185098 0 +102 -0.000433087 0.0233471 0 +103 -0.000132764 0.01679 0 +104 -0.000443001 0.0219978 0 +105 0 0 0 +106 0 0.0162427 0 +107 0 0 0 +108 0 0 0 +109 -0.000228043 0.0204796 0 +110 -5.78728e-05 0.0163047 0 +111 -9.03168e-05 0.0170114 0 +112 -8.38432e-05 0.0175396 0 +113 -7.35657e-05 0.0193158 0 +114 -6.04809e-05 0.018601 0 +115 0 0 0 +116 -1.05947e-05 0.0158621 0 +117 0 0 0 +118 0.000220098 0.0215179 0 +119 0.000495862 0.0223273 0 +120 0.000155091 0.0206222 0 +121 3.15327e-08 0.0163289 0 +122 8.50503e-05 0.0176002 0 +123 0.000205774 0.0195019 0 +124 0.00078039 0.0222475 0 +125 2.94053e-05 0.0158254 0 +126 1.98262e-05 0.0156201 0 +127 0 0.0154447 0 +128 0 0 0 +129 9.28278e-05 0.016617 0 +130 0 0 0 +131 0.000299087 0.0184654 0 +132 0.000481011 0.0219271 0 +133 2.79642e-05 0.0151743 0 +134 0.000153307 0.0159359 0 +135 0.000724247 0.0205493 0 +136 0.000254979 0.0166373 0 +137 0.000626604 0.0199444 0 +138 0.000387499 0.0174859 0 +139 0 0 0 +140 0.000620615 0.0190621 0 +141 0.000884838 0.0205981 0 +142 -0.000380138 0.0212774 0 +143 0.000139349 0.0150917 0 +144 9.46413e-05 0.0149066 0 +145 0.000194304 0.0152836 0 +146 0.000642838 0.0181482 0 +147 0.000472643 0.0165661 0 +148 0 0.0146082 0 +149 0 0 0 +150 0.00034835 0.0157578 0 +151 0.000685487 0.0172523 0 +152 0.000981914 0.0189798 0 +153 -0.00144268 0.0203737 0 +154 6.71465e-05 0.0143208 0 +155 0.000366886 0.0151058 0 +156 0.000993918 0.0183483 0 +157 0.000540144 0.0156914 0 +158 0.000916078 0.0192735 0 +159 0.000730152 0.0163797 0 +160 0 0 0 +161 0.000990511 0.0176179 0 +162 0.000486325 0.0193639 0 +163 0.000206337 0.0141458 0 +164 0.000282906 0.0143136 0 +165 0.00100076 0.0168437 0 +166 -0.00266995 0.0191373 0 +167 0.000770199 0.0155366 0 +168 0 0.0137428 0 +169 0 0 0 +170 0.000591374 0.0148539 0 +171 0.00122811 0.0180194 0 +172 0.00041349 0.0142931 0 +173 -0.000208544 0.0185275 0 +174 0.00101385 0.0160593 0 +175 0.00129156 0.0174239 0 +176 0 0 0 +177 0.000144733 0.01356 0 +178 0.00130537 0.0168861 0 +179 -0.000984836 0.0178189 0 +180 0.000799713 0.0147189 0 +181 0.00102596 0.0152751 0 +182 0.00130537 0.016264 0 +183 -0.00405593 0.0176253 0 +184 0.00062202 0.0140427 0 +185 0.000329693 0.0133566 0 +186 0.00106378 0.0170004 0 +187 0.00134931 0.0168787 0 +188 0.00130019 0.0155934 0 +189 0.000552483 0.0168923 0 +190 0.00148446 0.0165098 0 +191 0.000469846 0.0133201 0 +192 0.00103321 0.0145013 0 +193 0 0.0128581 0 +194 0 0 0 +195 -0.0020555 0.0165544 0 +196 0.000815332 0.0139235 0 +197 0.000116784 0.0127917 0 +198 0.00155649 0.0159987 0 +199 0.00129239 0.0148971 0 +200 2.86769e-05 0.0163016 0 +201 0.000632311 0.013253 0 +202 -0.00544472 0.0159195 0 +203 0.00157213 0.0155347 0 +204 -0.00342205 0.0157089 0 +205 0.000315416 0.0125799 0 +206 0.00103047 0.0137372 0 +207 0.00156625 0.0149944 0 +208 -0.000651275 0.0155754 0 +209 0.00127949 0.0141878 0 +210 0.0008148 0.013145 0 +211 0.000460108 0.0125417 0 +212 0.00161329 0.015326 0 +213 0.00142046 0.0153646 0 +214 0.00155058 0.0144023 0 +215 0.00104765 0.0153072 0 +216 -0.00168612 0.0148928 0 +217 0.000620407 0.0124774 0 +218 0.0017403 0.0149967 0 +219 0.000536356 0.0149941 0 +220 0.00126003 0.0134743 0 +221 0 0.0119628 0 +222 -0.00675406 0.0143135 0 +223 0.00101664 0.0129839 0 +224 -0.00468907 0.0142349 0 +225 0.0017864 0.0146842 0 +226 0.000136385 0.0118918 0 +227 0.00152562 0.0137767 0 +228 -0.00290181 0.0140967 0 +229 0.000797018 0.0123795 0 +230 0.0017973 0.014278 0 +231 -7.18484e-06 0.0143596 0 +232 0.00027933 0.0118057 0 +233 0.000429035 0.0117698 0 +234 0.00123149 0.0127597 0 +235 0.00178584 0.0138 0 +236 -0.000852038 0.0137672 0 +237 0.00149325 0.0131287 0 +238 0.000988809 0.0122382 0 +239 0.000589933 0.0117106 0 +240 0.00168934 0.0139658 0 +241 0.00185115 0.0139178 0 +242 0.00142778 0.0138718 0 +243 0.00175858 0.0132692 0 +244 -0.00186219 0.0130712 0 +245 0.00194137 0.0137466 0 +246 0.00103707 0.0136302 0 +247 0.000762734 0.0116225 0 +248 0.00145251 0.0124674 0 +249 0.00198029 0.0134691 0 +250 0 0.0110601 0 +251 -0.00646232 0.0124761 0 +252 0.000497951 0.0132479 0 +253 0.00119248 0.0120459 0 +254 -0.004624 0.0123982 0 +255 0.000149929 0.0109869 0 +256 0.00171989 0.0127001 0 +257 -0.00299237 0.0123213 0 +258 0.000379611 0.0110008 0 +259 0.00198581 0.0131068 0 +260 -0.000196133 0.0127411 0 +261 0.000947696 0.0114988 0 +262 0.000541953 0.0109486 0 +263 0.00196593 0.0126767 0 +264 -0.00103843 0.0121373 0 +265 0.00140241 0.0117962 0 +266 0.00167085 0.0121031 0 +267 0.000712909 0.0108709 0 +268 0.00114208 0.0113325 0 +269 0.00189657 0.0128064 0 +270 0.00167555 0.012738 0 +271 0.0020353 0.0127542 0 +272 0.00135136 0.012543 0 +273 0.00192905 0.0121938 0 +274 0.00211204 0.0125949 0 +275 0.00090539 0.0122241 0 +276 -0.0020023 0.0114753 0 +277 0.000892679 0.0107629 0 +278 0.00214305 0.0123424 0 +279 0.000328592 0.0117935 0 +280 0.00161238 0.0114859 0 +281 0 0.0101549 0 +282 -0.00611145 0.0109257 0 +283 0.000236899 0.0101922 0 +284 0.00134271 0.0111188 0 +285 -0.00450896 0.0108433 0 +286 0.000480266 0.010189 0 +287 0.00187766 0.0116704 0 +288 -0.00304047 0.0107998 0 +289 0.00214022 0.0120126 0 +290 -0.000377644 0.0112725 0 +291 0.00108012 0.0106194 0 +292 0.000649779 0.010122 0 +293 0.00211254 0.011619 0 +294 0.00188629 0.0116933 0 +295 0.00154424 0.0108532 0 +296 0.00207355 0.0117394 0 +297 0.00161286 0.0115386 0 +298 -0.00125137 0.0105814 0 +299 0.00181479 0.0111152 0 +300 0.000825771 0.0100288 0 +301 0.00219101 0.0116811 0 +302 0.00123961 0.0112751 0 +303 0.0012726 0.0104357 0 +304 0.00225441 0.0115293 0 +305 0.000755113 0.0109115 0 +306 0.00206543 0.0111738 0 +307 0.00016172 0.00942065 0 +308 -0.00215323 0.00997634 0 +309 0.00100722 0.00990538 0 +310 0.00227503 0.0112944 0 +311 0.000159935 0.0104642 0 +312 0.000407376 0.00943005 0 +313 0.00174113 0.0105355 0 +314 -0.00576169 0.009598 0 +315 0 0.00925213 0 +316 0.00146663 0.0102084 0 +317 -0.00435679 0.00952477 0 +318 0.000575588 0.00937412 0 +319 0.00200305 0.0106869 0 +320 0.00226396 0.0109888 0 +321 0.00119287 0.00974807 0 +322 -0.00058856 0.00985591 0 +323 0.000748008 0.00929504 0 +324 0.00206304 0.0107291 0 +325 0.00183162 0.0106087 0 +326 0.00222174 0.0107545 0 +327 0.00151531 0.010393 0 +328 0.00222712 0.0106232 0 +329 0.00165749 0.00993578 0 +330 0.00231992 0.010689 0 +331 0.00110588 0.0100878 0 +332 0.000924401 0.00919 0 +333 0.00192749 0.0101662 0 +334 -0.00141992 0.00921903 0 +335 -0.00302749 0.00895576 0 +336 0.00137967 0.00955345 0 +337 0.00236928 0.0105404 0 +338 0.000599561 0.00970499 0 +339 0.000327249 0.00867112 0 +340 0.00217075 0.0102075 0 +341 0.000162755 0.0085216 0 +342 0.000493258 0.00862641 0 +343 0.00110366 0.00905581 0 +344 0.00237969 0.0103173 0 +345 6.84341e-07 0.00926125 0 +346 0.00184056 0.00961807 0 +347 0 0.00835491 0 +348 -0.00541023 0.00844815 0 +349 0.000662071 0.0085609 0 +350 0.00156445 0.00932011 0 +351 0.00235893 0.0100293 0 +352 0.00209761 0.00975001 0 +353 -0.000721845 0.0086912 0 +354 0.00128392 0.00888999 0 +355 0.0020137 0.00974508 0 +356 0.00221009 0.00983507 0 +357 0.00174509 0.00957068 0 +358 0.000833344 0.00847269 0 +359 -0.00221529 0.00828494 0 +360 0.00234328 0.00984178 0 +361 0.00139589 0.00931637 0 +362 0.00231329 0.00968478 0 +363 0.00242295 0.00976786 0 +364 0.000963631 0.00899073 0 +365 -0.00410062 0.0079195 0 +366 -0.00145751 0.00819604 0 +367 0.00174312 0.00904701 0 +368 0.00100661 0.00835942 0 +369 0.00201077 0.00925752 0 +370 0.00146243 0.00869059 0 +371 0.0024587 0.00961999 0 +372 0.000448365 0.00860672 0 +373 0.000391342 0.00783332 0 +374 0.00224711 0.0092921 0 +375 0.00245774 0.00940439 0 +376 -0.000140151 0.00818247 0 +377 0.000555487 0.00778253 0 +378 0.00118024 0.00821886 0 +379 0.000160398 0.00762993 0 +380 0.000735897 0.00775343 0 +381 0.00191159 0.00873588 0 +382 0 0.00746456 0 +383 -0.00507821 0.00744992 0 +384 -0.00294656 0.00744478 0 +385 0.00163619 0.00845687 0 +386 0.00242737 0.00912892 0 +387 0.00216354 0.00894158 0 +388 0.00193459 0.00880339 0 +389 -0.000787522 0.00773549 0 +390 0.00216394 0.00885813 0 +391 0.00232922 0.00900486 0 +392 0.00163644 0.00859323 0 +393 -0.00217716 0.00736657 0 +394 0.00135244 0.00804959 0 +395 0.000902835 0.00765896 0 +396 0.00243942 0.00899382 0 +397 0.00126502 0.00831771 0 +398 0.00250176 0.00891104 0 +399 0.000820822 0.00798687 0 +400 0.00237202 0.0088004 0 +401 -0.00147286 0.00728655 0 +402 -0.00390673 0.00697413 0 +403 0.00106979 0.0075411 0 +404 0.00180163 0.00818923 0 +405 0.00206606 0.00838886 0 +406 0.00252361 0.00876139 0 +407 0.000308693 0.00761461 0 +408 0.00152056 0.00785035 0 +409 0.000446363 0.00700219 0 +410 0.00229635 0.00842562 0 +411 0.000619758 0.00699002 0 +412 0.00251141 0.00855008 0 +413 0.000220334 0.00680867 0 +414 -0.000260728 0.00721604 0 +415 0.00123522 0.00739836 0 +416 0.000794562 0.00695511 0 +417 0.00209019 0.00808566 0 +418 0.00228431 0.00819212 0 +419 0.00183482 0.0079144 0 +420 0.00195548 0.00788933 0 +421 0 0.00658214 0 +422 -0.00475481 0.00656531 0 +423 0.0016819 0.00762151 0 +424 0.00242286 0.00823122 0 +425 0.00151555 0.00768312 0 +426 0.00247051 0.00828325 0 +427 -0.000871564 0.00680795 0 +428 0.00220291 0.00801048 0 +429 0.00251178 0.00820385 0 +430 0.00113082 0.00739972 0 +431 -0.00215585 0.00647568 0 +432 0.000954156 0.00685749 0 +433 0.00139725 0.0072299 0 +434 0.00255722 0.00811171 0 +435 -0.00290118 0.00630354 0 +436 0.000684703 0.00707525 0 +437 0.00240546 0.00796654 0 +438 -0.00150309 0.00640624 0 +439 0.000354413 0.00631176 0 +440 0.00111232 0.00673856 0 +441 0.00183354 0.00736365 0 +442 0.00256542 0.00795892 0 +443 0.000183595 0.0067218 0 +444 0.000517177 0.00626731 0 +445 0.00209447 0.00756011 0 +446 0.000137704 0.00610618 0 +447 0.00155348 0.0070354 0 +448 0.000683601 0.0062485 0 +449 0.00231965 0.00760559 0 +450 0.00254124 0.00774945 0 +451 -0.000360233 0.00635397 0 +452 -0.00371775 0.00591293 0 +453 0.00126736 0.00659733 0 +454 0.00221469 0.00741408 0 +455 0.00199692 0.00727695 0 +456 0.00237843 0.00749221 0 +457 0.00172186 0.00708471 0 +458 0.000835055 0.00616912 0 +459 0.00249225 0.00750961 0 +460 0.0013888 0.00684352 0 +461 0.0019726 0.00707911 0 +462 -0.00445041 0.0057859 0 +463 0 0.00571116 0 +464 0.0017016 0.00681539 0 +465 0.00248969 0.00748838 0 +466 -0.000931512 0.00598452 0 +467 0.00256127 0.00746671 0 +468 0.000999305 0.00656214 0 +469 0.00221602 0.00720539 0 +470 0.000984989 0.00607133 0 +471 0.000265338 0.00562235 0 +472 0.00141755 0.00643365 0 +473 0.00259048 0.00736514 0 +474 0.000558571 0.00625063 0 +475 0.000418935 0.00558956 0 +476 0.00241411 0.0071803 0 +477 -0.0015122 0.00562605 0 +478 0.000572527 0.00554027 0 +479 0.00113223 0.00595452 0 +480 -0.00216156 0.00547221 0 +481 0.00258477 0.00720796 0 +482 7.50712e-05 0.00592081 0 +483 0.00183902 0.0065712 0 +484 0.00209668 0.00677047 0 +485 0.000127655 0.00524179 0 +486 0.00156078 0.00624747 0 +487 -0.00281503 0.00533125 0 +488 0.000714549 0.00547707 0 +489 0.0021267 0.00667784 0 +490 0.00231167 0.00678454 0 +491 0.0018907 0.00652025 0 +492 0.00231801 0.00682995 0 +493 0.00254853 0.00699853 0 +494 -0.00043943 0.00558409 0 +495 0.00244778 0.00683746 0 +496 0.00160199 0.00631682 0 +497 -0.00350967 0.00519828 0 +498 0.00127522 0.00581824 0 +499 0.000855201 0.00539821 0 +500 0.00253887 0.00683498 0 +501 0.00126223 0.00607456 0 +502 0.00196356 0.00630488 0 +503 0.00248555 0.00674089 0 +504 0.00258895 0.00677768 0 +505 0.000874248 0.0058016 0 +506 0 0.00485189 0 +507 -0.00415638 0.00508975 0 +508 -0.000970315 0.00525153 0 +509 0.00169498 0.0060399 0 +510 0.00028303 0.00485212 0 +511 0.00220357 0.00644162 0 +512 0.000993391 0.00530306 0 +513 0.00141236 0.00566257 0 +514 0.0026021 0.0066666 0 +515 0.000424628 0.0048196 0 +516 0.000444918 0.005508 0 +517 0.00239912 0.00643892 0 +518 -0.00150171 0.00493211 0 +519 0.000594803 0.00478274 0 +520 0.00258251 0.0065044 0 +521 -1.71289e-05 0.0052032 0 +522 0.00112801 0.00519139 0 +523 -0.00209387 0.0047979 0 +524 0.000152709 0.00447802 0 +525 0.00181811 0.00581215 0 +526 0.00207315 0.00601926 0 +527 0.00222751 0.00611477 0 +528 0.00202573 0.00598809 0 +529 0.000724732 0.00472055 0 +530 0.00154178 0.00548797 0 +531 0.00238273 0.00619442 0 +532 0.00177647 0.00581838 0 +533 -0.00268616 0.00464578 0 +534 0.0024938 0.00622455 0 +535 0.00148009 0.00561133 0 +536 0.00253355 0.00629365 0 +537 -0.00050035 0.00489748 0 +538 0.00229191 0.0060966 0 +539 0.0012576 0.00506296 0 +540 0.00256354 0.00620401 0 +541 0.00113916 0.00537375 0 +542 0.000852574 0.00464472 0 +543 -0.00330379 0.004534 0 +544 0.00259541 0.00613305 0 +545 0.000758264 0.00511385 0 +546 0.00245875 0.0060378 0 +547 0.000289059 0.00409312 0 +548 -0.000991444 0.00459908 0 +549 0.00192825 0.00556654 0 +550 0 0.00400514 0 +551 -0.00387946 0.00447187 0 +552 0.00166176 0.0052955 0 +553 0.000977333 0.00455488 0 +554 0.00216624 0.00571761 0 +555 0.000442836 0.0040758 0 +556 0.00259277 0.00601269 0 +557 0.000344335 0.00483998 0 +558 0.0013807 0.00491826 0 +559 0.000595889 0.00404003 0 +560 0.00236059 0.00573999 0 +561 -0.0014768 0.00431536 0 +562 0.00255894 0.00584489 0 +563 -9.35622e-05 0.00456092 0 +564 0.00213097 0.00548634 0 +565 0.00109792 0.00445095 0 +566 0.00230168 0.00558538 0 +567 0.00191654 0.00534693 0 +568 0.000133173 0.00363867 0 +569 0.00243003 0.00564066 0 +570 0.00165902 0.00517179 0 +571 -0.00202067 0.00417028 0 +572 0.00177054 0.00508667 0 +573 0.000711727 0.00398117 0 +574 0.00202394 0.00530547 0 +575 0.00149575 0.00475776 0 +576 0.00251766 0.00565028 0 +577 0.00135968 0.00496654 0 +578 0.00249694 0.0056319 0 +579 -0.000544847 0.00428448 0 +580 -0.00255176 0.00403934 0 +581 0.00224171 0.00540369 0 +582 0.00256718 0.0056131 0 +583 0.00102248 0.00473815 0 +584 0.00121304 0.00433304 0 +585 0.000825058 0.00391076 0 +586 0.00023194 0.00340146 0 +587 -0.00310217 0.00397022 0 +588 0.00258129 0.00552945 0 +589 0.000652384 0.0044936 0 +590 0.000336052 0.00337842 0 +591 0.0024095 0.00537647 0 +592 -0.000997569 0.00401759 0 +593 0.0018667 0.00486345 0 +594 0 0.00317214 0 +595 -0.00361314 0.00391827 0 +596 0.00160125 0.00458275 0 +597 0.000470923 0.00335824 0 +598 0.000934903 0.00382858 0 +599 0.00210388 0.00503205 0 +600 0.00256278 0.00539998 0 +601 0.000256775 0.00424079 0 +602 0.00132143 0.00420163 0 +603 0.000572981 0.00331428 0 +604 0.0022086 0.00501364 0 +605 0.00202587 0.00490145 0 +606 9.40793e-05 0.002948 0 +607 0.00229898 0.00508134 0 +608 0.00235122 0.00508782 0 +609 0.00180299 0.00475512 0 +610 -0.00143979 0.00376549 0 +611 0.00251446 0.00522641 0 +612 -0.000155737 0.00398654 0 +613 0.00245454 0.00512123 0 +614 0.00154131 0.00457938 0 +615 0.0010403 0.00373481 0 +616 -0.00193425 0.00363868 0 +617 0.000673001 0.0032609 0 +618 0.00169585 0.00439455 0 +619 0.00252023 0.00511216 0 +620 0.0012434 0.00438003 0 +621 0.00194898 0.0046282 0 +622 0.00142173 0.00405748 0 +623 0.000177238 0.00271843 0 +624 0.00243871 0.00501048 0 +625 -0.00057544 0.00373767 0 +626 0.00255024 0.00505976 0 +627 0.000913475 0.00416319 0 +628 0.00216741 0.00474943 0 +629 0.000265065 0.00270138 0 +630 0.000770297 0.00319805 0 +631 0.00114011 0.00362959 0 +632 0.00254688 0.00496415 0 +633 0.000557218 0.00393557 0 +634 0.000352489 0.00267726 0 +635 -0.00232834 0.00342058 0 +636 0.00233797 0.00475458 0 +637 -0.00099164 0.00349938 0 +638 0.00177834 0.00419511 0 +639 0 0.00235448 0 +640 -0.00336271 0.003426 0 +641 0.000438687 0.00264595 0 +642 0.00151276 0.00390166 0 +643 -0.00281361 0.00336411 0 +644 0.000864007 0.00312572 0 +645 0.00251243 0.00482593 0 +646 0.00018164 0.00370351 0 +647 0.00201655 0.00438352 0 +648 0.00210714 0.00448081 0 +649 0.00123325 0.00351359 0 +650 0.00226111 0.00456842 0 +651 0.00191594 0.0043606 0 +652 0.00237759 0.00462021 0 +653 0.00168813 0.00421179 0 +654 0.000523416 0.00260741 0 +655 0.00221406 0.00446097 0 +656 7.28422e-05 0.00213514 0 +657 0.00245758 0.00463378 0 +658 0.00142609 0.00403932 0 +659 -0.0013943 0.00327583 0 +660 0.00244912 0.00464642 0 +661 -0.000205007 0.00347314 0 +662 0.00095328 0.00304411 0 +663 0.00250222 0.00460777 0 +664 0.00113279 0.00384838 0 +665 0.000606057 0.00256145 0 +666 0.00159337 0.00373555 0 +667 0.000169569 0.00203307 0 +668 0.00184787 0.0039864 0 +669 0.00131861 0.00338744 0 +670 0.00251327 0.00454133 0 +671 0.000813053 0.00364493 0 +672 0.000239099 0.002018 0 +673 0.00235904 0.00442713 0 +674 -0.00059394 0.00324966 0 +675 0.00206887 0.00413222 0 +676 -0.00177307 0.00306954 0 +677 0.000686008 0.00250817 0 +678 0.00103714 0.00295353 0 +679 0.000311369 0.00197825 0 +680 0.00249251 0.0044346 0 +681 0.000472476 0.00343447 0 +682 0.00224405 0.00417002 0 +683 -0.000975844 0.0030373 0 +684 0.000378575 0.00195233 0 +685 0.00166271 0.00356076 0 +686 0.00216266 0.00408409 0 +687 0.00200036 0.00398754 0 +688 0 0.00155239 0 +689 -0.0031227 0.00298394 0 +690 0.00139521 0.00325227 0 +691 0.0024418 0.00428797 0 +692 0.000117898 0.00322278 0 +693 0.000762521 0.00244754 0 +694 -0.00263106 0.00292553 0 +695 0.00228984 0.00414951 0 +696 0.00180374 0.00386328 0 +697 0.00190374 0.00377075 0 +698 -0.00211939 0.00288204 0 +699 0.00238202 0.00418104 0 +700 0.00157435 0.00371548 0 +701 0.0011147 0.00285454 0 +702 7.4855e-05 0.00145999 0 +703 0.000444358 0.00192105 0 +704 0.00243975 0.00417669 0 +705 0.00131487 0.0035487 0 +706 0.0021058 0.00387707 0 +707 0.00236301 0.00410259 0 +708 -0.00024305 0.00301464 0 +709 -0.00134188 0.00283914 0 +710 0.00246416 0.00413518 0 +711 0.00102898 0.00336803 0 +712 0.000834886 0.00237991 0 +713 0.000140917 0.00136166 0 +714 0.00050821 0.00188438 0 +715 0.0014622 0.0031092 0 +716 0.00019202 0.00133161 0 +717 0.00172007 0.00337909 0 +718 0.00245649 0.00405586 0 +719 0.000721396 0.0031785 0 +720 0.00118506 0.00274783 0 +721 0.00225773 0.00387966 0 +722 -0.000602553 0.00281445 0 +723 0.00194572 0.00355048 0 +724 -0.00168345 0.00265706 0 +725 0.000569649 0.00184236 0 +726 0.000241138 0.00129792 0 +727 0.000902317 0.00230548 0 +728 0.00241828 0.00393872 0 +729 0.000397812 0.00298522 0 +730 0.00205883 0.00363523 0 +731 0.00219415 0.00371029 0 +732 0.00189082 0.00353335 0 +733 0.000287612 0.00127909 0 +734 0.00212757 0.00362088 0 +735 -0.000952293 0.00262544 0 +736 0.00229642 0.00375558 0 +737 0.00169167 0.00340828 0 +738 0.00235095 0.00378412 0 +739 6.458e-05 0.0027928 0 +740 0.00151888 0.0029597 0 +741 -0.00289704 0.00259071 0 +742 0 0.000766786 0 +743 0.000628063 0.00179511 0 +744 0.00124747 0.00263431 0 +745 0.00236545 0.00376878 0 +746 0.00146331 0.0032639 0 +747 2.92433e-05 0.000766061 0 +748 -0.00245541 0.00253442 0 +749 0.00176505 0.00319244 0 +750 -0.0019932 0.00249173 0 +751 0.000332917 0.00125681 0 +752 0.000964101 0.00222488 0 +753 0.00240189 0.0037481 0 +754 0.00120896 0.00310475 0 +755 6.29952e-05 0.000675562 0 +756 0.00225597 0.00359294 0 +757 -0.000271297 0.0026054 0 +758 0.00197375 0.00332793 0 +759 -0.00128483 0.00244994 0 +760 0.00240644 0.00369249 0 +761 0.000932373 0.00293518 0 +762 8.8935e-05 0.00067056 0 +763 0.000682918 0.00174287 0 +764 0.00037668 0.00123098 0 +765 0.00238021 0.00360128 0 +766 0.000638393 0.00275993 0 +767 0.000113892 0.000646341 0 +768 0.00130126 0.00251501 0 +769 0.00156482 0.00280521 0 +770 0.00101955 0.00213861 0 +771 0.00213465 0.00336624 0 +772 -0.000602774 0.00242642 0 +773 0.000138502 0.000637936 0 +774 0.0017975 0.00300277 0 +775 0.000418554 0.00120181 0 +776 -0.0015927 0.00228953 0 +777 0.00232428 0.00347449 0 +778 0.000332436 0.00258314 0 +779 0.000733587 0.00168592 0 +780 0.00209296 0.003303 0 +781 0.00195177 0.00322154 0 +782 0.00220313 0.00335854 0 +783 0.0017806 0.00311728 0 +784 0.00228169 0.0033856 0 +785 0.00158128 0.00299366 0 +786 0.000162561 0.000627817 0 +787 0.00198817 0.00310542 0 +788 -0.000922689 0.00225847 0 +789 0.00232868 0.00338215 0 +790 0.0013563 0.00285457 0 +791 0.00223981 0.00331232 0 +792 2.04291e-05 0.00240892 0 +793 0.000458107 0.00116927 0 +794 0.00134596 0.00239106 0 +795 0 0 0 +796 -0.00268188 0.00223799 0 +797 0.0010681 0.0020475 0 +798 0 0 0 +799 -0.00228685 0.00218506 0 +800 0.00234436 0.00334665 0 +801 0.00110895 0.002704 0 +802 0 0 0 +803 0.00159971 0.00264734 0 +804 0.000185925 0.000616 0 +805 -0.00187 0.00214454 0 +806 0.000779571 0.00162468 0 +807 0 0 0 +808 0.0021279 0.00311555 0 +809 0.00232939 0.00327812 0 +810 0.000843213 0.00254609 0 +811 -0.000291219 0.00224054 0 +812 0.00181753 0.002812 0 +813 0 0 0 +814 -0.00122441 0.00210337 0 +815 0.000494964 0.00113367 0 +816 0.000208381 0.000602508 0 +817 0 0 0 +818 0.00228448 0.003176 0 +819 0.000563711 0.00238476 0 +820 0.00110927 0.00195231 0 +821 0.00138124 0.00226371 0 +822 0.00198949 0.00288501 0 +823 -0.000596324 0.00208084 0 +824 0.000820342 0.00155962 0 +825 0.00198841 0.00292733 0 +826 0 0 0 +827 0.00210453 0.00299015 0 +828 0.00184356 0.00284218 0 +829 0.000229749 0.000587393 0 +830 0.00162358 0.00248766 0 +831 0.00221051 0.0030402 0 +832 0.00219075 0.00302792 0 +833 0.0016713 0.00273772 0 +834 0.000275647 0.00222379 0 +835 -0.00150175 0.00196197 0 +836 0.000528704 0.0010951 0 +837 0.00224676 0.00303841 0 +838 0.00147393 0.0026174 0 +839 0 0 0 +840 0.00227231 0.00301983 0 +841 0.00125408 0.00248471 0 +842 0.0018255 0.00262197 0 +843 -0.000888472 0.00193183 0 +844 0.00210826 0.00287091 0 +845 -1.55248e-05 0.00206644 0 +846 0.000249788 0.000570723 0 +847 0.00114272 0.001854 0 +848 0.0022677 0.0029708 0 +849 0.00101524 0.00234345 0 +850 -0.00248023 0.00192456 0 +851 0.000855525 0.00149133 0 +852 -0.00212576 0.00187386 0 +853 0 0 0 +854 0.00140699 0.00213419 0 +855 -0.0017494 0.00183446 0 +856 0.000558993 0.00105398 0 +857 0.00223324 0.00289049 0 +858 0.000761326 0.00219713 0 +859 0.00197852 0.00266873 0 +860 -0.000304048 0.00191554 0 +861 0.00163656 0.0023277 0 +862 -0.00116209 0.0017948 0 +863 0 0 0 +864 0.000268314 0.000552605 0 +865 0.00216949 0.00277829 0 +866 0.000496808 0.00204936 0 +867 0.00200241 0.0026502 0 +868 0.00188229 0.00258256 0 +869 0.000884784 0.0014204 0 +870 0.00209461 0.00269602 0 +871 0.00173562 0.00249577 0 +872 0.0011683 0.00175347 0 +873 0.00182195 0.00243439 0 +874 -0.000584336 0.0017733 0 +875 0.000585491 0.00101054 0 +876 0.00215806 0.00271762 0 +877 0.0015642 0.00239286 0 +878 0.00207696 0.00263415 0 +879 0.000226559 0.00190319 0 +880 0 0 0 +881 0.00142326 0.00200374 0 +882 0.0021922 0.00271305 0 +883 0.00137043 0.00227698 0 +884 -0.00141174 0.00167058 0 +885 0.000285101 0.000533153 0 +886 0.00219691 0.00268069 0 +887 0.0011572 0.00215151 0 +888 0.00163908 0.00216896 0 +889 -0.000850888 0.00164129 0 +890 0.00195619 0.00245815 0 +891 -4.4445e-05 0.00176148 0 +892 0.00217216 0.00261935 0 +893 0.000927932 0.00201971 0 +894 0 0 0 +895 0.000907936 0.00134751 0 +896 -0.00228879 0.00164387 0 +897 0.000607974 0.000965233 0 +898 -0.00197216 0.00159635 0 +899 0.00118595 0.00165169 0 +900 -0.00163306 0.00155915 0 +901 0.000299992 0.000512528 0 +902 0.00211819 0.00252821 0 +903 0.000686519 0.00188485 0 +904 0.00180765 0.0022508 0 +905 -0.000310954 0.00162649 0 +906 0.00143029 0.00187357 0 +907 -0.00109871 0.00152056 0 +908 0 0 0 +909 0.00189856 0.00233803 0 +910 0.00203522 0.00240675 0 +911 0.00199506 0.00238961 0 +912 0.00177605 0.00226751 0 +913 0.000437166 0.0017499 0 +914 0.00206449 0.00241989 0 +915 0.00162929 0.00218078 0 +916 0.00210587 0.00242676 0 +917 0.00146021 0.00208062 0 +918 0.000626235 0.000918409 0 +919 0.00163167 0.0020127 0 +920 -0.000568097 0.0015 0 +921 0.000924887 0.00127333 0 +922 0.000312819 0.000490887 0 +923 0.00211882 0.00240845 0 +924 0.00127144 0.00197011 0 +925 0.00192357 0.00225483 0 +926 0.000184412 0.00161759 0 +927 0.0011958 0.00154961 0 +928 -0.00132322 0.00141144 0 +929 0 0 0 +930 0.00210292 0.00236355 0 +931 0.00106587 0.00185217 0 +932 0.00142847 0.0017448 0 +933 0.00178345 0.00207253 0 +934 -6.71729e-05 0.00149023 0 +935 -0.000810927 0.00138328 0 +936 0.00205815 0.00229093 0 +937 0.000846946 0.00172989 0 +938 0.000640201 0.000870525 0 +939 -0.00210985 0.00139493 0 +940 0.000323482 0.000468429 0 +941 -0.00182624 0.00134967 0 +942 0.000935667 0.00119853 0 +943 0.00198443 0.00218987 0 +944 0.00061837 0.001606 0 +945 -0.00152052 0.00131381 0 +946 0 0 0 +947 0.00161503 0.00186022 0 +948 -0.000312928 0.00136971 0 +949 0.00189362 0.00210813 0 +950 0.00179425 0.0020526 0 +951 0.00196757 0.002145 0 +952 0.00167091 0.00198082 0 +953 0.00119809 0.00144806 0 +954 -0.00103523 0.00127698 0 +955 0.00201495 0.00216109 0 +956 0.00152543 0.00189532 0 +957 0.00188184 0.00205984 0 +958 0.000384115 0.00148318 0 +959 0.00203499 0.00215452 0 +960 0.00136002 0.00179886 0 +961 0.000331896 0.000445337 0 +962 0.00141831 0.00161844 0 +963 0.00202705 0.00212369 0 +964 0.00117729 0.00169414 0 +965 -0.000548439 0.00125747 0 +966 0.000649824 0.000822005 0 +967 0 0 0 +968 0.00175036 0.00190071 0 +969 0.000148393 0.00136367 0 +970 0.000940427 0.00112377 0 +971 0.00199079 0.00206731 0 +972 0.000980228 0.00158395 0 +973 -0.00123695 0.00118151 0 +974 0.00192589 0.00198438 0 +975 0.000772106 0.00147091 0 +976 0.00158996 0.00171244 0 +977 -8.46811e-05 0.00124945 0 +978 0.0011932 0.00134795 0 +979 -0.000769463 0.00115442 0 +980 0.000338034 0.000421827 0 +981 -0.00194062 0.00117258 0 +982 0 0 0 +983 -0.00168788 0.00113027 0 +984 0.00183217 0.00187418 0 +985 0.000556502 0.00135751 0 +986 0.00179158 0.00185065 0 +987 0.000655193 0.000773246 0 +988 0.0018688 0.00189239 0 +989 0.00169072 0.00179272 0 +990 -0.00141291 0.0010966 0 +991 0.00192092 0.00191577 0 +992 0.00156777 0.00172087 0 +993 0.00140047 0.00149538 0 +994 -0.000310858 0.00114205 0 +995 0.00194699 0.00191887 0 +996 0.0014248 0.00163761 0 +997 0.000939391 0.00104966 0 +998 -0.000972201 0.00106113 0 +999 0.00170939 0.00173623 0 +1000 0.000337116 0.00124599 0 +1001 0.00194606 0.00190001 0 +1002 0.00126405 0.00154538 0 +1003 0.00191758 0.00185772 0 +1004 0.00108821 0.0014468 0 +1005 0.00118162 0.00124992 0 +1006 0 0 0 +1007 -0.000526296 0.00104259 0 +1008 0.000341908 0.000398086 0 +1009 0.00155733 0.00157032 0 +1010 0.000117806 0.0011383 0 +1011 0.00186095 0.00179085 0 +1012 0.000900171 0.00134425 0 +1013 0.000656412 0.000724704 0 +1014 -0.00115324 0.000977636 0 +1015 0.00177579 0.00169842 0 +1016 0.000703118 0.00124015 0 +1017 0.00137564 0.00137642 0 +1018 -9.76514e-05 0.00103606 0 +1019 0.000932914 0.000976772 0 +1020 -0.000727169 0.000951824 0 +1021 0.00176931 0.00166126 0 +1022 0.00169004 0.00161611 0 +1023 0.00182508 0.00169031 0 +1024 0.0015888 0.00155695 0 +1025 0.00166163 0.00157979 0 +1026 0.000500424 0.0011366 0 +1027 0 0 0 +1028 -0.00178291 0.000975942 0 +1029 0.00185609 0.00170131 0 +1030 0.00146739 0.00148602 0 +1031 -0.0015571 0.00093586 0 +1032 0.000343563 0.000374325 0 +1033 -0.00130969 0.000903635 0 +1034 0.00186127 0.00169252 0 +1035 0.00132787 0.00140559 0 +1036 0.00116387 0.00115473 0 +1037 -0.000305504 0.000940512 0 +1038 0.00183977 0.00166239 0 +1039 0.00117262 0.00131804 0 +1040 0.000653711 0.000676682 0 +1041 0.00151809 0.00143443 0 +1042 0.000295517 0.00103559 0 +1043 -0.000910266 0.000870045 0 +1044 0.00179083 0.00160961 0 +1045 0.00100424 0.00122561 0 +1046 0.000921366 0.000905608 0 +1047 -0.000502264 0.00085258 0 +1048 0.00134462 0.00126215 0 +1049 9.1965e-05 0.000938711 0 +1050 0 0 0 +1051 0.00171384 0.00153308 0 +1052 0.000825598 0.00113056 0 +1053 0.000343099 0.000350717 0 +1054 -0.00107256 0.000797372 0 +1055 0.00160814 0.00143189 0 +1056 0.000639694 0.00103493 0 +1057 0.0011406 0.00106281 0 +1058 0.00167021 0.00145065 0 +1059 -0.000106857 0.000847345 0 +1060 0.00172855 0.00148397 0 +1061 0.00158987 0.00140326 0 +1062 0.000647316 0.000629618 0 +1063 -0.000684648 0.000772777 0 +1064 0.00176356 0.00150133 0 +1065 0.00148929 0.00134386 0 +1066 0.00177392 0.00150094 0 +1067 0.00137028 0.00127452 0 +1068 0.00147315 0.0013054 0 +1069 0.000449708 0.000940627 0 +1070 -0.00163431 0.000800907 0 +1071 0.00175866 0.00148122 0 +1072 0.00123503 0.00119745 0 +1073 -0.00143369 0.000763558 0 +1074 0 0 0 +1075 -0.00121169 0.000733434 0 +1076 0.00090524 0.000836596 0 +1077 -0.000297525 0.000762509 0 +1078 0.00171677 0.00144075 0 +1079 0.00108585 0.0011147 0 +1080 0.00130817 0.00115311 0 +1081 0.000258824 0.000849286 0 +1082 0.000340624 0.000327448 0 +1083 -0.000849753 0.000701351 0 +1084 0.00164749 0.00137829 0 +1085 0.00092536 0.00102844 0 +1086 0.000637558 0.000583702 0 +1087 -0.000477009 0.000684891 0 +1088 0.00111244 0.000974729 0 +1089 0.00154996 0.00129283 0 +1090 0.000756274 0.000940564 0 +1091 7.02795e-05 0.000762305 0 +1092 0 0 0 +1093 -0.000995022 0.00063816 0 +1094 0.00163229 0.0012959 0 +1095 0.00157226 0.00125944 0 +1096 0.00142347 0.00118348 0 +1097 0.000581454 0.000852957 0 +1098 0.00167037 0.00131829 0 +1099 0.0014918 0.00121079 0 +1100 0.0016851 0.00132486 0 +1101 0.00139269 0.00115187 0 +1102 0.000884992 0.000770115 0 +1103 -0.00011283 0.000680806 0 +1104 0.000336302 0.00030466 0 +1105 0.00167529 0.00131399 0 +1106 0.00127685 0.00108468 0 +1107 -0.000642341 0.000614915 0 +1108 0.00126713 0.00104963 0 +1109 0.000403878 0.000767206 0 +1110 0.00163982 0.0012842 0 +1111 0.00114645 0.00101119 0 +1112 -0.00149624 0.000646692 0 +1113 -0.00131755 0.000611466 0 +1114 0.00157774 0.00123417 0 +1115 0.00100383 0.000933363 0 +1116 -0.00111832 0.000582808 0 +1117 0.000624741 0.000539322 0 +1118 -0.00028749 0.000605604 0 +1119 0.00108007 0.000890711 0 +1120 0.000226463 0.000684762 0 +1121 0 0 0 +1122 -0.000791067 0.00055263 0 +1123 0.00148807 0.00116276 0 +1124 0.000851458 0.000853061 0 +1125 0.00136992 0.00106898 0 +1126 0.00069198 0.000772053 0 +1127 0.000330283 0.000282502 0 +1128 0.000861179 0.000706445 0 +1129 5.21962e-05 0.000606781 0 +1130 -0.000450946 0.000537259 0 +1131 0.00153711 0.00112512 0 +1132 0.00157747 0.00115142 0 +1133 0.00147622 0.00108651 0 +1134 0.00159575 0.00116367 0 +1135 0.00139638 0.00103734 0 +1136 0.00122227 0.000951986 0 +1137 0.000528079 0.000691925 0 +1138 -0.000920919 0.000497991 0 +1139 0.00159069 0.00116026 0 +1140 0.00129945 0.000979493 0 +1141 0.001561 0.00113969 0 +1142 0.00118736 0.000914776 0 +1143 0.000609249 0.000496558 0 +1144 -0.000116166 0.000534187 0 +1145 0 0 0 +1146 -0.000600651 0.000476021 0 +1147 0.00150562 0.00110056 0 +1148 0.00106229 0.000845067 0 +1149 0.00104413 0.000811121 0 +1150 0.00036252 0.000614102 0 +1151 0.00142342 0.00104167 0 +1152 0.000926483 0.000772086 0 +1153 -0.0013666 0.000509974 0 +1154 -0.00120843 0.000477245 0 +1155 0.00032277 0.000261079 0 +1156 -0.00103016 0.000450563 0 +1157 -0.000275874 0.000467655 0 +1158 0.000834285 0.000645825 0 +1159 0.000198008 0.000539792 0 +1160 0.00131338 0.000961892 0 +1161 0.000782363 0.000697561 0 +1162 -0.000734387 0.00042194 0 +1163 0.00117438 0.000860298 0 +1164 0.000632423 0.000623003 0 +1165 0.00148555 0.000999861 0 +1166 0.00144366 0.000970604 0 +1167 0.000591422 0.000455721 0 +1168 0.0015067 0.00101671 0 +1169 0.0013826 0.000930587 0 +1170 3.72355e-05 0.00046998 0 +1171 0 0 0 +1172 -0.000424537 0.000407574 0 +1173 0.00150569 0.00101955 0 +1174 0.00130405 0.000881535 0 +1175 0.00148119 0.00100687 0 +1176 0.00120985 0.000825155 0 +1177 0.00100531 0.000736016 0 +1178 0.000479179 0.000549851 0 +1179 -0.000850242 0.000374767 0 +1180 0.00143197 0.00097728 0 +1181 0.00110199 0.000763184 0 +1182 0.000313935 0.000240496 0 +1183 -0.00011727 0.000405432 0 +1184 0.00135683 0.000929473 0 +1185 0.000982545 0.000697277 0 +1186 -0.000559851 0.000354151 0 +1187 0.00080487 0.000588402 0 +1188 0.00032521 0.000479304 0 +1189 0.00125463 0.000862277 0 +1190 0.000853752 0.000629054 0 +1191 -0.00124649 0.000390062 0 +1192 -0.00110615 0.000359318 0 +1193 0 0 0 +1194 -0.000263093 0.000346661 0 +1195 -0.000946642 0.000334061 0 +1196 0.00057165 0.000416801 0 +1197 0.000172978 0.00041241 0 +1198 0.00112416 0.000774625 0 +1199 0.000717895 0.000560005 0 +1200 -0.000679948 0.000307287 0 +1201 0.00139528 0.000862696 0 +1202 0.00141863 0.000883192 0 +1203 0.00135247 0.000831261 0 +1204 0.00142108 0.000891218 0 +1205 0.00129185 0.000790508 0 +1206 0.000964204 0.000665581 0 +1207 0.000577339 0.000491514 0 +1208 0.00140116 0.000885273 0 +1209 0.0012151 0.000742018 0 +1210 0.000303992 0.000220821 0 +1211 2.49632e-05 0.000349992 0 +1212 -0.00039806 0.000293988 0 +1213 0.00135761 0.000863948 0 +1214 0.00112411 0.000687442 0 +1215 0.000773395 0.000534287 0 +1216 0.000434442 0.000424803 0 +1217 0.0012891 0.000825923 0 +1218 0.00102078 0.000628323 0 +1219 -0.000783134 0.000266833 0 +1220 0 0 0 +1221 0.00119443 0.000769948 0 +1222 0.000907199 0.000566228 0 +1223 -0.000116591 0.000292664 0 +1224 0.000550269 0.000380024 0 +1225 0.000291575 0.00036093 0 +1226 -0.000520199 0.000247484 0 +1227 0.00107229 0.000694913 0 +1228 0.000785483 0.000502567 0 +1229 -0.00113407 0.000284267 0 +1230 -0.00101041 0.000255769 0 +1231 -0.000249482 0.000240855 0 +1232 0.000921419 0.000599737 0 +1233 0.000657816 0.000438714 0 +1234 0.000293112 0.000202115 0 +1235 -0.000868153 0.00023233 0 +1236 0.00015102 0.000300777 0 +1237 0.00133214 0.000762326 0 +1238 0.00130714 0.000738962 0 +1239 0.00133745 0.00077461 0 +1240 0.00126397 0.000706026 0 +1241 0.00132159 0.000774369 0 +1242 0.00120428 0.000665021 0 +1243 -0.000627821 0.000207076 0 +1244 0.000740373 0.000483514 0 +1245 0.00128319 0.000760194 0 +1246 0.00112978 0.000617479 0 +1247 0.000526428 0.000375855 0 +1248 0 0 0 +1249 0.0012209 0.00073075 0 +1250 0.00104231 0.000564883 0 +1251 1.4999e-05 0.000245028 0 +1252 -0.000371827 0.000194752 0 +1253 0.00113341 0.000684773 0 +1254 0.000943782 0.000508703 0 +1255 0.000527644 0.000345314 0 +1256 0.000393504 0.000315082 0 +1257 -0.000719503 0.000172452 0 +1258 0.00101938 0.000621067 0 +1259 0.00083617 0.000450314 0 +1260 -0.000114429 0.000194197 0 +1261 0.000281501 0.000184412 0 +1262 0.000261254 0.000257294 0 +1263 -0.000481846 0.000154417 0 +1264 0.000877468 0.000538526 0 +1265 0.000721527 0.000391029 0 +1266 0.0012477 0.000653262 0 +1267 0.00125537 0.000669015 0 +1268 0.00122156 0.000627725 0 +1269 -0.00103026 0.000191971 0 +1270 0.000706215 0.000436095 0 +1271 0.000601912 0.000332035 0 +1272 -0.000920961 0.000165282 0 +1273 0.00124305 0.000673559 0 +1274 0.00117848 0.000593814 0 +1275 0 0 0 +1276 -0.000235336 0.000148586 0 +1277 0.00013174 0.000203241 0 +1278 -0.000794121 0.000143153 0 +1279 0.00120935 0.000665527 0 +1280 0.00112013 0.000552988 0 +1281 0.00115283 0.000643586 0 +1282 0.00104821 0.000506638 0 +1283 -0.000578122 0.000119658 0 +1284 0.000504079 0.000312813 0 +1285 0.000479416 0.000274406 0 +1286 0.00107217 0.000606448 0 +1287 0.000964525 0.000456179 0 +1288 7.00939e-06 0.000153502 0 +1289 -0.000346013 0.000108353 0 +1290 0.000965977 0.000552909 0 +1291 0.000870928 0.000402914 0 +1292 0.000269316 0.000167737 0 +1293 0.00035608 0.000219075 0 +1294 0.000832867 0.000481776 0 +1295 0.000769331 0.00034813 0 +1296 -0.000659397 9.02368e-05 0 +1297 -0.000111118 0.000108468 0 +1298 0 0 0 +1299 0.000233923 0.000166823 0 +1300 0.000671356 0.000391976 0 +1301 0.000661682 0.000292971 0 +1302 -0.000444941 7.34523e-05 0 +1303 0.00117525 0.000573701 0 +1304 0.00116567 0.000555176 0 +1305 0.00116603 0.000582247 0 +1306 0.00113881 0.000528015 0 +1307 0.00113656 0.000579465 0 +1308 0.00109622 0.000493591 0 +1309 0.000479888 0.000282401 0 +1310 0.000549922 0.000238521 0 +1311 0.00108542 0.000564049 0 +1312 0.00103954 0.000453238 0 +1313 -0.000933436 0.000110937 0 +1314 -0.000837437 8.63281e-05 0 +1315 0.000114853 0.000118287 0 +1316 -0.000220885 6.83972e-05 0 +1317 -0.000724814 6.5654e-05 0 +1318 0.00101122 0.000534721 0 +1319 0.00097046 0.000408291 0 +1320 0.000256739 0.000152093 0 +1321 0.000436016 0.000185705 0 +1322 -0.000530848 4.37313e-05 0 +1323 0.000912561 0.000490243 0 +1324 0.000890731 0.000360015 0 +1325 6.98215e-07 7.39342e-05 0 +1326 0.000788029 0.000429422 0 +1327 0.000802151 0.000309637 0 +1328 -0.000320816 3.3343e-05 0 +1329 0 0 0 +1330 0.000321843 0.000135345 0 +1331 0.000636135 0.000351095 0 +1332 0.000706542 0.000258288 0 +1333 -0.000602705 1.88566e-05 0 +1334 -0.000106873 3.40954e-05 0 +1335 0.00045533 0.000254151 0 +1336 0.000605757 0.000207022 0 +1337 0.000209279 8.81121e-05 0 +1338 0.00109746 0.000487946 0 +1339 0.00109091 0.000499788 0 +1340 0.00108636 0.000467225 0 +1341 0.00106528 0.000501468 0 +1342 0.00105914 0.000438934 0 +1343 -0.000409547 3.27295e-06 0 +1344 0.00101911 0.000491702 0 +1345 0.00101735 0.000404338 0 +1346 0.000951014 0.000469226 0 +1347 0.000962603 0.000364723 0 +1348 0.000243904 0.000137477 0 +1349 0.000501624 0.000156778 0 +1350 0.000100042 4.45349e-05 0 +1351 -0.000844061 4.03994e-05 0 +1352 0.000859566 0.000432815 0 +1353 0.000896543 0.00032129 0 +1354 -0.000206329 -1.06993e-06 0 +1355 -0.000759727 1.75456e-05 0 +1356 -0.000659677 -1.52283e-06 0 +1357 0.000743358 0.000381239 0 +1358 0.000820874 0.000275235 0 +1359 0 0 0 +1360 0.000395968 0.000108387 0 +1361 -0.000486013 -2.20475e-05 0 +1362 0.000600902 0.000313341 0 +1363 0.000737321 0.000227646 0 +1364 -4.18604e-06 5.01343e-06 0 +1365 -0.000296333 -3.15161e-05 0 +1366 0.000290542 6.25537e-05 0 +1367 0.000430656 0.00022792 0 +1368 0.000647622 0.000179571 0 +1369 0.001018 0.000425567 0 +1370 0.00102223 0.000411018 0 +1371 0.00099582 0.00043101 0 +1372 0.00100997 0.000388611 0 +1373 -0.000549295 -4.29136e-05 0 +1374 -0.000101937 -3.0217e-05 0 +1375 0.00023096 0.000123872 0 +1376 0.000954253 0.000426114 0 +1377 0.000982703 0.000359566 0 +1378 0.000553531 0.000131932 0 +1379 0.00018705 1.98531e-05 0 +1380 0.000891898 0.00040964 0 +1381 0.00094197 0.000325101 0 +1382 -0.000375726 -5.73585e-05 0 +1383 0.00080734 0.000380368 0 +1384 0.000889343 0.000286386 0 +1385 0 0 0 +1386 0.000456757 8.55775e-05 0 +1387 0.00069917 0.000337089 0 +1388 0.000826432 0.00024456 0 +1389 8.70806e-05 -1.92615e-05 0 +1390 -0.000760905 -2.05168e-05 0 +1391 -0.000191816 -6.10176e-05 0 +1392 -0.000687354 -4.19357e-05 0 +1393 0.000565917 0.0002786 0 +1394 -0.000598843 -5.98595e-05 0 +1395 0.000754867 0.000200693 0 +1396 0.000359008 4.12276e-05 0 +1397 -0.000443565 -7.88027e-05 0 +1398 0.000406073 0.000203721 0 +1399 0.000676307 0.000155799 0 +1400 -7.87067e-06 -5.44801e-05 0 +1401 0.000261891 -5.02904e-07 0 +1402 -0.000272679 -8.74241e-05 0 +1403 0.000218013 0.000111252 0 +1404 0.0005924 0.0001108 0 +1405 0.000947547 0.000358951 0 +1406 0.000928478 0.000367551 0 +1407 0.000949795 0.000342225 0 +1408 0.000891155 0.000366825 0 +1409 0.000936647 0.000318544 0 +1410 0.000834198 0.000355578 0 +1411 0.000909588 0.000289084 0 +1412 0 0 0 +1413 0.000504796 6.65392e-05 0 +1414 -0.000499133 -9.62038e-05 0 +1415 0.000756195 0.000332613 0 +1416 0.000870106 0.000254964 0 +1417 -9.64601e-05 -8.55998e-05 0 +1418 0.000166985 -3.91171e-05 0 +1419 0.000655757 0.000296723 0 +1420 0.000819742 0.000217292 0 +1421 -0.000343488 -0.000109531 0 +1422 0.000415102 2.37567e-05 0 +1423 0.000531441 0.000246729 0 +1424 0.000760045 0.000177099 0 +1425 7.57162e-05 -7.42481e-05 0 +1426 -0.000177479 -0.000112561 0 +1427 0.000381769 0.000181408 0 +1428 0.000692584 0.000135383 0 +1429 -0.000684326 -7.36852e-05 0 +1430 -0.000620058 -9.33718e-05 0 +1431 -0.000541854 -0.000109879 0 +1432 0.000324894 -1.69102e-05 0 +1433 0.00020518 9.95854e-05 0 +1434 0.000618938 9.30467e-05 0 +1435 -0.00040347 -0.000127602 0 +1436 -1.05423e-05 -0.000105625 0 +1437 0.000863444 0.000310564 0 +1438 0.000879717 0.000299344 0 +1439 0.000830044 0.000313397 0 +1440 0.00088026 0.000280875 0 +1441 0.000235669 -5.49272e-05 0 +1442 0 0 0 +1443 0.000540667 5.09368e-05 0 +1444 -0.000249892 -0.00013539 0 +1445 0.000778144 0.000306687 0 +1446 0.000866484 0.000256285 0 +1447 0.000706367 0.000289265 0 +1448 0.000839828 0.000226662 0 +1449 0.000613342 0.000259961 0 +1450 0.000801754 0.00019307 0 +1451 0.000459327 9.79452e-06 0 +1452 -0.000451987 -0.000141937 0 +1453 -9.06136e-05 -0.000133123 0 +1454 0.000148855 -8.98776e-05 0 +1455 0.000497662 0.000217585 0 +1456 0.00075374 0.000156518 0 +1457 -0.000312834 -0.000154249 0 +1458 0.000357897 0.00016095 0 +1459 0.000697286 0.000117972 0 +1460 0.000376409 -2.97179e-05 0 +1461 0.000192539 8.88334e-05 0 +1462 0.000633887 7.83283e-05 0 +1463 6.57697e-05 -0.000121442 0 +1464 -0.000163401 -0.000156684 0 +1465 -0.00061321 -0.000119142 0 +1466 -0.000557494 -0.000137547 0 +1467 0.00029339 -6.70417e-05 0 +1468 -0.000488703 -0.000153032 0 +1469 0 0 0 +1470 0.000565045 3.84189e-05 0 +1471 -0.000365625 -0.000169363 0 +1472 0.000800879 0.000259537 0 +1473 0.000771095 0.000265383 0 +1474 0.000814628 0.000246157 0 +1475 0.000723939 0.000262589 0 +1476 0.000813716 0.000226336 0 +1477 -1.23732e-05 -0.000149422 0 +1478 0.000658059 0.000250028 0 +1479 0.000799512 0.000201125 0 +1480 0.000492234 -1.00506e-06 0 +1481 0.00021163 -0.00010172 0 +1482 0.00057212 0.000226552 0 +1483 0.000773423 0.000171561 0 +1484 -0.000228028 -0.000176401 0 +1485 0.000464758 0.00019101 0 +1486 0.000736857 0.000138619 0 +1487 0.00041691 -3.92736e-05 0 +1488 0.000334586 0.000142205 0 +1489 0.000691245 0.000103248 0 +1490 0.000132456 -0.000133384 0 +1491 -8.44985e-05 -0.000173705 0 +1492 -0.000407786 -0.000181079 0 +1493 0.000180172 7.89561e-05 0 +1494 0.000638019 6.63214e-05 0 +1495 0.000340472 -7.58035e-05 0 +1496 -0.000283725 -0.000192403 0 +1497 0 0 0 +1498 0.000578607 2.86689e-05 0 +1499 5.70417e-05 -0.000161787 0 +1500 -0.000149663 -0.000194297 0 +1501 -0.000547727 -0.000158552 0 +1502 0.000264274 -0.000110106 0 +1503 -0.00049937 -0.000175456 0 +1504 0.000714429 0.00022236 0 +1505 0.00074087 0.000213975 0 +1506 0.000514434 -8.96562e-06 0 +1507 -0.000438966 -0.000189712 0 +1508 0.000671713 0.000222934 0 +1509 0.000752347 0.00019884 0 +1510 0.000611415 0.000214615 0 +1511 0.000750187 0.000177981 0 +1512 0.000532233 0.000196297 0 +1513 -0.00032995 -0.000204964 0 +1514 0.000735728 0.000152402 0 +1515 -1.34991e-05 -0.000186751 0 +1516 0.000446884 -4.58986e-05 0 +1517 0.000432852 0.000166847 0 +1518 0.000710323 0.000123056 0 +1519 0.000189584 -0.000141779 0 +1520 -0.000207081 -0.000211271 0 +1521 0.000311942 0.000125115 0 +1522 0.000675338 9.08661e-05 0 +1523 0.000377327 -8.15351e-05 0 +1524 0.000168133 6.99063e-05 0 +1525 0.000632139 5.66932e-05 0 +1526 0.000117596 -0.00017052 0 +1527 -7.82314e-05 -0.000208223 0 +1528 -0.000366288 -0.000214376 0 +1529 0 0 0 +1530 0.000582101 2.13511e-05 0 +1531 0.000307057 -0.000115359 0 +1532 -0.000256121 -0.00022481 0 +1533 0.000526578 -1.44141e-05 0 +1534 4.93914e-05 -0.000196108 0 +1535 0.000660122 0.000183915 0 +1536 0.000621567 0.00018737 0 +1537 0.000683475 0.000173413 0 +1538 0.000566543 0.000182739 0 +1539 0.000692893 0.000156864 0 +1540 -0.000136304 -0.0002262 0 +1541 0.000237338 -0.000146937 0 +1542 0.000466916 -4.99201e-05 0 +1543 -0.000486933 -0.000191916 0 +1544 0.000493792 0.000168958 0 +1545 0.000689665 0.000135248 0 +1546 -0.000445335 -0.000207726 0 +1547 -0.000392579 -0.000221096 0 +1548 0.000402051 0.000144939 0 +1549 0.000675082 0.000109494 0 +1550 0.000290042 0.000109548 0 +1551 -0.000296317 -0.000235144 0 +1552 0.00065045 8.05061e-05 0 +1553 0.000404421 -8.45572e-05 0 +1554 -1.4049e-05 -0.000218423 0 +1555 0.000169319 -0.000175928 0 +1556 0.000156475 6.16406e-05 0 +1557 0.000617079 4.91247e-05 0 +1558 -0.00018706 -0.000240806 0 +1559 0 0 0 +1560 0.00057628 1.61572e-05 0 +1561 0.000340368 -0.000117792 0 +1562 0.000104107 -0.000202062 0 +1563 0.00052936 -1.76614e-05 0 +1564 -7.1875e-05 -0.000237413 0 +1565 -0.000327384 -0.000242606 0 +1566 0.000275969 -0.000149164 0 +1567 -0.000229948 -0.000252189 0 +1568 0.000477604 -5.16429e-05 0 +1569 0.000573554 0.000155563 0 +1570 0.000608211 0.000149659 0 +1571 0.000523511 0.000154127 0 +1572 0.000628701 0.0001374 0 +1573 0.000456871 0.000144332 0 +1574 0.000636253 0.000119738 0 +1575 4.2662e-05 -0.000225175 0 +1576 0.000372424 0.000125127 0 +1577 0.000632103 9.75876e-05 0 +1578 0.000422286 -8.51746e-05 0 +1579 0.000212379 -0.000178299 0 +1580 -0.000123363 -0.000253125 0 +1581 0.000268953 9.54285e-05 0 +1582 0.000617501 7.18276e-05 0 +1583 -0.000430879 -0.000220627 0 +1584 -0.000395088 -0.000235168 0 +1585 -0.00034915 -0.000247497 0 +1586 0.000145231 5.41087e-05 0 +1587 0.000593698 4.32891e-05 0 +1588 0.000364626 -0.000117705 0 +1589 -0.000264615 -0.000260617 0 +1590 0 0 0 +1591 0.000561952 1.27612e-05 0 +1592 -1.41194e-05 -0.000245151 0 +1593 0.000150669 -0.000204891 0 +1594 -0.00016793 -0.000265656 0 +1595 0.000523512 -1.90228e-05 0 +1596 0.000305823 -0.000148756 0 +1597 0.000479623 -5.1381e-05 0 +1598 9.18284e-05 -0.000228725 0 +1599 -6.55042e-05 -0.000261988 0 +1600 -0.000290825 -0.000266369 0 +1601 0.000527694 0.000127198 0 +1602 0.000246993 -0.000177924 0 +1603 0.000482356 0.000128514 0 +1604 0.000558694 0.000119223 0 +1605 0.000421516 0.000122203 0 +1606 0.000576526 0.000105526 0 +1607 0.000431501 -8.36928e-05 0 +1608 0.00034402 0.000107261 0 +1609 0.000582372 8.70007e-05 0 +1610 -0.000205138 -0.000275195 0 +1611 0.000248707 8.26416e-05 0 +1612 0.000577424 6.45117e-05 0 +1613 3.67427e-05 -0.000249644 0 +1614 0.000134429 4.72671e-05 0 +1615 0.000562878 3.88707e-05 0 +1616 0.000380345 -0.000115399 0 +1617 0.000189213 -0.000204869 0 +1618 -0.000110844 -0.000275715 0 +1619 0 0 0 +1620 -0.000378756 -0.000244641 0 +1621 0.000539935 1.08595e-05 0 +1622 -0.000348282 -0.000258276 0 +1623 -0.000308564 -0.00026986 0 +1624 0.000327304 -0.000146003 0 +1625 0.0005098 -1.88013e-05 0 +1626 -0.000234697 -0.000281969 0 +1627 -1.38056e-05 -0.000267585 0 +1628 0.000133451 -0.000229338 0 +1629 0.000473659 -4.9429e-05 0 +1630 -0.000149665 -0.000286469 0 +1631 0.000273489 -0.000175079 0 +1632 0.000432697 -8.04053e-05 0 +1633 0.000443085 0.00010565 0 +1634 0.000483979 0.000101971 0 +1635 8.06232e-05 -0.000251131 0 +1636 0.000387746 0.000102375 0 +1637 0.000511543 9.22599e-05 0 +1638 -5.91534e-05 -0.000282531 0 +1639 0.000316863 9.11908e-05 0 +1640 0.000526898 7.73958e-05 0 +1641 -0.000256477 -0.000286285 0 +1642 0.000219946 -0.000202262 0 +1643 0.000229338 7.11012e-05 0 +1644 0.000531178 5.8225e-05 0 +1645 0.000388062 -0.000111161 0 +1646 0.000124083 4.1066e-05 0 +1647 0.000525526 3.55496e-05 0 +1648 -0.000181593 -0.000294402 0 +1649 0 0 0 +1650 0.00051109 1.01344e-05 0 +1651 3.15105e-05 -0.000270139 0 +1652 0.000340885 -0.000141189 0 +1653 0.000167657 -0.000227261 0 +1654 0.000489018 -1.73038e-05 0 +1655 -9.87588e-05 -0.000294551 0 +1656 -0.000330515 -0.000265109 0 +1657 -0.000304615 -0.0002777 0 +1658 -0.000270459 -0.000288428 0 +1659 0.000460458 -4.60917e-05 0 +1660 0.000292239 -0.000170043 0 +1661 -0.00020643 -0.00029977 0 +1662 0.000117521 -0.000249842 0 +1663 -1.31739e-05 -0.000286289 0 +1664 0.000426542 -7.56077e-05 0 +1665 0.000243168 -0.000197336 0 +1666 -0.000132208 -0.000303755 0 +1667 0.000405677 8.52999e-05 0 +1668 0.000355554 8.46603e-05 0 +1669 0.00044237 7.96081e-05 0 +1670 0.00038839 -0.000105281 0 +1671 0.000290959 7.67789e-05 0 +1672 0.000466699 6.84487e-05 0 +1673 0.000210847 6.07106e-05 0 +1674 0.000479735 5.2657e-05 0 +1675 7.03553e-05 -0.000269848 0 +1676 0.000114204 3.54637e-05 0 +1677 0.000482566 3.30181e-05 0 +1678 -5.28658e-05 -0.000299609 0 +1679 0.000194631 -0.000222749 0 +1680 0.00034709 -0.000134593 0 +1681 -0.000224091 -0.000302828 0 +1682 0 0 0 +1683 0.000476284 1.02894e-05 0 +1684 0.00046199 -1.48257e-05 0 +1685 -0.000159223 -0.000310324 0 +1686 0.000303703 -0.000163086 0 +1687 2.6878e-05 -0.00028717 0 +1688 0.000440778 -4.16557e-05 0 +1689 0.000147545 -0.000246012 0 +1690 -8.70856e-05 -0.00031014 0 +1691 0.000413745 -6.9585e-05 0 +1692 -0.000285464 -0.000281949 0 +1693 -0.000263747 -0.000293819 0 +1694 0.000259239 -0.000190351 0 +1695 -0.000234679 -0.000303948 0 +1696 -0.000179656 -0.000314471 0 +1697 0.000381963 -9.80373e-05 0 +1698 0.00010272 -0.000266936 0 +1699 -1.22942e-05 -0.000301776 0 +1700 0.000324921 6.88762e-05 0 +1701 0.000370095 6.72416e-05 0 +1702 0.000266296 6.38885e-05 0 +1703 0.000402811 5.98399e-05 0 +1704 0.000214664 -0.000216045 0 +1705 0.000193239 5.13808e-05 0 +1706 0.000424085 4.74899e-05 0 +1707 -0.00011551 -0.000318024 0 +1708 0.000346499 -0.000126492 0 +1709 0.000104792 3.04135e-05 0 +1710 0.000434941 3.09687e-05 0 +1711 0 0 0 +1712 0.000436418 1.10179e-05 0 +1713 6.09111e-05 -0.000285366 0 +1714 0.00042956 -1.16641e-05 0 +1715 -4.66548e-05 -0.000313671 0 +1716 0.000308374 -0.000154475 0 +1717 0.000170877 -0.000239874 0 +1718 -0.000193511 -0.000316475 0 +1719 0.000415421 -3.64165e-05 0 +1720 -0.000137913 -0.000323405 0 +1721 0.000268593 -0.000181566 0 +1722 0.000395044 -6.26242e-05 0 +1723 2.2748e-05 -0.00030123 0 +1724 0.000128711 -0.000261608 0 +1725 -7.58134e-05 -0.000322931 0 +1726 0.000369472 -8.97136e-05 0 +1727 0.000228096 -0.000207401 0 +1728 -0.000243469 -0.000296098 0 +1729 -0.000225375 -0.000307144 0 +1730 -0.000200892 -0.000316599 0 +1731 0.000339729 -0.000117158 0 +1732 0.000295798 5.48631e-05 0 +1733 0.000242847 5.23969e-05 0 +1734 0.000336276 5.12715e-05 0 +1735 8.892e-05 -0.000281064 0 +1736 0.000176492 4.30327e-05 0 +1737 0.000365221 4.24338e-05 0 +1738 -0.000154227 -0.000326517 0 +1739 -1.12103e-05 -0.000314482 0 +1740 9.58404e-05 2.58769e-05 0 +1741 0.000383602 2.91105e-05 0 +1742 0.000187791 -0.00023166 0 +1743 0 0 0 +1744 0.000392394 1.2037e-05 0 +1745 0.000306819 -0.000144477 0 +1746 -9.94971e-05 -0.000329664 0 +1747 0.000392593 -8.10267e-06 0 +1748 0.000385195 -3.0651e-05 0 +1749 5.21744e-05 -0.000298124 0 +1750 0.000271714 -0.000171239 0 +1751 0.000148501 -0.000254087 0 +1752 -4.05404e-05 -0.00032516 0 +1753 0.000371207 -5.50019e-05 0 +1754 -0.00016449 -0.00032759 0 +1755 0.000351624 -8.05799e-05 0 +1756 0.000235351 -0.000197059 0 +1757 -0.00011756 -0.000334037 0 +1758 1.90509e-05 -0.000312707 0 +1759 0.000111006 -0.000274464 0 +1760 0.000327442 -0.00010686 0 +1761 -6.49036e-05 -0.00033331 0 +1762 0.000198621 -0.000221602 0 +1763 0.000220575 4.21831e-05 0 +1764 0.000268135 4.24571e-05 0 +1765 0.000160591 3.55792e-05 0 +1766 0.000304149 3.71975e-05 0 +1767 -0.000203942 -0.000307445 0 +1768 -0.000189166 -0.000317953 0 +1769 8.73409e-05 2.18115e-05 0 +1770 0.000329509 2.71578e-05 0 +1771 0.000299629 -0.000133354 0 +1772 -0.000168908 -0.000326951 0 +1773 0 0 0 +1774 0.000345137 1.30577e-05 0 +1775 7.59827e-05 -0.000292642 0 +1776 -9.97273e-06 -0.000324797 0 +1777 -0.000129977 -0.000336242 0 +1778 0.000351964 -4.42429e-06 0 +1779 0.00016236 -0.000244584 0 +1780 0.000269142 -0.000159622 0 +1781 0.000350943 -2.46433e-05 0 +1782 -8.41029e-05 -0.000339064 0 +1783 0.000343024 -4.69954e-05 0 +1784 4.40496e-05 -0.000308496 0 +1785 0.000236895 -0.000185267 0 +1786 0.00032917 -7.09122e-05 0 +1787 0.000127343 -0.000265762 0 +1788 -3.45211e-05 -0.000334407 0 +1789 -0.000136859 -0.000336527 0 +1790 0.00031033 -9.58662e-05 0 +1791 0.000203776 -0.000209935 0 +1792 -9.80375e-05 -0.00034255 0 +1793 1.57096e-05 -0.000321976 0 +1794 9.42768e-05 -0.00028495 0 +1795 0.000287453 -0.000121369 0 +1796 0.000199427 3.31416e-05 0 +1797 0.000145495 2.89581e-05 0 +1798 0.000241858 3.15263e-05 0 +1799 7.92764e-05 1.81833e-05 0 +1800 0.000273622 2.48478e-05 0 +1801 -5.43292e-05 -0.00034161 0 +1802 0 0 0 +1803 0.000295562 1.38201e-05 0 +1804 0.000170612 -0.000233323 0 +1805 0.00030856 -8.94475e-07 0 +1806 0.000261461 -0.000146971 0 +1807 -0.000166668 -0.000316732 0 +1808 -0.000154821 -0.000326629 0 +1809 -0.000138422 -0.000335129 0 +1810 0.000313503 -1.8655e-05 0 +1811 6.37916e-05 -0.000301997 0 +1812 -8.60914e-06 -0.000333046 0 +1813 -0.000106747 -0.000343979 0 +1814 0.000311302 -3.88698e-05 0 +1815 0.000233259 -0.000172268 0 +1816 0.000138194 -0.000255162 0 +1817 0.000302866 -6.09709e-05 0 +1818 -6.92452e-05 -0.0003465 0 +1819 0.000203716 -0.000196892 0 +1820 0.000289116 -8.44375e-05 0 +1821 3.64359e-05 -0.000316808 0 +1822 0.000107233 -0.000275241 0 +1823 -2.86001e-05 -0.000341744 0 +1824 0.000270957 -0.000108777 0 +1825 -0.000110377 -0.000343549 0 +1826 0.000173663 -0.00022052 0 +1827 0.000131174 2.30869e-05 0 +1828 0.000179348 2.51682e-05 0 +1829 -7.92326e-05 -0.000349227 0 +1830 7.163e-05 1.49549e-05 0 +1831 0.000216895 2.19273e-05 0 +1832 0.000249296 -0.000133539 0 +1833 0 0 0 +1834 0.000244599 1.40611e-05 0 +1835 7.83865e-05 -0.000293375 0 +1836 1.26662e-05 -0.000329315 0 +1837 0.000263267 2.22534e-06 0 +1838 0.000273737 -1.29539e-05 0 +1839 0.000143885 -0.000242868 0 +1840 -4.40377e-05 -0.00034811 0 +1841 0.000225009 -0.000158308 0 +1842 0.000276859 -3.08893e-05 0 +1843 -0.000131151 -0.000323828 0 +1844 -0.000122016 -0.000333362 0 +1845 -0.000109217 -0.000341541 0 +1846 5.22236e-05 -0.000309442 0 +1847 0.000273502 -5.10232e-05 0 +1848 -7.15668e-06 -0.00033951 0 +1849 0.00019896 -0.000182709 0 +1850 -8.43687e-05 -0.000349955 0 +1851 0.000115115 -0.000263695 0 +1852 0.00026454 -7.28357e-05 0 +1853 -5.48444e-05 -0.000352256 0 +1854 0.00025085 -9.58379e-05 0 +1855 0.000171965 -0.000206405 0 +1856 2.92522e-05 -0.000323325 0 +1857 8.80185e-05 -0.000282792 0 +1858 0.000233304 -0.000119578 0 +1859 0.000117575 1.79192e-05 0 +1860 6.4377e-05 1.20969e-05 0 +1861 0.000160268 1.81742e-05 0 +1862 -2.14848e-05 -0.000347585 0 +1863 -8.4862e-05 -0.000348896 0 +1864 0.000144816 -0.000229092 0 +1865 0 0 0 +1866 0.00019315 1.35547e-05 0 +1867 0.000216969 4.69631e-06 0 +1868 0.000212763 -0.000143635 0 +1869 -6.10109e-05 -0.000354295 0 +1870 0.000232491 -7.77967e-06 0 +1871 6.31918e-05 -0.000300007 0 +1872 9.8569e-06 -0.000335003 0 +1873 0.000240518 -2.33023e-05 0 +1874 0.000118247 -0.000250514 0 +1875 0.000190066 -0.000167626 0 +1876 0.000241863 -4.13164e-05 0 +1877 -3.24881e-05 -0.000353263 0 +1878 -9.7082e-05 -0.000329258 0 +1879 0.000237362 -6.13128e-05 0 +1880 -9.04555e-05 -0.000338406 0 +1881 -8.10203e-05 -0.000346263 0 +1882 0.000166031 -0.000191203 0 +1883 9.29522e-05 -0.000270427 0 +1884 0.000227849 -8.28019e-05 0 +1885 -6.26746e-05 -0.000354401 0 +1886 -4.81057e-06 -0.000344444 0 +1887 0.00021417 -0.000105337 0 +1888 -4.08101e-05 -0.00035651 0 +1889 0.000141441 -0.000214049 0 +1890 3.82166e-05 -0.000316464 0 +1891 6.95395e-05 -0.000288663 0 +1892 5.74955e-05 9.57732e-06 0 +1893 0.000104659 1.33792e-05 0 +1894 0.000197157 -0.000128492 0 +1895 0 0 0 +1896 0.000142119 1.20728e-05 0 +1897 0.000170536 6.28626e-06 0 +1898 0.000190619 -3.37801e-06 0 +1899 0.000117033 -0.000235887 0 +1900 -6.00796e-05 -0.00035274 0 +1901 0.000203102 -1.63552e-05 0 +1902 0.000177638 -0.000151881 0 +1903 -1.49122e-05 -0.000351727 0 +1904 2.06058e-05 -0.000329352 0 +1905 0.000208751 -3.2105e-05 0 +1906 -4.3253e-05 -0.000357931 0 +1907 0.00020835 -5.01219e-05 0 +1908 6.6008e-06 -0.000339762 0 +1909 0.000156413 -0.000175146 0 +1910 9.10766e-05 -0.000257576 0 +1911 0.000202698 -6.99252e-05 0 +1912 -2.28436e-05 -0.000356698 0 +1913 -6.40721e-05 -0.000332831 0 +1914 4.45761e-05 -0.00030612 0 +1915 -5.98072e-05 -0.00034191 0 +1916 -5.35946e-05 -0.000349507 0 +1917 0.000134263 -0.00019796 0 +1918 0.000192601 -9.10677e-05 0 +1919 6.93678e-05 -0.000276578 0 +1920 0.000178869 -0.000113129 0 +1921 -3.69737e-06 -0.000348294 0 +1922 0.000111936 -0.000220028 0 +1923 -2.70528e-05 -0.00035946 0 +1924 5.09553e-05 7.37166e-06 0 +1925 0 0 0 +1926 9.23636e-05 9.43452e-06 0 +1927 0.000124818 6.79183e-06 0 +1928 0.000148946 4.13594e-08 0 +1929 0.000162311 -0.000135718 0 +1930 5.1644e-05 -0.000293033 0 +1931 0.000165423 -1.02739e-05 0 +1932 0.000174953 -2.36181e-05 0 +1933 0.000143709 -0.00015847 0 +1934 8.76022e-05 -0.000242189 0 +1935 2.47403e-05 -0.000321116 0 +1936 0.000178274 -3.95029e-05 0 +1937 -3.11001e-05 -0.000358482 0 +1938 0.000176139 -5.74485e-05 0 +1939 1.32611e-05 -0.000333105 0 +1940 0.000123837 -0.000181051 0 +1941 0.000169321 -7.70171e-05 0 +1942 3.82841e-06 -0.000343033 0 +1943 6.49635e-05 -0.000262903 0 +1944 3.04654e-05 -0.00030937 0 +1945 0.000158591 -9.77872e-05 0 +1946 -3.18848e-05 -0.000335116 0 +1947 0.000103445 -0.000203159 0 +1948 -3.0053e-05 -0.000342838 0 +1949 -2.70954e-05 -0.00035062 0 +1950 -2.38704e-05 -0.000355975 0 +1951 -6.01878e-06 -0.000353982 0 +1952 4.86905e-05 -0.000280177 0 +1953 0.000144737 -0.000119377 0 +1954 0 0 0 +1955 4.47309e-05 5.45352e-06 0 +1956 8.06407e-05 6.01763e-06 0 +1957 -1.72214e-05 -0.000361007 0 +1958 0.000108291 2.26111e-06 0 +1959 8.32485e-05 -0.000224514 0 +1960 0.000128281 -5.2815e-06 0 +1961 -1.29299e-05 -0.000361045 0 +1962 0.000128549 -0.000141418 0 +1963 0.000141259 -1.60943e-05 0 +1964 3.41811e-05 -0.000296066 0 +1965 -8.4325e-06 -0.000358747 0 +1966 0.000147902 -2.96955e-05 0 +1967 0.000148924 -4.56214e-05 0 +1968 0.000110761 -0.000163555 0 +1969 6.14977e-05 -0.000245858 0 +1970 0.000145057 -6.34359e-05 0 +1971 -5.47802e-07 -0.000349318 0 +1972 9.75728e-06 -0.000329869 0 +1973 9.21196e-05 -0.000185492 0 +1974 0.00013704 -8.27297e-05 0 +1975 3.69359e-06 -0.000340393 0 +1976 1.49382e-05 -0.000316443 0 +1977 7.33605e-05 -0.000206923 0 +1978 0 -0.000335881 0 +1979 0 -0.000343487 0 +1980 0.000122698 -0.000102321 0 +1981 0 -0.000350434 0 +1982 0 0 0 +1983 3.87885e-05 3.80309e-06 0 +1984 6.94254e-05 3.1088e-06 0 +1985 0 -0.000355896 0 +1986 9.24462e-05 -1.57572e-06 0 +1987 0 -0.000359786 0 +1988 0.000108427 -9.73957e-06 0 +1989 0.000108757 -0.000123334 0 +1990 5.51765e-05 -0.000227624 0 +1991 0 -0.000361733 0 +1992 0.000117992 -2.09243e-05 0 +1993 3.14856e-05 -0.000269926 0 +1994 1.57309e-05 -0.000303477 0 +1995 9.56614e-05 -0.000145712 0 +1996 0 -0.000361446 0 +1997 0.000121794 -3.46725e-05 0 +1998 0 -0.000358829 0 +1999 0.000120531 -5.05567e-05 0 +2000 7.85737e-05 -0.00016728 0 +2001 1.94185e-05 -0.000286226 0 +2002 0 -0.000353804 0 +2003 0.000114914 -6.81881e-05 0 +2004 0 -0.000346292 0 +2005 0.000102779 -8.63567e-05 0 +2006 0 -0.00033633 0 +2007 2.48348e-05 -0.000252388 0 +2008 0 0 0 +2009 3.31003e-05 2.39949e-06 0 +2010 5.86622e-05 6.48987e-07 0 +2011 0 -0.000324023 0 +2012 7.72027e-05 -4.77247e-06 0 +2013 8.78684e-05 -0.000105297 0 +2014 8.92779e-05 -1.34133e-05 0 +2015 7.63995e-05 -0.000126751 0 +2016 9.54915e-05 -2.48398e-05 0 +2017 2.73106e-05 -0.000231039 0 +2018 0 -0.000309477 0 +2019 4.58206e-05 -0.000188225 0 +2020 6.34376e-05 -0.000148729 0 +2021 0 -0.000292899 0 +2022 2.92669e-05 -0.000208747 0 +2023 8.90447e-05 -3.91664e-05 0 +2024 8.33596e-05 -7.19736e-05 0 +2025 0 -0.00027447 0 +2026 8.49241e-05 -5.48387e-05 0 +2027 0 0 0 +2028 2.76302e-05 1.2272e-06 0 +2029 7.00032e-05 -8.9652e-05 0 +2030 4.8284e-05 -1.37112e-06 0 +2031 0 -0.000254409 0 +2032 6.24658e-05 -7.36607e-06 0 +2033 3.12842e-05 -0.000169001 0 +2034 7.0715e-05 -1.63309e-05 0 +2035 0 -0.0002332 0 +2036 3.15808e-05 -0.000145956 0 +2037 6.71274e-05 -2.82539e-05 0 +2038 0 -0.00021103 0 +2039 4.32458e-05 -0.000102797 0 +2040 5.2458e-05 -7.45138e-05 0 +2041 3.12941e-05 -0.000123398 0 +2042 5.61946e-05 -5.75028e-05 0 +2043 0 -0.000188129 0 +2044 0 0 0 +2045 2.23482e-05 2.7179e-07 0 +2046 5.7481e-05 -4.2095e-05 0 +2047 3.78597e-05 -3.22225e-06 0 +2048 4.73282e-05 -9.73362e-06 0 +2049 5.26141e-05 -1.85835e-05 0 +2050 0 -0.000165007 0 +2051 2.71089e-05 -8.64754e-05 0 +2052 4.59719e-05 -3.02477e-05 0 +2053 0 -0.000142107 0 +2054 0 0 0 +2055 0 -0.000119713 0 +2056 2.52113e-05 -6.70197e-05 0 +2057 1.72157e-05 -5.8427e-07 0 +2058 3.02049e-05 -5.09431e-05 0 +2059 2.74702e-05 -4.66693e-06 0 +2060 3.3257e-05 -1.1204e-05 0 +2061 3.48901e-05 -2.01497e-05 0 +2062 0 -9.79934e-05 0 +2063 2.62915e-05 -3.52993e-05 0 +2064 0 -7.76898e-05 0 +2065 0 0 0 +2066 1.20851e-05 -1.13944e-06 0 +2067 1.84812e-05 -2.42626e-05 0 +2068 0 -5.90191e-05 0 +2069 1.44584e-05 -6.42897e-06 0 +2070 1.41953e-05 -1.34201e-05 0 +2071 0 -4.23448e-05 0 +2072 0 0 0 +2073 0 -2.7992e-05 0 +2074 5.57719e-06 -1.97349e-06 0 +2075 0 -1.63479e-05 0 +2076 0 0 0 +2077 0 -7.61339e-06 0 +2078 0 -2.03919e-06 0 +2079 0 0 0 +End Values Result "TOTAL_DISPLACEMENT" "Kratos" 3.2 Vector OnNodes Values 1 0 0.0195285 0 @@ -30849,6 +32931,2088 @@ Values 2078 0 -2.03919e-06 0 2079 0 0 0 End Values +Result "INCREMENTAL_DISPLACEMENT" "Kratos" 3.6 Vector OnNodes +Values +1 0 0 0 +2 0 6.93889e-18 0 +3 1.19262e-18 6.93889e-18 0 +4 -5.14996e-19 6.93889e-18 0 +5 0 6.93889e-18 0 +6 2.38524e-18 6.93889e-18 0 +7 -9.96111e-19 6.93889e-18 0 +8 -2.71051e-19 6.93889e-18 0 +9 -6.50521e-19 1.38778e-17 0 +10 0 6.93889e-18 0 +11 0 0 0 +12 -4.33681e-19 6.93889e-18 0 +13 -1.40946e-18 1.38778e-17 0 +14 2.1684e-19 6.93889e-18 0 +15 -2.61564e-18 6.93889e-18 0 +16 0 0 0 +17 0 1.38778e-17 0 +18 0 0 0 +19 1.73472e-18 1.38778e-17 0 +20 6.50521e-19 6.93889e-18 0 +21 0 1.38778e-17 0 +22 9.75782e-19 6.93889e-18 0 +23 0 0 0 +24 -8.67362e-19 1.38778e-17 0 +25 0 1.38778e-17 0 +26 0 0 0 +27 1.51788e-18 6.93889e-18 0 +28 2.1684e-19 6.93889e-18 0 +29 4.33681e-19 1.38778e-17 0 +30 0 1.38778e-17 0 +31 0 6.93889e-18 0 +32 0 0 0 +33 -4.33681e-19 6.93889e-18 0 +34 0 6.93889e-18 0 +35 0 0 0 +36 -2.1684e-19 6.93889e-18 0 +37 0 1.38778e-17 0 +38 -8.67362e-19 6.93889e-18 0 +39 4.33681e-19 1.38778e-17 0 +40 -4.33681e-19 6.93889e-18 0 +41 0 0 0 +42 0 0 0 +43 0 1.38778e-17 0 +44 -8.67362e-19 1.38778e-17 0 +45 0 6.93889e-18 0 +46 0 0 0 +47 -8.67362e-19 1.38778e-17 0 +48 2.1684e-19 1.38778e-17 0 +49 0 1.38778e-17 0 +50 4.33681e-19 6.93889e-18 0 +51 0 0 0 +52 0 0 0 +53 0 0 0 +54 6.50521e-19 6.93889e-18 0 +55 -8.67362e-19 6.93889e-18 0 +56 6.50521e-19 6.93889e-18 0 +57 4.33681e-19 6.93889e-18 0 +58 0 0 0 +59 0 6.93889e-18 0 +60 0 6.93889e-18 0 +61 0 0 0 +62 0 1.38778e-17 0 +63 0 0 0 +64 5.42101e-20 6.93889e-18 0 +65 0 0 0 +66 2.1684e-19 6.93889e-18 0 +67 0 0 0 +68 0 0 0 +69 -9.75782e-19 6.93889e-18 0 +70 -8.67362e-19 1.38778e-17 0 +71 8.67362e-19 6.93889e-18 0 +72 0 6.93889e-18 0 +73 0 0 0 +74 0 0 0 +75 0 6.93889e-18 0 +76 0 0 0 +77 -8.67362e-19 6.93889e-18 0 +78 0 0 0 +79 8.13152e-20 6.93889e-18 0 +80 -1.40946e-18 6.93889e-18 0 +81 -2.1684e-18 6.93889e-18 0 +82 0 0 0 +83 2.1684e-19 6.93889e-18 0 +84 0 0 0 +85 -1.30104e-18 1.38778e-17 0 +86 -7.58942e-19 6.93889e-18 0 +87 0 6.93889e-18 0 +88 -1.30104e-18 6.93889e-18 0 +89 0 0 0 +90 0 0 0 +91 -2.71051e-19 6.93889e-18 0 +92 -8.67362e-19 6.93889e-18 0 +93 0 0 0 +94 0 0 0 +95 5.28549e-19 6.93889e-18 0 +96 5.96311e-19 6.93889e-18 0 +97 -4.33681e-19 6.93889e-18 0 +98 6.50521e-19 6.93889e-18 0 +99 -1.73472e-18 6.93889e-18 0 +100 0 0 0 +101 -6.50521e-19 6.93889e-18 0 +102 -2.71051e-18 1.38778e-17 0 +103 5.42101e-19 6.93889e-18 0 +104 -1.51788e-18 6.93889e-18 0 +105 0 0 0 +106 0 6.93889e-18 0 +107 0 0 0 +108 0 0 0 +109 3.25261e-19 1.38778e-17 0 +110 1.24683e-18 6.93889e-18 0 +111 3.25261e-19 6.93889e-18 0 +112 4.87891e-19 1.38778e-17 0 +113 -1.54499e-18 6.93889e-18 0 +114 -1.92446e-18 6.93889e-18 0 +115 0 0 0 +116 8.97855e-19 6.93889e-18 0 +117 0 0 0 +118 -3.30682e-18 6.93889e-18 0 +119 -3.46945e-18 0 0 +120 -5.96311e-19 6.93889e-18 0 +121 3.37278e-19 1.38778e-17 0 +122 1.6263e-19 1.38778e-17 0 +123 -2.71051e-19 6.93889e-18 0 +124 -4.55365e-18 0 0 +125 6.57298e-19 1.38778e-17 0 +126 4.5401e-19 6.93889e-18 0 +127 0 6.93889e-18 0 +128 0 0 0 +129 -1.95156e-18 6.93889e-18 0 +130 0 0 0 +131 -2.81893e-18 6.93889e-18 0 +132 -3.03577e-18 0 0 +133 -1.35525e-20 1.04083e-17 0 +134 -4.33681e-19 1.38778e-17 0 +135 -3.90313e-18 6.93889e-18 0 +136 -1.51788e-18 1.38778e-17 0 +137 -1.30104e-18 0 0 +138 -1.30104e-18 6.93889e-18 0 +139 0 0 0 +140 -1.51788e-18 0 0 +141 -4.77049e-18 0 0 +142 -6.50521e-19 -6.93889e-18 0 +143 -7.04731e-19 6.93889e-18 0 +144 1.35525e-19 6.93889e-18 0 +145 -2.1684e-19 6.93889e-18 0 +146 -2.38524e-18 6.93889e-18 0 +147 -9.75782e-19 6.93889e-18 0 +148 0 6.93889e-18 0 +149 0 0 0 +150 -5.42101e-19 6.93889e-18 0 +151 -1.0842e-18 0 0 +152 -2.60209e-18 6.93889e-18 0 +153 8.67362e-19 -6.93889e-18 0 +154 -4.87891e-19 6.93889e-18 0 +155 -5.42101e-19 1.04083e-17 0 +156 -2.1684e-18 6.93889e-18 0 +157 -2.1684e-19 6.93889e-18 0 +158 -4.77049e-18 0 0 +159 -6.50521e-19 0 0 +160 0 0 0 +161 -8.67362e-19 6.93889e-18 0 +162 -3.46945e-18 0 0 +163 -1.40946e-18 6.93889e-18 0 +164 -1.30104e-18 6.93889e-18 0 +165 -1.30104e-18 0 0 +166 0 -6.93889e-18 0 +167 6.50521e-19 6.93889e-18 0 +168 0 6.93889e-18 0 +169 0 0 0 +170 -6.50521e-19 6.93889e-18 0 +171 -2.60209e-18 0 0 +172 -9.75782e-19 1.04083e-17 0 +173 -1.57209e-18 0 0 +174 0 6.93889e-18 0 +175 -2.1684e-18 0 0 +176 0 0 0 +177 -5.42101e-19 1.04083e-17 0 +178 -8.67362e-19 0 0 +179 0 0 0 +180 -6.50521e-19 6.93889e-18 0 +181 0 3.46945e-18 0 +182 -1.30104e-18 6.93889e-18 0 +183 0 -6.93889e-18 0 +184 -6.50521e-19 6.93889e-18 0 +185 -1.0842e-18 1.04083e-17 0 +186 -3.03577e-18 -6.93889e-18 0 +187 -3.03577e-18 0 0 +188 -4.33681e-19 3.46945e-18 0 +189 -3.25261e-18 -6.93889e-18 0 +190 -2.1684e-18 -6.93889e-18 0 +191 -8.67362e-19 6.93889e-18 0 +192 -1.30104e-18 6.93889e-18 0 +193 0 6.93889e-18 0 +194 0 0 0 +195 8.67362e-19 0 0 +196 -1.30104e-18 6.93889e-18 0 +197 4.60786e-19 6.93889e-18 0 +198 -4.33681e-19 0 0 +199 -8.67362e-19 3.46945e-18 0 +200 -2.05321e-18 0 0 +201 -8.67362e-19 6.93889e-18 0 +202 -1.73472e-18 -6.93889e-18 0 +203 -8.67362e-19 3.46945e-18 0 +204 0 -6.93889e-18 0 +205 -5.42101e-19 6.93889e-18 0 +206 -1.30104e-18 6.93889e-18 0 +207 -4.33681e-19 3.46945e-18 0 +208 -1.0842e-18 -3.46945e-18 0 +209 -4.33681e-19 3.46945e-18 0 +210 -1.30104e-18 6.93889e-18 0 +211 -3.25261e-19 1.04083e-17 0 +212 -1.73472e-18 0 0 +213 -2.60209e-18 -3.46945e-18 0 +214 -4.33681e-19 3.46945e-18 0 +215 -3.46945e-18 -3.46945e-18 0 +216 0 -3.46945e-18 0 +217 -8.67362e-19 1.04083e-17 0 +218 -1.30104e-18 0 0 +219 -2.60209e-18 -3.46945e-18 0 +220 8.67362e-19 3.46945e-18 0 +221 0 3.46945e-18 0 +222 0 -1.04083e-17 0 +223 -8.67362e-19 3.46945e-18 0 +224 -1.73472e-18 -6.93889e-18 0 +225 -8.67362e-19 0 0 +226 -8.67362e-19 6.93889e-18 0 +227 0 3.46945e-18 0 +228 8.67362e-19 -6.93889e-18 0 +229 -6.50521e-19 6.93889e-18 0 +230 -1.30104e-18 0 0 +231 -1.48061e-18 -3.46945e-18 0 +232 -1.84314e-18 6.93889e-18 0 +233 -2.05998e-18 3.46945e-18 0 +234 0 6.93889e-18 0 +235 4.33681e-19 3.46945e-18 0 +236 -2.1684e-19 -3.46945e-18 0 +237 1.30104e-18 3.46945e-18 0 +238 -1.30104e-18 6.93889e-18 0 +239 -1.95156e-18 6.93889e-18 0 +240 -1.30104e-18 -3.46945e-18 0 +241 -1.73472e-18 -3.46945e-18 0 +242 -1.73472e-18 -6.93889e-18 0 +243 -4.33681e-19 0 0 +244 4.33681e-19 -3.46945e-18 0 +245 0 0 0 +246 -2.60209e-18 -6.93889e-18 0 +247 -8.67362e-19 3.46945e-18 0 +248 0 3.46945e-18 0 +249 -8.67362e-19 -3.46945e-18 0 +250 0 6.93889e-18 0 +251 1.73472e-18 -6.93889e-18 0 +252 -1.73472e-18 -6.93889e-18 0 +253 -1.30104e-18 6.93889e-18 0 +254 0 -3.46945e-18 0 +255 -1.30104e-18 6.93889e-18 0 +256 1.30104e-18 3.46945e-18 0 +257 0 -6.93889e-18 0 +258 -1.6263e-18 3.46945e-18 0 +259 8.67362e-19 0 0 +260 -5.42101e-20 -6.93889e-18 0 +261 0 3.46945e-18 0 +262 -1.95156e-18 3.46945e-18 0 +263 -8.67362e-19 0 0 +264 8.67362e-19 -3.46945e-18 0 +265 -8.67362e-19 3.46945e-18 0 +266 4.33681e-19 0 0 +267 -1.51788e-18 3.46945e-18 0 +268 -8.67362e-19 3.46945e-18 0 +269 -1.30104e-18 -3.46945e-18 0 +270 -1.30104e-18 -6.93889e-18 0 +271 8.67362e-19 0 0 +272 -8.67362e-19 -6.93889e-18 0 +273 8.67362e-19 0 0 +274 0 -3.46945e-18 0 +275 -1.51788e-18 -6.93889e-18 0 +276 8.67362e-19 -1.04083e-17 0 +277 4.33681e-19 3.46945e-18 0 +278 8.67362e-19 -3.46945e-18 0 +279 -6.50521e-19 -6.93889e-18 0 +280 -8.67362e-19 3.46945e-18 0 +281 0 6.93889e-18 0 +282 0 -1.04083e-17 0 +283 -3.79471e-19 3.46945e-18 0 +284 -1.30104e-18 3.46945e-18 0 +285 0 -1.04083e-17 0 +286 8.67362e-19 3.46945e-18 0 +287 4.33681e-19 0 0 +288 0 -6.93889e-18 0 +289 8.67362e-19 0 0 +290 7.58942e-19 -6.93889e-18 0 +291 0 3.46945e-18 0 +292 -2.1684e-19 3.46945e-18 0 +293 -8.67362e-19 0 0 +294 -1.30104e-18 -6.93889e-18 0 +295 -8.67362e-19 0 0 +296 0 -3.46945e-18 0 +297 -1.30104e-18 -3.46945e-18 0 +298 1.73472e-18 -3.46945e-18 0 +299 -4.33681e-19 3.46945e-18 0 +300 -1.30104e-18 0 0 +301 0 -3.46945e-18 0 +302 -1.30104e-18 -6.93889e-18 0 +303 -8.67362e-19 0 0 +304 1.73472e-18 -3.46945e-18 0 +305 -4.33681e-19 -6.93889e-18 0 +306 0 3.46945e-18 0 +307 -6.50521e-19 6.93889e-18 0 +308 1.73472e-18 -6.93889e-18 0 +309 -1.30104e-18 0 0 +310 8.67362e-19 0 0 +311 5.96311e-19 -6.93889e-18 0 +312 0 3.46945e-18 0 +313 -1.73472e-18 0 0 +314 0 -1.04083e-17 0 +315 0 6.93889e-18 0 +316 -2.60209e-18 0 0 +317 0 -1.04083e-17 0 +318 -1.0842e-18 0 0 +319 -8.67362e-19 3.46945e-18 0 +320 0 0 0 +321 -1.73472e-18 0 0 +322 1.51788e-18 -6.93889e-18 0 +323 -1.51788e-18 0 0 +324 0 -6.93889e-18 0 +325 -8.67362e-19 -6.93889e-18 0 +326 8.67362e-19 -6.93889e-18 0 +327 -1.30104e-18 -1.04083e-17 0 +328 0 0 0 +329 -1.73472e-18 0 0 +330 1.73472e-18 -3.46945e-18 0 +331 -1.30104e-18 -6.93889e-18 0 +332 -1.73472e-18 0 0 +333 -1.30104e-18 3.46945e-18 0 +334 1.73472e-18 -6.93889e-18 0 +335 1.73472e-18 -1.04083e-17 0 +336 -1.73472e-18 3.46945e-18 0 +337 2.60209e-18 -3.46945e-18 0 +338 2.1684e-19 -6.93889e-18 0 +339 3.25261e-19 3.46945e-18 0 +340 0 0 0 +341 -1.0842e-19 6.93889e-18 0 +342 -8.67362e-19 0 0 +343 -1.73472e-18 0 0 +344 1.73472e-18 -3.46945e-18 0 +345 8.00446e-19 -6.93889e-18 0 +346 -8.67362e-19 3.46945e-18 0 +347 0 3.46945e-18 0 +348 0 -6.93889e-18 0 +349 -1.30104e-18 3.46945e-18 0 +350 -2.1684e-18 0 0 +351 1.73472e-18 -3.46945e-18 0 +352 -8.67362e-19 3.46945e-18 0 +353 2.1684e-18 -6.93889e-18 0 +354 -2.1684e-18 -3.46945e-18 0 +355 0 -6.93889e-18 0 +356 8.67362e-19 -6.93889e-18 0 +357 4.33681e-19 -6.93889e-18 0 +358 -1.30104e-18 0 0 +359 1.73472e-18 -1.04083e-17 0 +360 1.73472e-18 -6.93889e-18 0 +361 -4.33681e-19 -6.93889e-18 0 +362 2.60209e-18 0 0 +363 3.46945e-18 -6.93889e-18 0 +364 -6.50521e-19 -6.93889e-18 0 +365 1.73472e-18 -1.04083e-17 0 +366 1.73472e-18 -6.93889e-18 0 +367 -1.73472e-18 0 0 +368 -2.1684e-18 0 0 +369 0 0 0 +370 -1.30104e-18 -3.46945e-18 0 +371 2.60209e-18 -3.46945e-18 0 +372 7.58942e-19 -6.93889e-18 0 +373 -6.50521e-19 0 0 +374 0 0 0 +375 2.60209e-18 -6.93889e-18 0 +376 8.67362e-19 -6.93889e-18 0 +377 -6.50521e-19 -1.73472e-18 0 +378 -2.1684e-18 -3.46945e-18 0 +379 -2.71051e-19 3.46945e-18 0 +380 -8.67362e-19 -1.73472e-18 0 +381 -4.33681e-19 0 0 +382 0 1.73472e-18 0 +383 1.73472e-18 -1.04083e-17 0 +384 1.73472e-18 -1.04083e-17 0 +385 -4.33681e-19 0 0 +386 2.60209e-18 -3.46945e-18 0 +387 8.67362e-19 -1.04083e-17 0 +388 0 -6.93889e-18 0 +389 2.38524e-18 -6.93889e-18 0 +390 0 -3.46945e-18 0 +391 1.73472e-18 -1.04083e-17 0 +392 8.67362e-19 -6.93889e-18 0 +393 1.73472e-18 -1.21431e-17 0 +394 -2.60209e-18 -3.46945e-18 0 +395 -2.38524e-18 -1.73472e-18 0 +396 3.46945e-18 -1.04083e-17 0 +397 4.33681e-19 -1.04083e-17 0 +398 3.46945e-18 -6.93889e-18 0 +399 8.67362e-19 -6.93889e-18 0 +400 1.73472e-18 -3.46945e-18 0 +401 2.1684e-18 -8.67362e-18 0 +402 3.46945e-18 -1.04083e-17 0 +403 -3.90313e-18 -3.46945e-18 0 +404 -4.33681e-19 0 0 +405 8.67362e-19 0 0 +406 3.46945e-18 -6.93889e-18 0 +407 8.67362e-19 -8.67362e-18 0 +408 -1.30104e-18 0 0 +409 -1.0842e-18 -3.46945e-18 0 +410 8.67362e-19 -3.46945e-18 0 +411 -1.30104e-18 -3.46945e-18 0 +412 2.60209e-18 -6.93889e-18 0 +413 -9.75782e-19 1.73472e-18 0 +414 1.40946e-18 -6.93889e-18 0 +415 -3.90313e-18 -3.46945e-18 0 +416 -2.1684e-18 -1.73472e-18 0 +417 1.73472e-18 -1.04083e-17 0 +418 1.73472e-18 -1.04083e-17 0 +419 4.33681e-19 -1.04083e-17 0 +420 -8.67362e-19 0 0 +421 0 3.46945e-18 0 +422 5.20417e-18 -1.21431e-17 0 +423 0 0 0 +424 2.60209e-18 -6.93889e-18 0 +425 8.67362e-19 -8.67362e-18 0 +426 2.60209e-18 -3.46945e-18 0 +427 1.73472e-18 -8.67362e-18 0 +428 -8.67362e-19 -3.46945e-18 0 +429 4.33681e-18 -6.93889e-18 0 +430 8.67362e-19 -8.67362e-18 0 +431 2.60209e-18 -1.04083e-17 0 +432 -2.38524e-18 -5.20417e-18 0 +433 -3.46945e-18 -3.46945e-18 0 +434 3.46945e-18 -1.04083e-17 0 +435 2.60209e-18 -1.04083e-17 0 +436 1.0842e-18 -8.67362e-18 0 +437 2.60209e-18 -3.46945e-18 0 +438 2.1684e-18 -1.21431e-17 0 +439 -1.73472e-18 -1.73472e-18 0 +440 -3.46945e-18 -5.20417e-18 0 +441 4.33681e-19 -1.73472e-18 0 +442 5.20417e-18 -1.04083e-17 0 +443 1.46367e-18 -8.67362e-18 0 +444 -2.1684e-18 -3.46945e-18 0 +445 -8.67362e-19 -1.73472e-18 0 +446 -1.19262e-18 3.46945e-18 0 +447 -2.60209e-18 -3.46945e-18 0 +448 -2.38524e-18 -3.46945e-18 0 +449 8.67362e-19 -5.20417e-18 0 +450 4.33681e-18 -8.67362e-18 0 +451 1.73472e-18 -1.04083e-17 0 +452 3.46945e-18 -1.21431e-17 0 +453 -3.46945e-18 -5.20417e-18 0 +454 1.73472e-18 -1.21431e-17 0 +455 1.73472e-18 -1.04083e-17 0 +456 2.60209e-18 -1.21431e-17 0 +457 4.33681e-19 -1.04083e-17 0 +458 -2.1684e-18 -3.46945e-18 0 +459 3.46945e-18 -1.04083e-17 0 +460 1.73472e-18 -1.04083e-17 0 +461 -8.67362e-19 -1.73472e-18 0 +462 3.46945e-18 -8.67362e-18 0 +463 0 3.46945e-18 0 +464 -8.67362e-19 -3.46945e-18 0 +465 4.33681e-18 -6.93889e-18 0 +466 1.95156e-18 -1.04083e-17 0 +467 4.33681e-18 -1.04083e-17 0 +468 1.73472e-18 -8.67362e-18 0 +469 0 -5.20417e-18 0 +470 -3.03577e-18 -5.20417e-18 0 +471 -1.0842e-18 1.73472e-18 0 +472 -3.46945e-18 -3.46945e-18 0 +473 4.33681e-18 -8.67362e-18 0 +474 1.51788e-18 -8.67362e-18 0 +475 -2.38524e-18 -3.46945e-18 0 +476 3.46945e-18 -5.20417e-18 0 +477 2.60209e-18 -1.04083e-17 0 +478 -3.46945e-18 -3.46945e-18 0 +479 -3.90313e-18 -3.46945e-18 0 +480 3.46945e-18 -1.21431e-17 0 +481 3.46945e-18 -1.04083e-17 0 +482 2.00577e-18 -1.04083e-17 0 +483 -8.67362e-19 -3.46945e-18 0 +484 -8.67362e-19 -5.20417e-18 0 +485 -1.30104e-18 5.20417e-18 0 +486 -2.60209e-18 -5.20417e-18 0 +487 4.33681e-18 -1.21431e-17 0 +488 -3.03577e-18 -3.46945e-18 0 +489 2.60209e-18 -1.21431e-17 0 +490 1.73472e-18 -1.21431e-17 0 +491 2.1684e-18 -1.21431e-17 0 +492 1.73472e-18 -6.93889e-18 0 +493 3.46945e-18 -6.93889e-18 0 +494 2.71051e-18 -1.04083e-17 0 +495 2.60209e-18 -1.21431e-17 0 +496 1.73472e-18 -1.21431e-17 0 +497 4.33681e-18 -1.04083e-17 0 +498 -4.33681e-18 -3.46945e-18 0 +499 -3.46945e-18 -5.20417e-18 0 +500 2.60209e-18 -1.04083e-17 0 +501 2.1684e-18 -1.04083e-17 0 +502 -8.67362e-19 -5.20417e-18 0 +503 2.60209e-18 -6.93889e-18 0 +504 4.33681e-18 -8.67362e-18 0 +505 2.1684e-18 -8.67362e-18 0 +506 0 3.46945e-18 0 +507 5.20417e-18 -1.04083e-17 0 +508 2.60209e-18 -1.21431e-17 0 +509 -2.1684e-18 -5.20417e-18 0 +510 -2.71051e-18 1.73472e-18 0 +511 8.67362e-19 -6.93889e-18 0 +512 -4.77049e-18 -5.20417e-18 0 +513 -3.90313e-18 -3.46945e-18 0 +514 3.46945e-18 -6.93889e-18 0 +515 -3.90313e-18 -1.73472e-18 0 +516 1.6263e-18 -1.04083e-17 0 +517 1.73472e-18 -8.67362e-18 0 +518 3.46945e-18 -1.04083e-17 0 +519 -3.90313e-18 -1.73472e-18 0 +520 2.60209e-18 -8.67362e-18 0 +521 2.13452e-18 -8.67362e-18 0 +522 -4.77049e-18 -3.46945e-18 0 +523 3.46945e-18 -1.04083e-17 0 +524 -1.46367e-18 3.46945e-18 0 +525 -2.60209e-18 -3.46945e-18 0 +526 0 -6.93889e-18 0 +527 8.67362e-19 -1.21431e-17 0 +528 1.73472e-18 -1.21431e-17 0 +529 -4.33681e-18 -1.73472e-18 0 +530 -3.90313e-18 -3.46945e-18 0 +531 8.67362e-19 -1.21431e-17 0 +532 1.30104e-18 -1.21431e-17 0 +533 4.33681e-18 -1.04083e-17 0 +534 1.73472e-18 -1.21431e-17 0 +535 1.73472e-18 -1.21431e-17 0 +536 1.73472e-18 -6.93889e-18 0 +537 3.25261e-18 -1.04083e-17 0 +538 -8.67362e-19 -6.93889e-18 0 +539 -4.33681e-18 -5.20417e-18 0 +540 1.73472e-18 -1.04083e-17 0 +541 2.1684e-18 -1.04083e-17 0 +542 -5.20417e-18 -5.20417e-18 0 +543 6.07153e-18 -1.04083e-17 0 +544 2.60209e-18 -8.67362e-18 0 +545 2.1684e-18 -1.04083e-17 0 +546 1.73472e-18 -5.20417e-18 0 +547 -2.71051e-18 3.46945e-18 0 +548 3.03577e-18 -8.67362e-18 0 +549 -2.60209e-18 -5.20417e-18 0 +550 0 5.20417e-18 0 +551 6.07153e-18 -1.04083e-17 0 +552 -4.33681e-18 -5.20417e-18 0 +553 -6.50521e-18 -5.20417e-18 0 +554 0 -5.20417e-18 0 +555 -3.46945e-18 0 0 +556 1.73472e-18 -6.93889e-18 0 +557 1.95156e-18 -1.04083e-17 0 +558 -4.77049e-18 -5.20417e-18 0 +559 -5.20417e-18 0 0 +560 -8.67362e-19 -6.93889e-18 0 +561 3.46945e-18 -1.04083e-17 0 +562 8.67362e-19 -8.67362e-18 0 +563 2.33103e-18 -8.67362e-18 0 +564 1.73472e-18 -1.21431e-17 0 +565 -5.20417e-18 -5.20417e-18 0 +566 8.67362e-19 -1.21431e-17 0 +567 1.30104e-18 -1.21431e-17 0 +568 -1.78893e-18 3.46945e-18 0 +569 8.67362e-19 -1.38778e-17 0 +570 8.67362e-19 -1.04083e-17 0 +571 3.46945e-18 -8.67362e-18 0 +572 -3.46945e-18 -3.46945e-18 0 +573 -5.20417e-18 -1.73472e-18 0 +574 -2.60209e-18 -6.93889e-18 0 +575 -4.33681e-18 -5.20417e-18 0 +576 1.73472e-18 -1.38778e-17 0 +577 1.30104e-18 -1.04083e-17 0 +578 1.73472e-18 -6.93889e-18 0 +579 3.03577e-18 -1.04083e-17 0 +580 4.33681e-18 -8.67362e-18 0 +581 -8.67362e-19 -5.20417e-18 0 +582 8.67362e-19 -1.21431e-17 0 +583 2.1684e-18 -1.04083e-17 0 +584 -4.77049e-18 -5.20417e-18 0 +585 -5.20417e-18 -3.46945e-18 0 +586 -3.03577e-18 3.46945e-18 0 +587 6.07153e-18 -8.67362e-18 0 +588 1.73472e-18 -8.67362e-18 0 +589 2.1684e-18 -8.67362e-18 0 +590 -3.25261e-18 2.60209e-18 0 +591 -8.67362e-19 -6.93889e-18 0 +592 3.46945e-18 -8.67362e-18 0 +593 -3.46945e-18 -5.20417e-18 0 +594 0 4.33681e-18 0 +595 6.93889e-18 -8.67362e-18 0 +596 -4.33681e-18 -3.46945e-18 0 +597 -4.11997e-18 1.73472e-18 0 +598 -5.20417e-18 -7.80626e-18 0 +599 -1.73472e-18 -5.20417e-18 0 +600 8.67362e-19 -8.67362e-18 0 +601 2.27682e-18 -8.67362e-18 0 +602 -5.20417e-18 -1.73472e-18 0 +603 -4.11997e-18 8.67362e-19 0 +604 1.73472e-18 -1.38778e-17 0 +605 2.60209e-18 -1.38778e-17 0 +606 -7.86047e-19 3.46945e-18 0 +607 -2.60209e-18 -6.93889e-18 0 +608 8.67362e-19 -1.21431e-17 0 +609 1.73472e-18 -1.21431e-17 0 +610 3.90313e-18 -9.54098e-18 0 +611 0 -6.93889e-18 0 +612 2.54788e-18 -8.67362e-18 0 +613 8.67362e-19 -1.21431e-17 0 +614 2.1684e-18 -1.21431e-17 0 +615 -6.07153e-18 -6.93889e-18 0 +616 4.33681e-18 -8.67362e-18 0 +617 -4.98733e-18 -8.67362e-19 0 +618 -3.90313e-18 -3.46945e-18 0 +619 8.67362e-19 -1.38778e-17 0 +620 2.1684e-18 -1.04083e-17 0 +621 -3.46945e-18 -5.20417e-18 0 +622 -5.20417e-18 -3.46945e-18 0 +623 -1.6263e-18 2.60209e-18 0 +624 -1.73472e-18 -5.20417e-18 0 +625 2.81893e-18 -9.54098e-18 0 +626 1.73472e-18 -1.04083e-17 0 +627 2.81893e-18 -1.04083e-17 0 +628 -4.33681e-18 -5.20417e-18 0 +629 -2.05998e-18 4.33681e-18 0 +630 -4.55365e-18 -6.07153e-18 0 +631 -5.20417e-18 -5.20417e-18 0 +632 1.73472e-18 -1.04083e-17 0 +633 2.60209e-18 -8.67362e-18 0 +634 -1.6263e-18 1.73472e-18 0 +635 5.20417e-18 -6.93889e-18 0 +636 -4.33681e-18 -5.20417e-18 0 +637 3.46945e-18 -8.67362e-18 0 +638 -3.03577e-18 -3.46945e-18 0 +639 0 2.60209e-18 0 +640 7.80626e-18 -7.80626e-18 0 +641 -2.27682e-18 2.60209e-18 0 +642 -3.90313e-18 -2.60209e-18 0 +643 6.07153e-18 -6.93889e-18 0 +644 -4.98733e-18 -5.20417e-18 0 +645 0 -6.93889e-18 0 +646 2.43945e-18 -8.67362e-18 0 +647 -4.33681e-18 -3.46945e-18 0 +648 1.73472e-18 -1.38778e-17 0 +649 -3.90313e-18 -2.60209e-18 0 +650 8.67362e-19 -1.21431e-17 0 +651 2.1684e-18 -1.21431e-17 0 +652 -8.67362e-19 -1.21431e-17 0 +653 2.60209e-18 -1.21431e-17 0 +654 -1.0842e-18 8.67362e-19 0 +655 -5.20417e-18 -3.46945e-18 0 +656 2.71051e-20 2.60209e-18 0 +657 0 -1.21431e-17 0 +658 2.60209e-18 -1.04083e-17 0 +659 4.33681e-18 -6.93889e-18 0 +660 -3.46945e-18 -5.20417e-18 0 +661 2.81893e-18 -8.67362e-18 0 +662 -4.55365e-18 -5.20417e-18 0 +663 8.67362e-19 -1.21431e-17 0 +664 2.60209e-18 -9.54098e-18 0 +665 -1.51788e-18 0 0 +666 -3.46945e-18 -2.60209e-18 0 +667 -1.73472e-18 2.60209e-18 0 +668 -3.46945e-18 -5.20417e-18 0 +669 -3.03577e-18 -4.33681e-18 0 +670 8.67362e-19 -1.04083e-17 0 +671 2.60209e-18 -8.67362e-18 0 +672 -1.24683e-18 2.60209e-18 0 +673 -5.20417e-18 -3.46945e-18 0 +674 3.68629e-18 -6.93889e-18 0 +675 -5.20417e-18 -5.20417e-18 0 +676 5.20417e-18 -6.07153e-18 0 +677 -1.95156e-18 -5.20417e-18 0 +678 -4.77049e-18 -4.33681e-18 0 +679 -1.0842e-18 1.73472e-18 0 +680 -8.67362e-19 -8.67362e-18 0 +681 2.38524e-18 -8.67362e-18 0 +682 -6.07153e-18 -5.20417e-18 0 +683 3.90313e-18 -6.07153e-18 0 +684 -1.0842e-19 8.67362e-19 0 +685 -3.46945e-18 -3.46945e-18 0 +686 0 -1.21431e-17 0 +687 8.67362e-19 -1.21431e-17 0 +688 0 8.67362e-19 0 +689 8.67362e-18 -4.33681e-18 0 +690 -3.46945e-18 -1.73472e-18 0 +691 -4.33681e-18 -6.93889e-18 0 +692 2.60209e-18 -6.93889e-18 0 +693 -2.38524e-18 -6.07153e-18 0 +694 6.07153e-18 -5.20417e-18 0 +695 0 -1.21431e-17 0 +696 2.1684e-18 -1.21431e-17 0 +697 -3.46945e-18 -3.46945e-18 0 +698 5.20417e-18 -5.20417e-18 0 +699 0 -1.21431e-17 0 +700 1.73472e-18 -1.04083e-17 0 +701 -2.60209e-18 -3.46945e-18 0 +702 -5.96311e-19 1.73472e-18 0 +703 -2.1684e-19 8.67362e-19 0 +704 8.67362e-19 -1.21431e-17 0 +705 2.1684e-18 -9.54098e-18 0 +706 -5.20417e-18 -1.73472e-18 0 +707 -6.07153e-18 -5.20417e-18 0 +708 3.52366e-18 -6.93889e-18 0 +709 4.33681e-18 -4.33681e-18 0 +710 -8.67362e-19 -1.04083e-17 0 +711 2.60209e-18 -8.67362e-18 0 +712 -3.25261e-18 -3.46945e-18 0 +713 1.0842e-19 3.03577e-18 0 +714 1.51788e-18 -2.60209e-18 0 +715 -2.60209e-18 -1.73472e-18 0 +716 -6.50521e-19 1.73472e-18 0 +717 -3.46945e-18 -2.60209e-18 0 +718 -8.67362e-19 -1.04083e-17 0 +719 2.60209e-18 -6.93889e-18 0 +720 -3.46945e-18 -1.73472e-18 0 +721 -5.20417e-18 -4.33681e-18 0 +722 3.90313e-18 -5.20417e-18 0 +723 -5.20417e-18 -1.73472e-18 0 +724 5.20417e-18 -4.33681e-18 0 +725 1.30104e-18 -3.46945e-18 0 +726 -4.87891e-19 0 0 +727 -3.03577e-18 -3.46945e-18 0 +728 -1.73472e-18 -1.04083e-17 0 +729 2.49366e-18 -5.20417e-18 0 +730 0 -1.04083e-17 0 +731 -8.67362e-19 -1.04083e-17 0 +732 0 -9.54098e-18 0 +733 9.75782e-19 0 0 +734 -5.20417e-18 -2.60209e-18 0 +735 3.90313e-18 -3.46945e-18 0 +736 -8.67362e-19 -1.04083e-17 0 +737 1.30104e-18 -1.04083e-17 0 +738 -4.33681e-18 -8.67362e-18 0 +739 2.84603e-18 -3.46945e-18 0 +740 -3.03577e-18 -1.73472e-18 0 +741 8.67362e-18 -3.46945e-18 0 +742 0 1.51788e-18 0 +743 -6.50521e-19 -2.1684e-18 0 +744 -3.03577e-18 0 0 +745 0 -1.12757e-17 0 +746 1.73472e-18 -8.67362e-18 0 +747 -6.84403e-19 2.1684e-19 0 +748 7.80626e-18 -3.46945e-18 0 +749 -4.33681e-18 -8.67362e-19 0 +750 6.07153e-18 -3.46945e-18 0 +751 2.38524e-18 -8.67362e-19 0 +752 -3.03577e-18 -8.67362e-19 0 +753 0 -1.04083e-17 0 +754 1.73472e-18 -6.07153e-18 0 +755 -9.75782e-19 1.30104e-18 0 +756 -4.33681e-18 -6.93889e-18 0 +757 3.46945e-18 -3.46945e-18 0 +758 -4.33681e-18 -8.67362e-19 0 +759 4.33681e-18 -3.46945e-18 0 +760 0 -1.04083e-17 0 +761 1.95156e-18 -6.07153e-18 0 +762 4.60786e-19 1.73472e-18 0 +763 -2.1684e-18 -2.1684e-18 0 +764 3.25261e-18 -1.30104e-18 0 +765 -8.67362e-19 -1.12757e-17 0 +766 2.81893e-18 -4.33681e-18 0 +767 -5.42101e-19 1.51788e-18 0 +768 -2.60209e-18 0 0 +769 -2.60209e-18 8.67362e-19 0 +770 -1.30104e-18 8.67362e-19 0 +771 -3.46945e-18 -5.20417e-18 0 +772 3.90313e-18 -2.60209e-18 0 +773 5.42101e-20 -2.1684e-19 0 +774 -4.33681e-18 -8.67362e-19 0 +775 2.38524e-18 -1.30104e-18 0 +776 5.63785e-18 -2.60209e-18 0 +777 -8.67362e-19 -8.67362e-18 0 +778 2.49366e-18 -3.46945e-18 0 +779 -4.33681e-19 -1.30104e-18 0 +780 -8.67362e-19 -1.04083e-17 0 +781 0 -9.54098e-18 0 +782 -8.67362e-19 -8.67362e-18 0 +783 -1.30104e-18 -7.80626e-18 0 +784 0 -9.54098e-18 0 +785 4.33681e-19 -5.20417e-18 0 +786 6.50521e-19 -1.0842e-18 0 +787 -3.46945e-18 -3.46945e-18 0 +788 4.11997e-18 -3.46945e-18 0 +789 0 -9.54098e-18 0 +790 1.30104e-18 -4.33681e-18 0 +791 -3.46945e-18 -9.54098e-18 0 +792 3.04254e-18 -1.73472e-18 0 +793 2.38524e-18 -1.30104e-18 0 +794 -2.1684e-18 8.67362e-19 0 +795 0 0 0 +796 7.80626e-18 -3.46945e-18 0 +797 -4.33681e-19 8.67362e-19 0 +798 0 0 0 +799 6.93889e-18 -2.60209e-18 0 +800 0 -1.04083e-17 0 +801 1.30104e-18 -3.46945e-18 0 +802 0 0 0 +803 -2.60209e-18 1.73472e-18 0 +804 5.96311e-19 -2.1684e-19 0 +805 6.07153e-18 -1.73472e-18 0 +806 2.1684e-19 0 0 +807 0 0 0 +808 -2.60209e-18 -6.07153e-18 0 +809 0 -1.04083e-17 0 +810 1.51788e-18 -2.60209e-18 0 +811 3.36103e-18 -1.73472e-18 0 +812 -3.46945e-18 -8.67362e-19 0 +813 0 0 0 +814 4.77049e-18 -2.60209e-18 0 +815 2.81893e-18 -2.1684e-18 0 +816 2.00577e-18 2.1684e-19 0 +817 0 0 0 +818 0 -1.04083e-17 0 +819 2.38524e-18 -8.67362e-19 0 +820 0 2.1684e-18 0 +821 -4.33681e-19 0 0 +822 -2.60209e-18 -5.20417e-18 0 +823 3.68629e-18 -3.46945e-18 0 +824 4.33681e-19 1.30104e-18 0 +825 0 -8.67362e-18 0 +826 0 0 0 +827 -8.67362e-19 -1.12757e-17 0 +828 -8.67362e-19 -7.80626e-18 0 +829 1.51788e-18 -6.50521e-19 0 +830 -1.73472e-18 2.60209e-18 0 +831 -1.73472e-18 -8.67362e-18 0 +832 8.67362e-19 -1.04083e-17 0 +833 -8.67362e-19 -5.20417e-18 0 +834 2.27682e-18 0 0 +835 5.20417e-18 -2.60209e-18 0 +836 8.67362e-19 -4.33681e-19 0 +837 8.67362e-19 -9.54098e-18 0 +838 4.33681e-19 -2.60209e-18 0 +839 0 0 0 +840 0 -1.04083e-17 0 +841 8.67362e-19 -8.67362e-19 0 +842 -3.03577e-18 -3.46945e-18 0 +843 4.33681e-18 -2.1684e-18 0 +844 -1.73472e-18 -8.67362e-18 0 +845 2.50722e-18 -8.67362e-19 0 +846 1.30104e-18 -1.30104e-18 0 +847 8.67362e-19 4.33681e-19 0 +848 0 -1.12757e-17 0 +849 8.67362e-19 0 0 +850 8.67362e-18 -1.73472e-18 0 +851 1.73472e-18 1.30104e-18 0 +852 6.93889e-18 -1.30104e-18 0 +853 0 0 0 +854 4.33681e-19 8.67362e-19 0 +855 6.50521e-18 -1.30104e-18 0 +856 -1.0842e-18 0 0 +857 0 -9.54098e-18 0 +858 8.67362e-19 8.67362e-19 0 +859 -8.67362e-19 -6.07153e-18 0 +860 2.81893e-18 -1.30104e-18 0 +861 -8.67362e-19 -8.67362e-19 0 +862 4.77049e-18 -1.73472e-18 0 +863 0 0 0 +864 7.58942e-19 0 0 +865 -8.67362e-19 -9.54098e-18 0 +866 2.1684e-18 1.73472e-18 0 +867 0 -9.54098e-18 0 +868 -8.67362e-19 -6.93889e-18 0 +869 2.38524e-18 0 0 +870 1.73472e-18 -9.54098e-18 0 +871 -1.30104e-18 -5.20417e-18 0 +872 2.1684e-18 -8.67362e-19 0 +873 -8.67362e-19 -6.07153e-18 0 +874 3.25261e-18 -1.30104e-18 0 +875 4.33681e-19 4.33681e-19 0 +876 1.73472e-18 -9.54098e-18 0 +877 -8.67362e-19 -1.73472e-18 0 +878 -8.67362e-19 -9.54098e-18 0 +879 1.89735e-18 1.73472e-18 0 +880 0 0 0 +881 3.46945e-18 -8.67362e-19 0 +882 1.73472e-18 -9.54098e-18 0 +883 4.33681e-19 0 0 +884 5.63785e-18 -8.67362e-19 0 +885 8.67362e-19 6.50521e-19 0 +886 8.67362e-19 -1.04083e-17 0 +887 1.30104e-18 8.67362e-19 0 +888 8.67362e-19 -6.07153e-18 0 +889 4.33681e-18 -4.33681e-19 0 +890 0 -6.93889e-18 0 +891 1.61275e-18 1.30104e-18 0 +892 0 -1.04083e-17 0 +893 8.67362e-19 1.73472e-18 0 +894 0 0 0 +895 4.98733e-18 -1.73472e-18 0 +896 8.67362e-18 4.33681e-19 0 +897 2.81893e-18 -2.1684e-19 0 +898 6.93889e-18 4.33681e-19 0 +899 4.77049e-18 -1.30104e-18 0 +900 6.50521e-18 4.33681e-19 0 +901 -6.50521e-19 -4.33681e-19 0 +902 0 -1.04083e-17 0 +903 1.0842e-18 2.1684e-18 0 +904 1.73472e-18 -6.07153e-18 0 +905 2.05998e-18 8.67362e-19 0 +906 4.77049e-18 -3.46945e-18 0 +907 4.77049e-18 4.33681e-19 0 +908 0 0 0 +909 0 -6.07153e-18 0 +910 0 -1.12757e-17 0 +911 8.67362e-19 -6.93889e-18 0 +912 -4.33681e-19 -3.46945e-18 0 +913 1.30104e-18 1.73472e-18 0 +914 8.67362e-19 -6.93889e-18 0 +915 -1.30104e-18 -8.67362e-19 0 +916 8.67362e-19 -8.67362e-18 0 +917 -4.33681e-19 2.60209e-18 0 +918 3.68629e-18 -1.73472e-18 0 +919 3.03577e-18 -5.20417e-18 0 +920 3.25261e-18 8.67362e-19 0 +921 3.90313e-18 -1.30104e-18 0 +922 1.0842e-19 -2.1684e-19 0 +923 1.73472e-18 -7.80626e-18 0 +924 0 3.46945e-18 0 +925 4.33681e-19 -8.67362e-18 0 +926 1.51788e-18 2.1684e-18 0 +927 4.77049e-18 -2.60209e-18 0 +928 5.63785e-18 8.67362e-19 0 +929 0 0 0 +930 1.73472e-18 -7.80626e-18 0 +931 8.67362e-19 3.03577e-18 0 +932 3.46945e-18 -6.07153e-18 0 +933 3.03577e-18 -6.07153e-18 0 +934 1.6263e-18 2.1684e-18 0 +935 4.33681e-18 1.30104e-18 0 +936 0 -1.04083e-17 0 +937 8.67362e-19 3.03577e-18 0 +938 3.90313e-18 -6.50521e-19 0 +939 7.80626e-18 2.1684e-18 0 +940 2.27682e-18 -6.50521e-19 0 +941 6.50521e-18 1.73472e-18 0 +942 4.77049e-18 -1.73472e-18 0 +943 8.67362e-19 -1.04083e-17 0 +944 8.67362e-19 3.03577e-18 0 +945 6.07153e-18 1.73472e-18 0 +946 0 0 0 +947 4.33681e-18 -4.33681e-18 0 +948 2.38524e-18 2.60209e-18 0 +949 0 -3.46945e-18 0 +950 -8.67362e-19 -2.60209e-18 0 +951 8.67362e-19 -3.46945e-18 0 +952 -1.30104e-18 -8.67362e-19 0 +953 5.63785e-18 -5.20417e-18 0 +954 4.77049e-18 2.1684e-18 0 +955 8.67362e-19 -4.33681e-18 0 +956 0 8.67362e-19 0 +957 0 -1.04083e-17 0 +958 1.19262e-18 3.90313e-18 0 +959 8.67362e-19 -6.07153e-18 0 +960 0 2.1684e-18 0 +961 2.1684e-18 -2.1684e-19 0 +962 5.20417e-18 -4.77049e-18 0 +963 0 -6.93889e-18 0 +964 -4.33681e-19 3.03577e-18 0 +965 3.03577e-18 2.60209e-18 0 +966 4.33681e-18 -1.95156e-18 0 +967 0 0 0 +968 2.1684e-18 -6.93889e-18 0 +969 7.58942e-19 3.03577e-18 0 +970 5.20417e-18 -3.90313e-18 0 +971 8.67362e-19 -6.93889e-18 0 +972 4.33681e-19 3.46945e-18 0 +973 5.63785e-18 3.03577e-18 0 +974 1.30104e-18 -7.80626e-18 0 +975 2.1684e-19 3.46945e-18 0 +976 4.77049e-18 -3.46945e-18 0 +977 1.5992e-18 3.90313e-18 0 +978 5.63785e-18 -6.93889e-18 0 +979 4.11997e-18 3.03577e-18 0 +980 2.71051e-18 -7.58942e-19 0 +981 7.80626e-18 3.03577e-18 0 +982 0 0 0 +983 6.93889e-18 3.46945e-18 0 +984 4.33681e-19 -1.0842e-17 0 +985 4.33681e-19 3.46945e-18 0 +986 0 -8.67362e-19 0 +987 4.77049e-18 -2.38524e-18 0 +988 0 -8.67362e-19 0 +989 -4.33681e-19 0 0 +990 5.63785e-18 3.90313e-18 0 +991 0 -8.67362e-19 0 +992 0 1.30104e-18 0 +993 6.50521e-18 -3.03577e-18 0 +994 2.38524e-18 3.90313e-18 0 +995 8.67362e-19 -1.30104e-18 0 +996 0 3.03577e-18 0 +997 6.93889e-18 -4.77049e-18 0 +998 4.77049e-18 3.90313e-18 0 +999 1.73472e-18 -8.23994e-18 0 +1000 1.19262e-18 3.90313e-18 0 +1001 1.73472e-18 -3.90313e-18 0 +1002 -8.67362e-19 3.46945e-18 0 +1003 2.1684e-18 -6.93889e-18 0 +1004 -8.67362e-19 3.90313e-18 0 +1005 6.93889e-18 -3.03577e-18 0 +1006 0 0 0 +1007 2.81893e-18 3.90313e-18 0 +1008 3.46945e-18 -7.58942e-19 0 +1009 5.20417e-18 -6.50521e-18 0 +1010 1.19262e-18 4.33681e-18 0 +1011 1.73472e-18 -6.50521e-18 0 +1012 -2.1684e-19 3.90313e-18 0 +1013 5.20417e-18 -4.33681e-18 0 +1014 4.77049e-18 4.33681e-18 0 +1015 1.30104e-18 -6.50521e-18 0 +1016 4.33681e-19 3.03577e-18 0 +1017 8.23994e-18 -4.33681e-18 0 +1018 1.65341e-18 4.33681e-18 0 +1019 6.93889e-18 -3.90313e-18 0 +1020 3.90313e-18 4.55365e-18 0 +1021 4.33681e-19 8.67362e-19 0 +1022 0 0 0 +1023 -4.33681e-19 -4.33681e-19 0 +1024 4.33681e-19 1.30104e-18 0 +1025 1.30104e-18 -9.54098e-18 0 +1026 1.0842e-18 4.33681e-18 0 +1027 0 0 0 +1028 7.37257e-18 4.11997e-18 0 +1029 8.67362e-19 -1.73472e-18 0 +1030 8.67362e-19 3.46945e-18 0 +1031 6.50521e-18 4.55365e-18 0 +1032 2.81893e-18 -1.30104e-18 0 +1033 5.20417e-18 4.98733e-18 0 +1034 1.73472e-18 -4.33681e-19 0 +1035 0 3.46945e-18 0 +1036 9.1073e-18 -3.03577e-18 0 +1037 2.38524e-18 5.20417e-18 0 +1038 2.60209e-18 -2.60209e-18 0 +1039 -8.67362e-19 2.60209e-18 0 +1040 6.07153e-18 -3.90313e-18 0 +1041 4.33681e-18 -8.23994e-18 0 +1042 1.30104e-18 4.77049e-18 0 +1043 4.11997e-18 5.42101e-18 0 +1044 2.1684e-18 -4.33681e-18 0 +1045 0 3.46945e-18 0 +1046 8.67362e-18 -2.81893e-18 0 +1047 2.81893e-18 5.42101e-18 0 +1048 8.67362e-18 -7.37257e-18 0 +1049 1.24683e-18 5.20417e-18 0 +1050 0 0 0 +1051 1.73472e-18 -4.77049e-18 0 +1052 2.1684e-19 3.46945e-18 0 +1053 1.84314e-18 -2.1684e-18 0 +1054 4.33681e-18 5.85469e-18 0 +1055 1.30104e-18 -6.50521e-18 0 +1056 1.0842e-18 3.90313e-18 0 +1057 1.17094e-17 -4.33681e-18 0 +1058 1.30104e-18 -1.30104e-18 0 +1059 1.49078e-18 6.50521e-18 0 +1060 8.67362e-19 -2.1684e-18 0 +1061 1.30104e-18 8.67362e-19 0 +1062 6.07153e-18 -2.60209e-18 0 +1063 3.46945e-18 6.07153e-18 0 +1064 1.73472e-18 -1.73472e-18 0 +1065 1.73472e-18 3.03577e-18 0 +1066 2.1684e-18 -1.73472e-18 0 +1067 1.30104e-18 1.73472e-18 0 +1068 3.46945e-18 -6.93889e-18 0 +1069 1.30104e-18 5.63785e-18 0 +1070 6.50521e-18 5.42101e-18 0 +1071 3.03577e-18 0 0 +1072 0 4.33681e-19 0 +1073 5.20417e-18 5.85469e-18 0 +1074 0 0 0 +1075 4.77049e-18 5.85469e-18 0 +1076 9.75782e-18 -4.33681e-18 0 +1077 1.84314e-18 6.07153e-18 0 +1078 2.60209e-18 -1.73472e-18 0 +1079 0 1.73472e-18 0 +1080 6.93889e-18 -5.63785e-18 0 +1081 1.19262e-18 6.50521e-18 0 +1082 2.38524e-18 -1.6263e-18 0 +1083 3.68629e-18 6.72205e-18 0 +1084 2.60209e-18 -3.90313e-18 0 +1085 1.0842e-18 3.03577e-18 0 +1086 7.15573e-18 -3.25261e-18 0 +1087 2.60209e-18 6.93889e-18 0 +1088 9.97466e-18 -3.90313e-18 0 +1089 3.46945e-18 -5.63785e-18 0 +1090 1.0842e-18 4.11997e-18 0 +1091 1.27394e-18 6.28837e-18 0 +1092 0 0 0 +1093 3.90313e-18 6.72205e-18 0 +1094 3.03577e-18 -2.60209e-18 0 +1095 2.60209e-18 -4.33681e-19 0 +1096 4.77049e-18 -7.37257e-18 0 +1097 1.51788e-18 5.20417e-18 0 +1098 2.60209e-18 -3.90313e-18 0 +1099 2.60209e-18 -4.33681e-19 0 +1100 2.60209e-18 -3.90313e-18 0 +1101 3.03577e-18 4.33681e-19 0 +1102 1.10589e-17 -3.90313e-18 0 +1103 1.0571e-18 6.50521e-18 0 +1104 2.71051e-18 -1.6263e-18 0 +1105 3.03577e-18 -2.60209e-18 0 +1106 1.73472e-18 0 0 +1107 3.03577e-18 7.37257e-18 0 +1108 6.07153e-18 -7.37257e-18 0 +1109 1.19262e-18 5.85469e-18 0 +1110 3.90313e-18 -8.67362e-19 0 +1111 8.67362e-19 4.33681e-19 0 +1112 5.63785e-18 6.72205e-18 0 +1113 5.20417e-18 6.72205e-18 0 +1114 3.03577e-18 -1.30104e-18 0 +1115 1.30104e-18 2.81893e-18 0 +1116 4.33681e-18 6.72205e-18 0 +1117 6.28837e-18 -5.20417e-18 0 +1118 1.73472e-18 7.80626e-18 0 +1119 9.97466e-18 -6.50521e-18 0 +1120 1.19262e-18 6.50521e-18 0 +1121 0 0 0 +1122 3.25261e-18 7.58942e-18 0 +1123 3.90313e-18 -3.90313e-18 0 +1124 1.95156e-18 4.77049e-18 0 +1125 4.77049e-18 -5.63785e-18 0 +1126 1.51788e-18 4.98733e-18 0 +1127 2.1684e-18 -1.6263e-18 0 +1128 9.75782e-18 -4.77049e-18 0 +1129 7.72494e-19 6.93889e-18 0 +1130 2.27682e-18 7.80626e-18 0 +1131 4.33681e-18 -2.1684e-18 0 +1132 2.60209e-18 -3.03577e-18 0 +1133 3.03577e-18 -2.1684e-18 0 +1134 2.1684e-18 -3.46945e-18 0 +1135 3.46945e-18 -4.33681e-19 0 +1136 5.20417e-18 -6.07153e-18 0 +1137 1.30104e-18 4.77049e-18 0 +1138 3.90313e-18 7.37257e-18 0 +1139 3.90313e-18 -3.90313e-18 0 +1140 3.46945e-18 -1.30104e-18 0 +1141 3.46945e-18 -4.33681e-18 0 +1142 1.73472e-18 -6.50521e-19 0 +1143 7.37257e-18 -3.68629e-18 0 +1144 6.77626e-19 7.58942e-18 0 +1145 0 0 0 +1146 2.38524e-18 7.58942e-18 0 +1147 3.90313e-18 -2.1684e-18 0 +1148 2.1684e-18 1.95156e-18 0 +1149 6.50521e-18 -5.42101e-18 0 +1150 1.6263e-18 5.63785e-18 0 +1151 3.46945e-18 -3.90313e-18 0 +1152 2.81893e-18 4.55365e-18 0 +1153 4.77049e-18 7.15573e-18 0 +1154 4.33681e-18 7.26415e-18 0 +1155 1.95156e-18 -3.57787e-18 0 +1156 3.90313e-18 7.37257e-18 0 +1157 1.19262e-18 7.91468e-18 0 +1158 7.37257e-18 -3.90313e-18 0 +1159 1.57209e-18 6.50521e-18 0 +1160 3.90313e-18 -4.77049e-18 0 +1161 2.60209e-18 4.98733e-18 0 +1162 2.81893e-18 7.91468e-18 0 +1163 4.77049e-18 -4.33681e-18 0 +1164 2.1684e-18 4.55365e-18 0 +1165 2.1684e-18 -3.90313e-18 0 +1166 3.03577e-18 -8.67362e-19 0 +1167 5.20417e-18 -2.92735e-18 0 +1168 2.60209e-18 -5.20417e-18 0 +1169 3.03577e-18 8.67362e-19 0 +1170 9.35124e-19 7.48099e-18 0 +1171 0 0 0 +1172 1.51788e-18 8.23994e-18 0 +1173 2.60209e-18 -3.46945e-18 0 +1174 3.46945e-18 6.50521e-19 0 +1175 3.46945e-18 -2.1684e-18 0 +1176 2.60209e-18 -8.67362e-19 0 +1177 4.77049e-18 -4.98733e-18 0 +1178 1.73472e-18 4.77049e-18 0 +1179 3.03577e-18 7.80626e-18 0 +1180 3.03577e-18 -2.60209e-18 0 +1181 2.60209e-18 8.67362e-19 0 +1182 3.36103e-18 -1.84314e-18 0 +1183 7.04731e-19 7.69784e-18 0 +1184 2.60209e-18 -3.03577e-18 0 +1185 2.60209e-18 3.46945e-18 0 +1186 1.73472e-18 8.13152e-18 0 +1187 5.85469e-18 -3.68629e-18 0 +1188 2.27682e-18 5.63785e-18 0 +1189 2.1684e-18 -2.81893e-18 0 +1190 3.46945e-18 5.20417e-18 0 +1191 3.90313e-18 7.48099e-18 0 +1192 3.90313e-18 7.80626e-18 0 +1193 0 0 0 +1194 8.67362e-19 8.0231e-18 0 +1195 3.03577e-18 7.80626e-18 0 +1196 5.42101e-18 -2.49366e-18 0 +1197 2.27682e-18 6.72205e-18 0 +1198 3.03577e-18 -2.81893e-18 0 +1199 2.60209e-18 5.85469e-18 0 +1200 2.38524e-18 7.91468e-18 0 +1201 2.60209e-18 4.33681e-19 0 +1202 1.73472e-18 -2.1684e-18 0 +1203 3.46945e-18 6.50521e-19 0 +1204 2.1684e-18 -3.46945e-18 0 +1205 3.03577e-18 8.67362e-19 0 +1206 3.46945e-18 -1.30104e-18 0 +1207 2.1684e-18 6.07153e-18 0 +1208 2.1684e-18 -2.1684e-18 0 +1209 2.1684e-18 -2.1684e-19 0 +1210 2.60209e-18 -2.1684e-18 0 +1211 1.24683e-18 7.04731e-18 0 +1212 1.0842e-18 8.23994e-18 0 +1213 2.60209e-18 0 0 +1214 2.1684e-18 6.50521e-19 0 +1215 4.11997e-18 -3.03577e-18 0 +1216 1.73472e-18 6.39679e-18 0 +1217 1.30104e-18 -1.0842e-18 0 +1218 2.60209e-18 2.1684e-18 0 +1219 2.60209e-18 8.0231e-18 0 +1220 0 0 0 +1221 0 -6.50521e-19 0 +1222 3.25261e-18 4.33681e-18 0 +1223 5.96311e-19 7.15573e-18 0 +1224 3.46945e-18 -1.73472e-18 0 +1225 2.1684e-18 7.15573e-18 0 +1226 1.73472e-18 7.91468e-18 0 +1227 1.73472e-18 -1.0842e-18 0 +1228 3.46945e-18 6.07153e-18 0 +1229 3.03577e-18 7.80626e-18 0 +1230 3.46945e-18 8.0231e-18 0 +1231 8.67362e-19 7.20994e-18 0 +1232 3.68629e-18 -1.51788e-18 0 +1233 3.03577e-18 8.78204e-18 0 +1234 1.95156e-18 -3.79471e-19 0 +1235 2.60209e-18 8.13152e-18 0 +1236 1.6263e-18 7.69784e-18 0 +1237 2.1684e-18 -2.1684e-18 0 +1238 2.1684e-18 -1.30104e-18 0 +1239 1.73472e-18 -2.81893e-18 0 +1240 3.90313e-18 -1.0842e-18 0 +1241 2.1684e-18 -2.1684e-19 0 +1242 3.46945e-18 -1.0842e-18 0 +1243 1.95156e-18 8.0231e-18 0 +1244 2.60209e-18 -1.84314e-18 0 +1245 2.1684e-18 -4.33681e-19 0 +1246 3.46945e-18 -1.30104e-18 0 +1247 1.51788e-18 8.5652e-18 0 +1248 0 0 0 +1249 1.30104e-18 4.33681e-19 0 +1250 3.46945e-18 8.67362e-19 0 +1251 8.7075e-19 7.04731e-18 0 +1252 8.67362e-19 7.04731e-18 0 +1253 8.67362e-19 0 0 +1254 4.11997e-18 3.46945e-18 0 +1255 1.30104e-18 -2.05998e-18 0 +1256 9.75782e-19 7.69784e-18 0 +1257 2.1684e-18 8.0231e-18 0 +1258 8.67362e-19 -1.73472e-18 0 +1259 3.25261e-18 5.09575e-18 0 +1260 9.21572e-19 6.55942e-18 0 +1261 1.19262e-18 -2.1684e-19 0 +1262 1.95156e-18 7.91468e-18 0 +1263 1.84314e-18 7.37257e-18 0 +1264 2.1684e-18 -1.0842e-18 0 +1265 3.90313e-18 7.91468e-18 0 +1266 2.1684e-18 -2.38524e-18 0 +1267 2.1684e-18 -3.46945e-18 0 +1268 2.1684e-18 -8.67362e-19 0 +1269 2.1684e-18 7.80626e-18 0 +1270 2.38524e-18 -4.33681e-19 0 +1271 2.60209e-18 9.54098e-18 0 +1272 2.38524e-18 8.0231e-18 0 +1273 1.73472e-18 -2.60209e-18 0 +1274 3.46945e-18 -1.0842e-18 0 +1275 0 0 0 +1276 6.50521e-19 6.72205e-18 0 +1277 8.67362e-19 7.20994e-18 0 +1278 2.1684e-18 8.18573e-18 0 +1279 3.46945e-18 0 0 +1280 3.46945e-18 -1.73472e-18 0 +1281 2.1684e-18 -2.1684e-19 0 +1282 3.90313e-18 0 0 +1283 1.95156e-18 7.64363e-18 0 +1284 0 -1.6263e-18 0 +1285 1.19262e-18 8.99888e-18 0 +1286 2.1684e-18 2.1684e-19 0 +1287 4.98733e-18 2.38524e-18 0 +1288 3.03238e-19 6.88468e-18 0 +1289 1.19262e-18 7.29126e-18 0 +1290 2.1684e-19 -4.33681e-19 0 +1291 4.33681e-18 4.22839e-18 0 +1292 2.1684e-19 -3.25261e-19 0 +1293 1.0842e-18 8.51099e-18 0 +1294 2.1684e-19 -9.75782e-19 0 +1295 4.11997e-18 7.80626e-18 0 +1296 1.95156e-18 7.88757e-18 0 +1297 5.69206e-19 7.10152e-18 0 +1298 0 0 0 +1299 9.21572e-19 7.48099e-18 0 +1300 2.1684e-19 0 0 +1301 3.90313e-18 9.1073e-18 0 +1302 1.73472e-18 7.64363e-18 0 +1303 2.1684e-18 -1.95156e-18 0 +1304 1.30104e-18 -1.0842e-18 0 +1305 1.30104e-18 -1.95156e-18 0 +1306 3.46945e-18 4.33681e-19 0 +1307 2.1684e-18 0 0 +1308 3.03577e-18 0 0 +1309 -5.42101e-19 2.1684e-19 0 +1310 2.38524e-18 8.99888e-18 0 +1311 1.73472e-18 2.81893e-18 0 +1312 3.46945e-18 -2.1684e-19 0 +1313 1.51788e-18 7.69784e-18 0 +1314 1.95156e-18 7.83336e-18 0 +1315 2.71051e-19 6.83047e-18 0 +1316 7.04731e-19 7.39968e-18 0 +1317 1.73472e-18 7.88757e-18 0 +1318 8.67362e-19 1.95156e-18 0 +1319 4.11997e-18 2.05998e-18 0 +1320 -7.58942e-19 -2.71051e-19 0 +1321 1.30104e-18 8.94467e-18 0 +1322 1.73472e-18 7.65718e-18 0 +1323 -6.50521e-19 4.33681e-19 0 +1324 5.20417e-18 3.79471e-18 0 +1325 3.63589e-19 7.56231e-18 0 +1326 -6.50521e-19 -1.6263e-18 0 +1327 5.42101e-18 6.39679e-18 0 +1328 1.40946e-18 7.65718e-18 0 +1329 0 0 0 +1330 1.30104e-18 8.72783e-18 0 +1331 -8.67362e-19 -2.92735e-18 0 +1332 4.55365e-18 7.15573e-18 0 +1333 1.51788e-18 7.58264e-18 0 +1334 3.25261e-19 7.35902e-18 0 +1335 -1.40946e-18 -1.73472e-18 0 +1336 3.46945e-18 8.07731e-18 0 +1337 2.1684e-19 7.31836e-18 0 +1338 2.1684e-18 -8.67362e-19 0 +1339 1.73472e-18 2.1684e-19 0 +1340 2.1684e-18 -4.33681e-19 0 +1341 2.1684e-18 1.30104e-18 0 +1342 3.90313e-18 1.40946e-18 0 +1343 1.73472e-18 7.73765e-18 0 +1344 8.67362e-19 1.95156e-18 0 +1345 2.60209e-18 1.0842e-18 0 +1346 1.30104e-18 3.68629e-18 0 +1347 4.11997e-18 1.30104e-18 0 +1348 -1.6263e-18 -2.71051e-19 0 +1349 2.1684e-18 8.18573e-18 0 +1350 1.35525e-19 7.68428e-18 0 +1351 1.0842e-18 7.5081e-18 0 +1352 8.67362e-19 7.58942e-19 0 +1353 5.63785e-18 3.90313e-18 0 +1354 6.50521e-19 7.70504e-18 0 +1355 1.30104e-18 7.66395e-18 0 +1356 1.0842e-18 7.62626e-18 0 +1357 0 -3.03577e-18 0 +1358 5.42101e-18 5.52943e-18 0 +1359 0 0 0 +1360 1.40946e-18 8.70072e-18 0 +1361 1.30104e-18 7.6233e-18 0 +1362 -1.0842e-18 -3.90313e-18 0 +1363 4.77049e-18 6.77626e-18 0 +1364 2.25311e-19 7.64871e-18 0 +1365 1.19262e-18 7.94178e-18 0 +1366 4.33681e-19 8.0502e-18 0 +1367 -3.03577e-18 -3.57787e-18 0 +1368 4.77049e-18 7.80626e-18 0 +1369 1.30104e-18 -1.0842e-19 0 +1370 1.73472e-18 -6.50521e-19 0 +1371 1.73472e-18 1.30104e-18 0 +1372 2.60209e-18 1.40946e-18 0 +1373 1.30104e-18 7.65718e-18 0 +1374 1.6263e-19 7.85369e-18 0 +1375 -2.05998e-18 -7.04731e-19 0 +1376 1.51788e-18 1.6263e-18 0 +1377 2.60209e-18 1.0842e-18 0 +1378 2.81893e-18 7.42678e-18 0 +1379 -1.6263e-19 7.85369e-18 0 +1380 1.73472e-18 9.75782e-19 0 +1381 3.03577e-18 2.27682e-18 0 +1382 1.19262e-18 7.60297e-18 0 +1383 1.51788e-18 7.58942e-19 0 +1384 5.20417e-18 5.31259e-18 0 +1385 0 0 0 +1386 1.84314e-18 7.91468e-18 0 +1387 -2.1684e-19 -1.19262e-18 0 +1388 5.85469e-18 5.96311e-18 0 +1389 -1.6263e-19 7.79948e-18 0 +1390 2.1684e-19 7.16929e-18 0 +1391 7.58942e-19 7.65718e-18 0 +1392 6.50521e-19 7.41323e-18 0 +1393 -8.67362e-19 -1.84314e-18 0 +1394 8.67362e-19 7.57586e-18 0 +1395 5.20417e-18 6.55942e-18 0 +1396 1.30104e-18 8.21283e-18 0 +1397 1.0842e-18 7.34547e-18 0 +1398 -2.49366e-18 -4.22839e-18 0 +1399 5.20417e-18 6.93889e-18 0 +1400 3.65918e-19 7.15573e-18 0 +1401 1.0842e-19 7.12461e-18 0 +1402 1.0842e-18 7.5081e-18 0 +1403 -1.78893e-18 -2.00577e-18 0 +1404 3.90313e-18 6.72205e-18 0 +1405 2.81893e-18 -6.50521e-19 0 +1406 2.81893e-18 -1.0842e-18 0 +1407 2.81893e-18 8.67362e-19 0 +1408 2.81893e-18 -4.33681e-19 0 +1409 3.03577e-18 2.60209e-18 0 +1410 2.81893e-18 7.58942e-19 0 +1411 2.81893e-18 4.87891e-18 0 +1412 0 0 0 +1413 2.1684e-18 7.07442e-18 0 +1414 1.0842e-18 7.18284e-18 0 +1415 1.73472e-18 -4.33681e-19 0 +1416 4.11997e-18 5.42101e-18 0 +1417 4.06576e-19 6.74916e-18 0 +1418 -3.79471e-19 7.16929e-18 0 +1419 0 -4.33681e-19 0 +1420 5.85469e-18 6.17995e-18 0 +1421 9.75782e-19 6.9931e-18 0 +1422 1.51788e-18 8.06375e-18 0 +1423 0 -8.67362e-19 0 +1424 5.20417e-18 5.69206e-18 0 +1425 -2.71051e-19 6.83047e-18 0 +1426 1.13841e-18 6.85758e-18 0 +1427 -2.05998e-18 -2.76472e-18 0 +1428 5.20417e-18 5.52943e-18 0 +1429 -4.33681e-19 6.69495e-18 0 +1430 2.1684e-19 6.83047e-18 0 +1431 6.50521e-19 6.966e-18 0 +1432 1.0842e-18 7.32514e-18 0 +1433 -2.27682e-18 -2.1684e-18 0 +1434 4.98733e-18 5.23128e-18 0 +1435 8.67362e-19 6.93889e-18 0 +1436 2.03288e-19 6.451e-18 0 +1437 3.68629e-18 0 0 +1438 3.25261e-18 1.19262e-18 0 +1439 3.46945e-18 -1.19262e-18 0 +1440 2.81893e-18 2.27682e-18 0 +1441 -2.71051e-19 6.23416e-18 0 +1442 0 0 0 +1443 3.46945e-18 5.67851e-18 0 +1444 9.75782e-19 6.50521e-18 0 +1445 2.60209e-18 -2.27682e-18 0 +1446 3.68629e-18 4.11997e-18 0 +1447 1.51788e-18 -1.6263e-18 0 +1448 3.25261e-18 5.80048e-18 0 +1449 -6.50521e-19 -6.50521e-19 0 +1450 3.90313e-18 6.55942e-18 0 +1451 2.38524e-18 6.16979e-18 0 +1452 7.58942e-19 6.50521e-18 0 +1453 8.40257e-19 6.39679e-18 0 +1454 -3.25261e-19 6.61363e-18 0 +1455 -1.30104e-18 -2.71051e-19 0 +1456 4.77049e-18 6.66784e-18 0 +1457 7.58942e-19 6.39679e-18 0 +1458 -2.71051e-18 -1.6263e-19 0 +1459 4.77049e-18 5.80048e-18 0 +1460 1.51788e-18 6.03087e-18 0 +1461 -3.52366e-18 -6.23416e-19 0 +1462 4.98733e-18 4.63496e-18 0 +1463 -2.1684e-19 6.77626e-18 0 +1464 1.35525e-18 6.34258e-18 0 +1465 -1.0842e-18 5.9089e-18 0 +1466 -2.1684e-19 6.07153e-18 0 +1467 5.42101e-19 5.82759e-18 0 +1468 2.1684e-19 6.23416e-18 0 +1469 0 0 0 +1470 5.20417e-18 3.30682e-18 0 +1471 8.67362e-19 6.17995e-18 0 +1472 4.98733e-18 1.19262e-18 0 +1473 3.68629e-18 7.58942e-19 0 +1474 3.68629e-18 1.40946e-18 0 +1475 1.73472e-18 -6.50521e-19 0 +1476 3.46945e-18 1.95156e-18 0 +1477 5.72594e-19 6.39679e-18 0 +1478 6.50521e-19 -1.73472e-18 0 +1479 4.33681e-18 3.1984e-18 0 +1480 4.11997e-18 3.09548e-18 0 +1481 -5.42101e-19 5.9089e-18 0 +1482 -2.60209e-18 -2.05998e-18 0 +1483 3.68629e-18 5.20417e-18 0 +1484 8.13152e-19 5.9089e-18 0 +1485 -2.81893e-18 7.58942e-19 0 +1486 3.25261e-18 5.58364e-18 0 +1487 3.25261e-18 3.40168e-18 0 +1488 -4.11997e-18 2.05998e-18 0 +1489 3.90313e-18 6.01732e-18 0 +1490 -5.42101e-20 6.07153e-18 0 +1491 9.21572e-19 6.451e-18 0 +1492 5.42101e-19 5.9089e-18 0 +1493 -3.7405e-18 6.50521e-19 0 +1494 4.55365e-18 4.52654e-18 0 +1495 2.05998e-18 3.90313e-18 0 +1496 7.58942e-19 6.07153e-18 0 +1497 0 0 0 +1498 4.33681e-18 2.92057e-18 0 +1499 -8.13152e-20 6.34258e-18 0 +1500 9.21572e-19 5.85469e-18 0 +1501 -1.51788e-18 5.25838e-18 0 +1502 1.19262e-18 3.93023e-18 0 +1503 -8.67362e-19 5.3668e-18 0 +1504 3.68629e-18 2.60209e-18 0 +1505 3.46945e-18 1.57209e-18 0 +1506 3.90313e-18 2.24294e-18 0 +1507 0 5.47522e-18 0 +1508 1.95156e-18 3.03577e-18 0 +1509 3.46945e-18 1.02999e-18 0 +1510 0 8.13152e-19 0 +1511 4.11997e-18 1.51788e-18 0 +1512 -2.38524e-18 5.96311e-19 0 +1513 7.58942e-19 5.9089e-18 0 +1514 4.55365e-18 3.57787e-18 0 +1515 7.28448e-19 6.07153e-18 0 +1516 4.01155e-18 2.43945e-18 0 +1517 -4.55365e-18 3.79471e-19 0 +1518 4.55365e-18 3.63208e-18 0 +1519 7.04731e-19 4.66207e-18 0 +1520 8.67362e-19 5.96311e-18 0 +1521 -4.11997e-18 9.21572e-19 0 +1522 4.33681e-18 4.60786e-18 0 +1523 3.36103e-18 2.76472e-18 0 +1524 -2.87314e-18 7.31836e-19 0 +1525 4.11997e-18 3.998e-18 0 +1526 4.60786e-19 4.87891e-18 0 +1527 1.0842e-18 5.04154e-18 0 +1528 2.1684e-19 5.20417e-18 0 +1529 0 0 0 +1530 4.77049e-18 3.3407e-18 0 +1531 2.49366e-18 2.46656e-18 0 +1532 6.50521e-19 5.69206e-18 0 +1533 4.55365e-18 1.96512e-18 0 +1534 5.42101e-19 5.31259e-18 0 +1535 1.51788e-18 2.27682e-18 0 +1536 1.73472e-18 4.06576e-18 0 +1537 2.81893e-18 1.6263e-18 0 +1538 -2.1684e-19 1.46367e-18 0 +1539 3.03577e-18 1.6263e-18 0 +1540 1.30104e-18 5.04154e-18 0 +1541 2.05998e-18 3.57787e-18 0 +1542 3.79471e-18 1.16552e-18 0 +1543 -1.95156e-18 4.39102e-18 0 +1544 -2.1684e-18 4.33681e-19 0 +1545 4.11997e-18 2.76472e-18 0 +1546 -9.75782e-19 4.49944e-18 0 +1547 -2.1684e-19 4.71628e-18 0 +1548 -4.33681e-18 2.6563e-18 0 +1549 3.90313e-18 4.71628e-18 0 +1550 -5.09575e-18 2.54788e-18 0 +1551 3.25261e-19 5.25838e-18 0 +1552 4.33681e-18 5.04154e-18 0 +1553 3.36103e-18 1.89735e-18 0 +1554 8.63974e-19 5.20417e-18 0 +1555 1.30104e-18 4.66207e-18 0 +1556 -3.36103e-18 1.00289e-18 0 +1557 3.03577e-18 4.17418e-18 0 +1558 9.75782e-19 5.25838e-18 0 +1559 0 0 0 +1560 4.11997e-18 3.80148e-18 0 +1561 2.92735e-18 2.49366e-18 0 +1562 1.02999e-18 4.93312e-18 0 +1563 4.98733e-18 2.58176e-18 0 +1564 1.21973e-18 4.77049e-18 0 +1565 -2.1684e-19 4.55365e-18 0 +1566 2.49366e-18 2.71051e-18 0 +1567 8.13152e-19 5.31259e-18 0 +1568 4.22839e-18 -1.49078e-19 0 +1569 2.1684e-18 1.30104e-18 0 +1570 1.95156e-18 1.6263e-18 0 +1571 8.67362e-19 1.46367e-18 0 +1572 2.81893e-18 2.1684e-18 0 +1573 -5.42101e-19 8.13152e-19 0 +1574 3.90313e-18 3.41524e-18 0 +1575 1.30104e-18 4.49944e-18 0 +1576 -2.49366e-18 9.75782e-19 0 +1577 4.33681e-18 4.03865e-18 0 +1578 3.90313e-18 8.13152e-19 0 +1579 2.54788e-18 3.95734e-18 0 +1580 1.57209e-18 4.66207e-18 0 +1581 -2.71051e-18 1.02999e-18 0 +1582 4.33681e-18 3.84892e-18 0 +1583 -2.1684e-18 3.46945e-18 0 +1584 -1.40946e-18 3.63208e-18 0 +1585 -7.58942e-19 3.90313e-18 0 +1586 -1.89735e-18 5.82759e-19 0 +1587 4.55365e-18 3.75405e-18 0 +1588 2.92735e-18 2.22261e-18 0 +1589 0 4.66207e-18 0 +1590 0 0 0 +1591 4.55365e-18 2.97478e-18 0 +1592 1.67713e-18 3.90313e-18 0 +1593 1.73472e-18 4.77049e-18 0 +1594 1.40946e-18 4.98733e-18 0 +1595 4.77049e-18 3.33392e-18 0 +1596 2.49366e-18 2.98156e-18 0 +1597 3.90313e-18 9.21572e-19 0 +1598 1.65341e-18 3.63208e-18 0 +1599 2.05998e-18 4.22839e-18 0 +1600 -5.42101e-19 3.79471e-18 0 +1601 1.73472e-18 1.0842e-19 0 +1602 2.1684e-18 4.17418e-18 0 +1603 2.1684e-18 -9.75782e-19 0 +1604 2.38524e-18 1.95156e-18 0 +1605 1.40946e-18 -1.02999e-18 0 +1606 3.46945e-18 4.52654e-18 0 +1607 4.11997e-18 6.50521e-19 0 +1608 -9.75782e-19 -8.67362e-19 0 +1609 4.33681e-18 4.11997e-18 0 +1610 6.50521e-19 4.22839e-18 0 +1611 -8.67362e-19 -1.0842e-19 0 +1612 3.90313e-18 4.47233e-18 0 +1613 2.18196e-18 3.03577e-18 0 +1614 -9.21572e-19 3.79471e-19 0 +1615 3.90313e-18 4.91957e-18 0 +1616 4.11997e-18 1.6263e-18 0 +1617 2.54788e-18 3.68629e-18 0 +1618 2.08709e-18 3.79471e-18 0 +1619 0 0 0 +1620 -2.49366e-18 2.92735e-18 0 +1621 4.33681e-18 4.71628e-18 0 +1622 -1.73472e-18 2.92735e-18 0 +1623 -1.0842e-18 3.14419e-18 0 +1624 3.36103e-18 2.49366e-18 0 +1625 4.33681e-18 3.23905e-18 0 +1626 -2.1684e-19 3.57787e-18 0 +1627 2.87991e-18 3.57787e-18 0 +1628 2.27682e-18 2.33103e-18 0 +1629 4.66207e-18 7.45389e-19 0 +1630 1.78893e-18 3.57787e-18 0 +1631 2.81893e-18 3.63208e-18 0 +1632 4.98733e-18 4.87891e-19 0 +1633 2.27682e-18 -1.57209e-18 0 +1634 2.38524e-18 1.02999e-18 0 +1635 2.35814e-18 2.71051e-18 0 +1636 2.05998e-18 -1.54499e-18 0 +1637 3.25261e-18 4.20128e-18 0 +1638 2.49366e-18 3.36103e-18 0 +1639 1.51788e-18 -7.31836e-19 0 +1640 3.46945e-18 4.87891e-18 0 +1641 -7.58942e-19 2.81893e-18 0 +1642 2.33103e-18 3.63208e-18 0 +1643 3.25261e-19 -1.11131e-18 0 +1644 4.33681e-18 5.61075e-18 0 +1645 4.87891e-18 1.02999e-18 0 +1646 -5.42101e-19 -8.80914e-19 0 +1647 2.81893e-18 5.55654e-18 0 +1648 5.42101e-19 3.03577e-18 0 +1649 0 0 0 +1650 3.46945e-18 5.1669e-18 0 +1651 3.14419e-18 2.92735e-18 0 +1652 4.55365e-18 1.57209e-18 0 +1653 2.27682e-18 2.76472e-18 0 +1654 4.11997e-18 2.71051e-18 0 +1655 2.27682e-18 3.14419e-18 0 +1656 -2.81893e-18 2.1684e-18 0 +1657 -2.05998e-18 2.27682e-18 0 +1658 -1.30104e-18 2.49366e-18 0 +1659 3.68629e-18 1.27394e-18 0 +1660 4.33681e-18 3.03577e-18 0 +1661 -3.25261e-19 2.60209e-18 0 +1662 2.43945e-18 2.92735e-18 0 +1663 3.54399e-18 2.49366e-18 0 +1664 4.66207e-18 -2.71051e-20 0 +1665 3.63208e-18 2.38524e-18 0 +1666 1.6263e-18 2.27682e-18 0 +1667 3.46945e-18 -6.23416e-19 0 +1668 3.36103e-18 -2.92735e-18 0 +1669 3.79471e-18 2.22261e-18 0 +1670 5.63785e-18 -1.0571e-18 0 +1671 1.30104e-18 -2.6834e-18 0 +1672 3.68629e-18 5.23128e-18 0 +1673 1.46367e-18 -9.75782e-19 0 +1674 4.01155e-18 6.73561e-18 0 +1675 2.6563e-18 2.81893e-18 0 +1676 1.5992e-18 -1.89735e-18 0 +1677 3.46945e-18 6.73561e-18 0 +1678 3.00866e-18 1.6263e-18 0 +1679 2.54788e-18 2.11419e-18 0 +1680 5.09575e-18 -1.40946e-18 0 +1681 -8.67362e-19 1.95156e-18 0 +1682 0 0 0 +1683 2.38524e-18 6.19012e-18 0 +1684 3.03577e-18 4.25888e-18 0 +1685 6.50521e-19 1.73472e-18 0 +1686 4.98733e-18 -2.1684e-19 0 +1687 3.57109e-18 2.05998e-18 0 +1688 3.68629e-18 1.87025e-18 0 +1689 2.71051e-18 1.6263e-18 0 +1690 2.35814e-18 1.30104e-18 0 +1691 3.79471e-18 -3.52366e-19 0 +1692 -3.14419e-18 1.30104e-18 0 +1693 -2.1684e-18 1.30104e-18 0 +1694 4.87891e-18 1.30104e-18 0 +1695 -1.35525e-18 1.40946e-18 0 +1696 -1.0842e-19 8.67362e-19 0 +1697 5.09575e-18 -2.33103e-18 0 +1698 2.73761e-18 1.84314e-18 0 +1699 3.79132e-18 1.19262e-18 0 +1700 3.14419e-18 1.27394e-18 0 +1701 3.57787e-18 2.19551e-18 0 +1702 6.50521e-19 -6.77626e-19 0 +1703 4.77049e-18 5.23128e-18 0 +1704 4.11997e-18 1.19262e-18 0 +1705 1.13841e-18 -3.00866e-18 0 +1706 4.77049e-18 5.55654e-18 0 +1707 1.70762e-18 6.50521e-19 0 +1708 5.85469e-18 -2.54788e-18 0 +1709 2.57498e-18 -5.75982e-19 0 +1710 4.66207e-18 6.22061e-18 0 +1711 0 0 0 +1712 2.92735e-18 6.11219e-18 0 +1713 3.26616e-18 1.6263e-18 0 +1714 1.95156e-18 6.26804e-18 0 +1715 3.02221e-18 7.58942e-19 0 +1716 4.87891e-18 -1.78893e-18 0 +1717 3.14419e-18 2.1684e-19 0 +1718 -5.96311e-19 4.33681e-19 0 +1719 2.38524e-18 3.15774e-18 0 +1720 6.50521e-19 0 0 +1721 5.20417e-18 2.71051e-19 0 +1722 3.03577e-18 -4.33681e-19 0 +1723 3.97767e-18 1.0842e-18 0 +1724 3.46945e-18 6.50521e-19 0 +1725 2.46656e-18 -2.1684e-19 0 +1726 3.57787e-18 -1.78893e-18 0 +1727 5.31259e-18 3.79471e-19 0 +1728 -3.25261e-18 1.0842e-19 0 +1729 -2.11419e-18 1.0842e-19 0 +1730 -1.24683e-18 -2.1684e-19 0 +1731 4.98733e-18 -1.54499e-18 0 +1732 3.68629e-18 1.92446e-18 0 +1733 1.19262e-18 9.48677e-19 0 +1734 4.44523e-18 4.83825e-18 0 +1735 3.2255e-18 1.19262e-18 0 +1736 1.51788e-18 2.71051e-20 0 +1737 5.52943e-18 5.66496e-18 0 +1738 5.42101e-20 -5.42101e-19 0 +1739 3.92684e-18 7.58942e-19 0 +1740 2.38524e-18 -1.99222e-18 0 +1741 5.31259e-18 5.91568e-18 0 +1742 4.2826e-18 -5.96311e-19 0 +1743 0 0 0 +1744 4.55365e-18 5.66157e-18 0 +1745 5.42101e-18 -1.78893e-18 0 +1746 1.51788e-18 -4.33681e-19 0 +1747 3.46945e-18 4.48589e-18 0 +1748 2.92735e-18 2.57498e-18 0 +1749 3.59142e-18 2.05998e-18 0 +1750 5.63785e-18 -1.40946e-18 0 +1751 3.95734e-18 -8.67362e-19 0 +1752 2.88669e-18 -4.33681e-19 0 +1753 3.03577e-18 0 0 +1754 -4.33681e-19 -9.75782e-19 0 +1755 2.71051e-18 -1.13841e-18 0 +1756 6.17995e-18 -3.25261e-19 0 +1757 5.69206e-19 -1.19262e-18 0 +1758 3.70662e-18 1.30104e-18 0 +1759 4.71628e-18 1.0842e-19 0 +1760 3.57787e-18 -3.52366e-19 0 +1761 2.19551e-18 -8.67362e-19 0 +1762 5.52943e-18 -1.02999e-18 0 +1763 3.25261e-18 8.67362e-19 0 +1764 4.87891e-18 3.2255e-18 0 +1765 1.95156e-18 -9.48677e-19 0 +1766 6.07153e-18 3.00866e-18 0 +1767 -3.1984e-18 -1.0842e-18 0 +1768 -1.95156e-18 -1.19262e-18 0 +1769 2.84603e-18 -7.18284e-19 0 +1770 6.61363e-18 3.92346e-18 0 +1771 4.01155e-18 -7.04731e-19 0 +1772 -1.0842e-18 -1.51788e-18 0 +1773 0 0 0 +1774 5.20417e-18 3.8828e-18 0 +1775 4.71628e-18 1.0842e-18 0 +1776 3.43557e-18 -2.1684e-19 0 +1777 5.42101e-20 -1.51788e-18 0 +1778 3.03577e-18 3.12216e-18 0 +1779 4.44523e-18 -1.0842e-18 0 +1780 5.20417e-18 5.42101e-20 0 +1781 2.71051e-18 2.80537e-18 0 +1782 1.16552e-18 -1.51788e-18 0 +1783 1.40946e-18 -4.60786e-19 0 +1784 4.33681e-18 6.50521e-19 0 +1785 5.69206e-18 0 0 +1786 2.49366e-18 -1.35525e-18 0 +1787 4.60786e-18 -4.33681e-19 0 +1788 2.85958e-18 -1.19262e-18 0 +1789 -4.33681e-19 -2.1684e-18 0 +1790 2.92735e-18 -2.71051e-19 0 +1791 5.42101e-18 -1.0842e-19 0 +1792 4.60786e-19 -2.27682e-18 0 +1793 3.69984e-18 -7.58942e-19 0 +1794 5.17707e-18 2.1684e-19 0 +1795 3.36103e-18 -1.89735e-19 0 +1796 4.93312e-18 1.04354e-18 0 +1797 4.11997e-18 3.79471e-19 0 +1798 5.63785e-18 1.00289e-18 0 +1799 2.62919e-18 -4.47233e-19 0 +1800 6.93889e-18 2.23617e-18 0 +1801 1.53144e-18 -2.1684e-18 0 +1802 0 0 0 +1803 7.26415e-18 3.34747e-18 0 +1804 4.98733e-18 -6.50521e-19 0 +1805 4.01155e-18 1.43466e-18 0 +1806 4.55365e-18 1.13841e-18 0 +1807 -3.03577e-18 -2.38524e-18 0 +1808 -1.84314e-18 -2.49366e-18 0 +1809 -9.21572e-19 -2.60209e-18 0 +1810 2.92735e-18 1.98545e-18 0 +1811 4.8247e-18 0 0 +1812 3.68629e-18 -1.84314e-18 0 +1813 8.13152e-20 -2.60209e-18 0 +1814 1.19262e-18 3.65918e-19 0 +1815 5.04154e-18 1.13841e-18 0 +1816 4.17418e-18 -6.50521e-19 0 +1817 7.58942e-19 1.35525e-20 0 +1818 8.13152e-19 -2.38524e-18 0 +1819 5.09575e-18 4.33681e-19 0 +1820 1.51788e-18 1.19262e-18 0 +1821 4.18773e-18 -7.58942e-19 0 +1822 4.49944e-18 2.1684e-19 0 +1823 2.54788e-18 -2.71051e-18 0 +1824 2.60209e-18 1.02999e-18 0 +1825 -3.52366e-19 -3.03577e-18 0 +1826 4.77049e-18 -1.0842e-19 0 +1827 3.84892e-18 3.04932e-19 0 +1828 6.01732e-18 -1.53821e-18 0 +1829 1.89735e-19 -3.03577e-18 0 +1830 4.25549e-18 -6.09864e-19 0 +1831 6.77626e-18 -1.21295e-18 0 +1832 3.36103e-18 2.05998e-18 0 +1833 0 0 0 +1834 7.80626e-18 1.69407e-20 0 +1835 4.79759e-18 -1.0842e-19 0 +1836 3.67951e-18 -2.05998e-18 0 +1837 7.15573e-18 5.79371e-19 0 +1838 4.66207e-18 -8.84302e-19 0 +1839 4.22839e-18 -6.50521e-19 0 +1840 1.43657e-18 -3.03577e-18 0 +1841 4.33681e-18 2.00577e-18 0 +1842 3.14419e-18 -2.31748e-18 0 +1843 -2.76472e-18 -3.79471e-18 0 +1844 -1.65341e-18 -3.79471e-18 0 +1845 -7.58942e-19 -3.68629e-18 0 +1846 4.32326e-18 -9.75782e-19 0 +1847 1.84314e-18 -6.23416e-19 0 +1848 3.13063e-18 -2.60209e-18 0 +1849 4.8247e-18 6.50521e-19 0 +1850 -1.35525e-19 -3.46945e-18 0 +1851 4.33681e-18 -7.58942e-19 0 +1852 1.40946e-18 1.92446e-18 0 +1853 2.03288e-19 -3.46945e-18 0 +1854 1.19262e-18 1.27394e-18 0 +1855 5.3668e-18 -2.1684e-19 0 +1856 3.94379e-18 -1.6263e-18 0 +1857 4.22839e-18 -5.42101e-19 0 +1858 2.05998e-18 1.0571e-18 0 +1859 2.92735e-18 -3.32037e-19 0 +1860 3.38813e-18 9.82558e-20 0 +1861 5.3668e-18 -1.47045e-18 0 +1862 1.95834e-18 -3.46945e-18 0 +1863 -4.60786e-19 -4.11997e-18 0 +1864 4.22839e-18 -4.87891e-19 0 +1865 0 0 0 +1866 7.86047e-18 -3.15096e-18 0 +1867 7.58942e-18 -4.21314e-18 0 +1868 3.57787e-18 2.1684e-19 0 +1869 -8.13152e-20 -3.68629e-18 0 +1870 7.20994e-18 -5.21095e-18 0 +1871 4.11997e-18 -1.0842e-18 0 +1872 3.32715e-18 -2.49366e-18 0 +1873 5.58364e-18 -5.14318e-18 0 +1874 3.41524e-18 -1.0842e-18 0 +1875 4.01155e-18 6.50521e-19 0 +1876 5.25838e-18 -2.92735e-18 0 +1877 1.21973e-18 -4.11997e-18 0 +1878 -2.1684e-18 -4.87891e-18 0 +1879 2.71051e-18 -1.13841e-18 0 +1880 -1.27394e-18 -4.98733e-18 0 +1881 -7.86047e-19 -4.87891e-18 0 +1882 5.04154e-18 -2.1684e-19 0 +1883 4.03865e-18 -4.33681e-19 0 +1884 1.51788e-18 -9.21572e-19 0 +1885 -4.60786e-19 -4.55365e-18 0 +1886 2.78335e-18 -3.79471e-18 0 +1887 1.30104e-18 7.86047e-19 0 +1888 2.43945e-19 -4.87891e-18 0 +1889 4.39102e-18 2.1684e-19 0 +1890 3.63208e-18 -1.95156e-18 0 +1891 3.41524e-18 -9.75782e-19 0 +1892 1.66696e-18 -3.15096e-19 0 +1893 3.25261e-18 -2.42929e-18 0 +1894 1.19262e-18 5.96311e-19 0 +1895 0 0 0 +1896 4.98733e-18 -1.12486e-18 0 +1897 6.23416e-18 -5.0246e-18 0 +1898 7.64363e-18 -5.47183e-18 0 +1899 3.2255e-18 -5.42101e-19 0 +1900 -5.82759e-19 -5.20417e-18 0 +1901 7.37257e-18 -7.73849e-18 0 +1902 2.92735e-18 7.04731e-19 0 +1903 1.80249e-18 -4.87891e-18 0 +1904 3.26616e-18 -2.81893e-18 0 +1905 7.10152e-18 -4.25549e-18 0 +1906 -2.30393e-19 -5.31259e-18 0 +1907 5.58364e-18 -2.77827e-18 0 +1908 2.83587e-18 -3.46945e-18 0 +1909 3.30682e-18 5.42101e-20 0 +1910 2.60209e-18 8.67362e-19 0 +1911 2.76472e-18 -1.51788e-18 0 +1912 1.0842e-18 -5.96311e-18 0 +1913 -1.38236e-18 -5.52943e-18 0 +1914 3.32037e-18 -1.84314e-18 0 +1915 -8.94467e-19 -5.63785e-18 0 +1916 -5.96311e-19 -5.52943e-18 0 +1917 4.01155e-18 3.79471e-19 0 +1918 1.78893e-18 -1.54499e-18 0 +1919 2.79182e-18 9.75782e-19 0 +1920 1.13841e-18 -2.71051e-20 0 +1921 1.82874e-18 -5.20417e-18 0 +1922 3.60497e-18 -3.25261e-19 0 +1923 3.45589e-19 -6.39679e-18 0 +1924 1.76183e-18 -7.06425e-19 0 +1925 0 0 0 +1926 3.93023e-18 -6.77626e-21 0 +1927 4.93312e-18 -2.7986e-18 0 +1928 5.85469e-18 -3.74227e-18 0 +1929 1.51788e-18 -6.50521e-19 0 +1930 2.24972e-18 0 0 +1931 6.01732e-18 -4.69595e-18 0 +1932 7.86047e-18 -5.29226e-18 0 +1933 1.68051e-18 -4.33681e-19 0 +1934 2.84603e-18 -1.0842e-19 0 +1935 2.56143e-18 -3.03577e-18 0 +1936 7.15573e-18 -4.09286e-18 0 +1937 -4.20128e-19 -6.28837e-18 0 +1938 5.52943e-18 -3.91668e-18 0 +1939 2.79182e-18 -4.44523e-18 0 +1940 3.46945e-18 -5.42101e-19 0 +1941 3.41524e-18 -2.57498e-18 0 +1942 2.08201e-18 -5.74627e-18 0 +1943 2.27682e-18 4.33681e-19 0 +1944 1.86347e-18 -2.38524e-18 0 +1945 2.00577e-18 -1.81604e-18 0 +1946 -6.91179e-19 -5.74627e-18 0 +1947 3.38813e-18 -1.13841e-18 0 +1948 -5.28549e-19 -5.85469e-18 0 +1949 -3.18484e-19 -5.85469e-18 0 +1950 -2.50722e-19 -6.07153e-18 0 +1951 1.11131e-18 -5.96311e-18 0 +1952 1.70762e-18 -4.33681e-19 0 +1953 1.24683e-18 -3.25261e-19 0 +1954 0 0 0 +1955 2.81893e-18 -1.28071e-18 0 +1956 4.63496e-18 -3.08828e-18 0 +1957 -2.03288e-20 -7.15573e-18 0 +1958 6.451e-18 -2.92142e-18 0 +1959 3.08998e-18 -1.24683e-18 0 +1960 5.96311e-18 -1.89566e-18 0 +1961 8.13152e-20 -7.26415e-18 0 +1962 1.30104e-18 -4.87891e-19 0 +1963 4.93312e-18 -2.18196e-18 0 +1964 1.6263e-18 -1.84314e-18 0 +1965 6.87791e-19 -6.50521e-18 0 +1966 5.96311e-18 -3.30682e-18 0 +1967 5.58364e-18 -4.48589e-18 0 +1968 1.87025e-18 1.6263e-19 0 +1969 2.62919e-18 -4.33681e-19 0 +1970 4.66207e-18 -4.14707e-18 0 +1971 1.02004e-18 -5.96311e-18 0 +1972 1.55854e-18 -4.55365e-18 0 +1973 3.08998e-18 -2.1684e-19 0 +1974 3.84892e-18 -2.95445e-18 0 +1975 1.23074e-18 -4.98733e-18 0 +1976 1.16891e-18 -2.81893e-18 0 +1977 2.30393e-18 -1.35525e-18 0 +1978 0 -5.74627e-18 0 +1979 0 -5.96311e-18 0 +1980 3.03577e-18 -2.22261e-18 0 +1981 0 -6.17995e-18 0 +1982 0 0 0 +1983 3.38813e-18 -1.783e-18 0 +1984 5.71917e-18 -1.92869e-18 0 +1985 0 -6.39679e-18 0 +1986 6.74916e-18 -1.7758e-18 0 +1987 0 -6.50521e-18 0 +1988 6.36969e-18 -9.82558e-19 0 +1989 2.03288e-18 -2.11419e-18 0 +1990 2.43945e-18 -8.13152e-19 0 +1991 0 -6.83047e-18 0 +1992 3.82181e-18 -2.48011e-18 0 +1993 8.13152e-19 -1.51788e-18 0 +1994 6.36969e-19 -3.03577e-18 0 +1995 1.78893e-18 -1.68051e-18 0 +1996 0 -6.93889e-18 0 +1997 4.14707e-18 -4.49944e-18 0 +1998 0 -6.93889e-18 0 +1999 5.06865e-18 -2.84603e-18 0 +2000 2.08709e-18 -2.11419e-18 0 +2001 1.89735e-19 -2.92735e-18 0 +2002 0 -6.83047e-18 0 +2003 3.49655e-18 -2.60209e-18 0 +2004 0 -6.07153e-18 0 +2005 2.81893e-18 -2.41235e-18 0 +2006 0 -4.55365e-18 0 +2007 2.50722e-19 -2.27682e-18 0 +2008 0 0 0 +2009 2.80537e-18 -9.31736e-20 0 +2010 5.39391e-18 -1.81265e-19 0 +2011 0 -4.11997e-18 0 +2012 7.75205e-18 -1.53144e-18 0 +2013 2.81893e-18 -1.65341e-18 0 +2014 4.93312e-18 -2.93412e-18 0 +2015 1.78893e-18 -2.54788e-18 0 +2016 3.79471e-18 -3.69984e-18 0 +2017 1.52466e-18 -2.6563e-18 0 +2018 0 -4.01155e-18 0 +2019 1.30104e-18 -2.87314e-18 0 +2020 1.38236e-18 -3.30682e-18 0 +2021 0 -4.55365e-18 0 +2022 1.78216e-18 -2.49366e-18 0 +2023 4.8247e-18 -2.46656e-18 0 +2024 3.03577e-18 -3.00866e-18 0 +2025 0 -3.90313e-18 0 +2026 3.82181e-18 -3.08998e-18 0 +2027 0 0 0 +2028 2.968e-18 6.60686e-20 0 +2029 1.87025e-18 -3.11708e-18 0 +2030 5.50233e-18 -2.73041e-18 0 +2031 0 -3.90313e-18 0 +2032 6.4239e-18 -3.42371e-18 0 +2033 1.0842e-19 -3.52366e-18 0 +2034 3.7676e-18 -3.46267e-18 0 +2035 0 -4.66207e-18 0 +2036 6.09864e-19 -4.8247e-18 0 +2037 3.84892e-18 -1.72117e-18 0 +2038 0 -2.98156e-18 0 +2039 1.42302e-18 -5.25838e-18 0 +2040 1.58565e-18 -4.68917e-18 0 +2041 -2.1684e-19 -6.77626e-18 0 +2042 3.18484e-18 -4.33681e-18 0 +2043 0 -2.00577e-18 0 +2044 0 0 0 +2045 2.36492e-18 -1.29384e-18 0 +2046 3.68629e-18 -4.24194e-18 0 +2047 4.39102e-18 -3.16367e-18 0 +2048 4.44523e-18 -4.03188e-18 0 +2049 3.94379e-18 -3.483e-18 0 +2050 0 -4.06576e-18 0 +2051 1.00966e-18 -6.12574e-18 0 +2052 3.34747e-18 -3.63208e-18 0 +2053 0 -4.93312e-18 0 +2054 0 0 0 +2055 0 -6.09864e-18 0 +2056 1.21295e-18 -5.14996e-18 0 +2057 1.42979e-18 -1.24027e-18 0 +2058 3.0832e-18 -4.10642e-18 0 +2059 3.46267e-18 -4.01155e-18 0 +2060 3.80826e-18 -2.11419e-18 0 +2061 3.5101e-18 -2.14808e-18 0 +2062 0 -6.20706e-18 0 +2063 2.4259e-18 -1.40946e-18 0 +2064 0 -5.20417e-18 0 +2065 0 0 0 +2066 -4.98055e-19 4.74338e-20 0 +2067 2.00577e-18 -1.12486e-18 0 +2068 0 -4.90601e-18 0 +2069 1.32137e-18 2.25311e-18 0 +2070 1.5992e-18 7.14896e-19 0 +2071 0 -2.1413e-18 0 +2072 0 0 0 +2073 0 1.15196e-19 0 +2074 1.76183e-19 1.87872e-18 0 +2075 0 9.08019e-19 0 +2076 0 0 0 +2077 0 6.35275e-19 0 +2078 0 1.20363e-18 0 +2079 0 0 0 +End Values Result "TOTAL_DISPLACEMENT" "Kratos" 3.6 Vector OnNodes Values 1 0 0.0195285 0 @@ -59610,6 +63774,2088 @@ Values 2078 0 -2.03919e-06 0 2079 0 0 0 End Values +Result "INCREMENTAL_DISPLACEMENT" "Kratos" 4 Vector OnNodes +Values +1 0 0 0 +2 0 -6.93889e-18 0 +3 -1.40946e-18 0 0 +4 -8.94467e-19 0 0 +5 0 0 0 +6 -3.25261e-18 0 0 +7 -9.21572e-19 0 0 +8 9.75782e-19 0 0 +9 -2.27682e-18 0 0 +10 0 -6.93889e-18 0 +11 0 0 0 +12 6.50521e-19 0 0 +13 1.0842e-18 -6.93889e-18 0 +14 0 0 0 +15 5.42101e-19 0 0 +16 0 0 0 +17 0 0 0 +18 0 0 0 +19 -2.1684e-19 -6.93889e-18 0 +20 6.50521e-19 0 0 +21 8.67362e-19 -6.93889e-18 0 +22 0 0 0 +23 0 0 0 +24 4.33681e-19 0 0 +25 0 -6.93889e-18 0 +26 0 0 0 +27 -2.1684e-19 0 0 +28 -1.0842e-18 0 0 +29 1.73472e-18 0 0 +30 1.30104e-18 0 0 +31 -6.50521e-19 0 0 +32 0 0 0 +33 1.73472e-18 0 0 +34 0 0 0 +35 0 0 0 +36 -1.73472e-18 0 0 +37 -1.73472e-18 -6.93889e-18 0 +38 -1.0842e-18 0 0 +39 -1.30104e-18 -6.93889e-18 0 +40 -4.33681e-19 0 0 +41 0 0 0 +42 0 0 0 +43 4.33681e-19 0 0 +44 -1.73472e-18 0 0 +45 0 0 0 +46 0 0 0 +47 -8.67362e-19 0 0 +48 -1.51788e-18 0 0 +49 -2.1684e-18 -6.93889e-18 0 +50 -1.0842e-18 0 0 +51 0 0 0 +52 0 0 0 +53 0 0 0 +54 -2.81893e-18 0 0 +55 -2.60209e-18 -6.93889e-18 0 +56 -3.25261e-18 0 0 +57 -1.30104e-18 0 0 +58 0 0 0 +59 0 0 0 +60 -1.51788e-18 0 0 +61 0 0 0 +62 -2.60209e-18 -6.93889e-18 0 +63 0 0 0 +64 -5.42101e-19 0 0 +65 0 0 0 +66 -3.03577e-18 0 0 +67 -3.03577e-18 0 0 +68 0 0 0 +69 -8.67362e-19 0 0 +70 -8.67362e-19 -6.93889e-18 0 +71 -1.73472e-18 0 0 +72 0 6.93889e-18 0 +73 0 0 0 +74 0 0 0 +75 -8.67362e-19 0 0 +76 0 0 0 +77 -3.03577e-18 0 0 +78 0 0 0 +79 -4.33681e-19 0 0 +80 -2.71051e-18 6.93889e-18 0 +81 -3.46945e-18 0 0 +82 0 0 0 +83 -4.98733e-18 0 0 +84 0 0 0 +85 -4.33681e-18 0 0 +86 -1.51788e-18 6.93889e-18 0 +87 0 0 0 +88 -3.90313e-18 0 0 +89 0 0 0 +90 0 0 0 +91 -1.57209e-18 6.93889e-18 0 +92 -3.68629e-18 0 0 +93 0 0 0 +94 0 0 0 +95 -1.54499e-18 0 0 +96 -3.25261e-18 6.93889e-18 0 +97 -5.42101e-18 0 0 +98 -4.11997e-18 0 0 +99 -4.22839e-18 -6.93889e-18 0 +100 0 0 0 +101 -4.33681e-18 0 0 +102 -4.33681e-18 -6.93889e-18 0 +103 -3.08998e-18 0 0 +104 -4.33681e-18 0 0 +105 0 0 0 +106 0 6.93889e-18 0 +107 0 0 0 +108 0 0 0 +109 -4.8247e-18 -6.93889e-18 0 +110 -2.69695e-18 6.93889e-18 0 +111 -3.7676e-18 0 0 +112 -5.47522e-18 0 0 +113 -4.01155e-18 -6.93889e-18 0 +114 -4.47233e-18 0 0 +115 0 0 0 +116 -9.31736e-19 6.93889e-18 0 +117 0 0 0 +118 -3.84892e-18 -6.93889e-18 0 +119 -3.90313e-18 0 0 +120 -4.44523e-18 0 0 +121 -2.98479e-18 0 0 +122 -4.8518e-18 -6.93889e-18 0 +123 -5.09575e-18 0 0 +124 -4.55365e-18 0 0 +125 -2.29038e-18 0 0 +126 -1.89058e-18 3.46945e-18 0 +127 0 0 0 +128 0 0 0 +129 -1.0842e-18 0 0 +130 0 0 0 +131 -3.46945e-18 0 0 +132 -4.33681e-18 0 0 +133 -1.69407e-19 3.46945e-18 0 +134 -1.68051e-18 0 0 +135 -3.25261e-18 -6.93889e-18 0 +136 -1.51788e-18 0 0 +137 -5.20417e-18 0 0 +138 -3.90313e-18 -6.93889e-18 0 +139 0 0 0 +140 -3.90313e-18 0 0 +141 -3.68629e-18 0 0 +142 -4.11997e-18 0 0 +143 -3.25261e-19 3.46945e-18 0 +144 5.42101e-20 3.46945e-18 0 +145 -1.0842e-18 3.46945e-18 0 +146 -3.03577e-18 -6.93889e-18 0 +147 -1.6263e-18 0 0 +148 0 3.46945e-18 0 +149 0 0 0 +150 -4.33681e-19 0 0 +151 -3.68629e-18 0 0 +152 -4.33681e-18 -6.93889e-18 0 +153 -5.20417e-18 -6.93889e-18 0 +154 1.6263e-19 3.46945e-18 0 +155 -1.0842e-19 0 0 +156 -3.03577e-18 -6.93889e-18 0 +157 -2.1684e-19 0 0 +158 -4.11997e-18 0 0 +159 -2.1684e-18 0 0 +160 0 0 0 +161 -2.60209e-18 -6.93889e-18 0 +162 -3.90313e-18 -6.93889e-18 0 +163 1.6263e-18 3.46945e-18 0 +164 2.27682e-18 3.46945e-18 0 +165 -3.46945e-18 0 0 +166 -6.07153e-18 -6.93889e-18 0 +167 -4.33681e-19 0 0 +168 0 3.46945e-18 0 +169 0 0 0 +170 6.50521e-19 0 0 +171 -3.90313e-18 0 0 +172 2.05998e-18 0 0 +173 -4.8247e-18 -6.93889e-18 0 +174 -2.60209e-18 0 0 +175 -3.46945e-18 -6.93889e-18 0 +176 0 0 0 +177 1.6263e-18 0 0 +178 -3.03577e-18 0 0 +179 -5.20417e-18 -6.93889e-18 0 +180 6.50521e-19 0 0 +181 -1.30104e-18 -3.46945e-18 0 +182 -3.03577e-18 0 0 +183 -5.20417e-18 -6.93889e-18 0 +184 1.51788e-18 0 0 +185 2.27682e-18 0 0 +186 -5.20417e-18 0 0 +187 -3.46945e-18 -6.93889e-18 0 +188 -2.1684e-18 -3.46945e-18 0 +189 -3.25261e-18 0 0 +190 -3.46945e-18 0 0 +191 2.27682e-18 0 0 +192 8.67362e-19 0 0 +193 0 3.46945e-18 0 +194 0 0 0 +195 -5.20417e-18 -6.93889e-18 0 +196 1.30104e-18 0 0 +197 1.16552e-18 3.46945e-18 0 +198 -3.46945e-18 0 0 +199 -8.67362e-19 0 0 +200 -4.83148e-18 -6.93889e-18 0 +201 1.30104e-18 0 0 +202 -5.20417e-18 -6.93889e-18 0 +203 -3.03577e-18 -3.46945e-18 0 +204 -5.20417e-18 0 0 +205 1.6263e-18 0 0 +206 8.67362e-19 -3.46945e-18 0 +207 -2.1684e-18 -3.46945e-18 0 +208 -6.28837e-18 -6.93889e-18 0 +209 4.33681e-19 -3.46945e-18 0 +210 2.1684e-18 0 0 +211 1.6263e-18 3.46945e-18 0 +212 -3.90313e-18 -3.46945e-18 0 +213 -4.77049e-18 -3.46945e-18 0 +214 -8.67362e-19 -3.46945e-18 0 +215 -4.77049e-18 -3.46945e-18 0 +216 -5.20417e-18 -3.46945e-18 0 +217 1.51788e-18 0 0 +218 -3.90313e-18 -3.46945e-18 0 +219 -3.90313e-18 -3.46945e-18 0 +220 4.33681e-19 -3.46945e-18 0 +221 0 3.46945e-18 0 +222 -1.73472e-18 0 0 +223 2.60209e-18 0 0 +224 -5.20417e-18 -3.46945e-18 0 +225 -2.60209e-18 -3.46945e-18 0 +226 1.6263e-19 6.93889e-18 0 +227 0 -3.46945e-18 0 +228 -4.33681e-18 -3.46945e-18 0 +229 2.60209e-18 -3.46945e-18 0 +230 -2.1684e-18 0 0 +231 -5.50741e-18 -3.46945e-18 0 +232 1.40946e-18 3.46945e-18 0 +233 1.51788e-18 6.93889e-18 0 +234 1.30104e-18 0 0 +235 -3.03577e-18 -3.46945e-18 0 +236 -6.50521e-18 -6.93889e-18 0 +237 4.33681e-19 -3.46945e-18 0 +238 3.46945e-18 0 0 +239 1.73472e-18 3.46945e-18 0 +240 -4.77049e-18 -3.46945e-18 0 +241 -3.46945e-18 -3.46945e-18 0 +242 -5.20417e-18 -3.46945e-18 0 +243 -4.33681e-19 0 0 +244 -5.63785e-18 -6.93889e-18 0 +245 -3.90313e-18 -3.46945e-18 0 +246 -5.20417e-18 -3.46945e-18 0 +247 2.38524e-18 0 0 +248 1.73472e-18 -3.46945e-18 0 +249 -2.60209e-18 0 0 +250 0 3.46945e-18 0 +251 -3.46945e-18 -3.46945e-18 0 +252 -4.33681e-18 -3.46945e-18 0 +253 4.33681e-18 -3.46945e-18 0 +254 -5.20417e-18 -6.93889e-18 0 +255 1.0842e-19 0 0 +256 0 -3.46945e-18 0 +257 -4.33681e-18 -6.93889e-18 0 +258 1.51788e-18 3.46945e-18 0 +259 -3.46945e-18 -3.46945e-18 0 +260 -6.23416e-18 -3.46945e-18 0 +261 3.90313e-18 0 0 +262 1.30104e-18 6.93889e-18 0 +263 -8.67362e-19 -3.46945e-18 0 +264 -6.93889e-18 -6.93889e-18 0 +265 3.90313e-18 0 0 +266 8.67362e-19 -3.46945e-18 0 +267 1.95156e-18 0 0 +268 4.33681e-18 0 0 +269 -3.90313e-18 -3.46945e-18 0 +270 -4.77049e-18 -3.46945e-18 0 +271 -4.33681e-18 -3.46945e-18 0 +272 -5.63785e-18 -3.46945e-18 0 +273 -4.33681e-19 0 0 +274 -3.46945e-18 -3.46945e-18 0 +275 -5.20417e-18 -3.46945e-18 0 +276 -5.20417e-18 -3.46945e-18 0 +277 1.73472e-18 0 0 +278 -3.46945e-18 -3.46945e-18 0 +279 -5.20417e-18 -3.46945e-18 0 +280 2.60209e-18 0 0 +281 0 3.46945e-18 0 +282 -1.73472e-18 -3.46945e-18 0 +283 4.33681e-19 3.46945e-18 0 +284 3.90313e-18 0 0 +285 -5.20417e-18 -3.46945e-18 0 +286 6.50521e-19 6.93889e-18 0 +287 4.33681e-19 -3.46945e-18 0 +288 -4.33681e-18 -3.46945e-18 0 +289 -2.60209e-18 -3.46945e-18 0 +290 -6.72205e-18 -3.46945e-18 0 +291 3.03577e-18 0 0 +292 1.30104e-18 0 0 +293 -8.67362e-19 0 0 +294 -4.33681e-18 -3.46945e-18 0 +295 3.90313e-18 0 0 +296 -4.33681e-18 -3.46945e-18 0 +297 -4.33681e-18 -6.93889e-18 0 +298 -6.50521e-18 -6.93889e-18 0 +299 1.73472e-18 -3.46945e-18 0 +300 2.38524e-18 3.46945e-18 0 +301 -3.46945e-18 0 0 +302 -4.77049e-18 -3.46945e-18 0 +303 4.33681e-18 3.46945e-18 0 +304 -4.33681e-18 -3.46945e-18 0 +305 -5.85469e-18 -3.46945e-18 0 +306 0 -3.46945e-18 0 +307 7.58942e-19 3.46945e-18 0 +308 -6.07153e-18 -3.46945e-18 0 +309 4.77049e-18 0 0 +310 -3.46945e-18 -3.46945e-18 0 +311 -6.34258e-18 -3.46945e-18 0 +312 4.33681e-19 3.46945e-18 0 +313 3.90313e-18 0 0 +314 -3.46945e-18 0 0 +315 0 3.46945e-18 0 +316 5.20417e-18 0 0 +317 -5.20417e-18 0 0 +318 1.51788e-18 6.93889e-18 0 +319 1.73472e-18 -3.46945e-18 0 +320 -1.73472e-18 -3.46945e-18 0 +321 6.07153e-18 3.46945e-18 0 +322 -6.93889e-18 -3.46945e-18 0 +323 3.03577e-18 3.46945e-18 0 +324 -5.20417e-18 -3.46945e-18 0 +325 -4.77049e-18 -3.46945e-18 0 +326 -4.33681e-18 0 0 +327 -4.33681e-18 -3.46945e-18 0 +328 0 -3.46945e-18 0 +329 5.20417e-18 0 0 +330 -5.20417e-18 0 0 +331 -4.33681e-18 -3.46945e-18 0 +332 4.98733e-18 3.46945e-18 0 +333 3.03577e-18 -3.46945e-18 0 +334 -5.63785e-18 -3.46945e-18 0 +335 -5.20417e-18 -3.46945e-18 0 +336 6.07153e-18 0 0 +337 -4.33681e-18 -3.46945e-18 0 +338 -5.85469e-18 0 0 +339 -1.30104e-18 3.46945e-18 0 +340 8.67362e-19 -3.46945e-18 0 +341 -5.42101e-19 3.46945e-18 0 +342 4.33681e-19 6.93889e-18 0 +343 5.20417e-18 0 0 +344 -4.33681e-18 -3.46945e-18 0 +345 -6.52618e-18 0 0 +346 4.33681e-18 -3.46945e-18 0 +347 0 3.46945e-18 0 +348 -3.46945e-18 0 0 +349 1.95156e-18 3.46945e-18 0 +350 6.50521e-18 0 0 +351 -1.73472e-18 -3.46945e-18 0 +352 2.60209e-18 -3.46945e-18 0 +353 -6.72205e-18 -3.46945e-18 0 +354 6.50521e-18 3.46945e-18 0 +355 -5.20417e-18 0 0 +356 -4.33681e-18 0 0 +357 -5.63785e-18 -3.46945e-18 0 +358 3.68629e-18 0 0 +359 -6.93889e-18 0 0 +360 -4.33681e-18 -3.46945e-18 0 +361 -4.77049e-18 -3.46945e-18 0 +362 -8.67362e-19 -3.46945e-18 0 +363 -5.20417e-18 -3.46945e-18 0 +364 -4.98733e-18 -3.46945e-18 0 +365 -5.20417e-18 0 0 +366 -6.07153e-18 0 0 +367 6.50521e-18 0 0 +368 6.50521e-18 3.46945e-18 0 +369 4.33681e-18 -3.46945e-18 0 +370 7.37257e-18 3.46945e-18 0 +371 -5.20417e-18 -3.46945e-18 0 +372 -6.17995e-18 -3.46945e-18 0 +373 4.33681e-19 3.46945e-18 0 +374 2.60209e-18 -3.46945e-18 0 +375 -4.33681e-18 0 0 +376 -6.50521e-18 -3.46945e-18 0 +377 1.95156e-18 5.20417e-18 0 +378 6.50521e-18 3.46945e-18 0 +379 -5.42101e-20 6.93889e-18 0 +380 2.81893e-18 1.73472e-18 0 +381 5.63785e-18 0 0 +382 0 6.93889e-18 0 +383 -5.20417e-18 1.73472e-18 0 +384 -5.20417e-18 0 0 +385 7.37257e-18 0 0 +386 -8.67362e-19 -3.46945e-18 0 +387 -5.20417e-18 -3.46945e-18 0 +388 -4.77049e-18 -3.46945e-18 0 +389 -6.93889e-18 0 0 +390 2.60209e-18 0 0 +391 -5.20417e-18 0 0 +392 -6.07153e-18 -3.46945e-18 0 +393 -6.07153e-18 1.73472e-18 0 +394 7.37257e-18 3.46945e-18 0 +395 4.11997e-18 1.73472e-18 0 +396 -6.07153e-18 0 0 +397 -5.63785e-18 0 0 +398 -4.33681e-18 0 0 +399 -5.85469e-18 -3.46945e-18 0 +400 0 0 0 +401 -6.50521e-18 0 0 +402 -5.20417e-18 1.73472e-18 0 +403 5.20417e-18 3.46945e-18 0 +404 6.50521e-18 0 0 +405 4.33681e-18 0 0 +406 -5.20417e-18 -3.46945e-18 0 +407 -6.28837e-18 -1.73472e-18 0 +408 7.37257e-18 0 0 +409 3.25261e-19 5.20417e-18 0 +410 2.60209e-18 -3.46945e-18 0 +411 1.51788e-18 5.20417e-18 0 +412 -1.73472e-18 0 0 +413 -1.6263e-19 5.20417e-18 0 +414 -6.28837e-18 -1.73472e-18 0 +415 5.20417e-18 3.46945e-18 0 +416 3.68629e-18 0 0 +417 -6.93889e-18 0 0 +418 -6.07153e-18 0 0 +419 -5.20417e-18 0 0 +420 5.20417e-18 -3.46945e-18 0 +421 0 5.20417e-18 0 +422 -6.93889e-18 1.73472e-18 0 +423 6.93889e-18 1.73472e-18 0 +424 -5.20417e-18 0 0 +425 -5.63785e-18 -3.46945e-18 0 +426 -8.67362e-19 0 0 +427 -6.93889e-18 0 0 +428 4.33681e-18 -3.46945e-18 0 +429 -5.20417e-18 0 0 +430 -5.20417e-18 -1.73472e-18 0 +431 -6.93889e-18 1.73472e-18 0 +432 3.46945e-18 3.46945e-18 0 +433 6.07153e-18 3.46945e-18 0 +434 -4.33681e-18 0 0 +435 -6.07153e-18 1.73472e-18 0 +436 -5.85469e-18 -1.73472e-18 0 +437 8.67362e-19 -3.46945e-18 0 +438 -6.93889e-18 1.73472e-18 0 +439 1.0842e-19 5.20417e-18 0 +440 3.03577e-18 3.46945e-18 0 +441 5.63785e-18 1.73472e-18 0 +442 -5.20417e-18 0 0 +443 -6.23416e-18 0 0 +444 2.1684e-19 3.46945e-18 0 +445 5.20417e-18 -1.73472e-18 0 +446 1.0842e-19 5.20417e-18 0 +447 7.37257e-18 3.46945e-18 0 +448 2.38524e-18 3.46945e-18 0 +449 3.46945e-18 0 0 +450 -2.60209e-18 1.73472e-18 0 +451 -6.28837e-18 0 0 +452 -6.93889e-18 3.46945e-18 0 +453 3.90313e-18 5.20417e-18 0 +454 -6.07153e-18 -1.73472e-18 0 +455 -6.07153e-18 -3.46945e-18 0 +456 -6.07153e-18 0 0 +457 -5.20417e-18 -1.73472e-18 0 +458 2.38524e-18 1.73472e-18 0 +459 -6.07153e-18 0 0 +460 -5.20417e-18 -1.73472e-18 0 +461 5.20417e-18 0 0 +462 -6.93889e-18 3.46945e-18 0 +463 0 5.20417e-18 0 +464 6.50521e-18 5.20417e-18 0 +465 0 0 0 +466 -7.15573e-18 1.73472e-18 0 +467 -5.20417e-18 0 0 +468 -5.20417e-18 -1.73472e-18 0 +469 3.46945e-18 -3.46945e-18 0 +470 2.60209e-18 3.46945e-18 0 +471 -3.25261e-19 3.46945e-18 0 +472 3.90313e-18 3.46945e-18 0 +473 -6.07153e-18 0 0 +474 -6.07153e-18 0 0 +475 9.75782e-19 3.46945e-18 0 +476 2.60209e-18 1.73472e-18 0 +477 -6.93889e-18 3.46945e-18 0 +478 2.1684e-18 1.73472e-18 0 +479 2.60209e-18 5.20417e-18 0 +480 -6.93889e-18 3.46945e-18 0 +481 -2.60209e-18 1.73472e-18 0 +482 -6.12574e-18 1.73472e-18 0 +483 5.20417e-18 1.73472e-18 0 +484 5.20417e-18 0 0 +485 1.6263e-19 3.46945e-18 0 +486 3.90313e-18 5.20417e-18 0 +487 -6.93889e-18 3.46945e-18 0 +488 2.1684e-18 1.73472e-18 0 +489 -6.93889e-18 -1.73472e-18 0 +490 -6.93889e-18 0 0 +491 -6.50521e-18 0 0 +492 2.60209e-18 0 0 +493 -1.73472e-18 0 0 +494 -7.26415e-18 1.73472e-18 0 +495 -6.07153e-18 0 0 +496 -6.50521e-18 -1.73472e-18 0 +497 -7.80626e-18 3.46945e-18 0 +498 2.60209e-18 5.20417e-18 0 +499 1.51788e-18 3.46945e-18 0 +500 -4.33681e-18 -1.73472e-18 0 +501 -5.63785e-18 0 0 +502 6.07153e-18 1.73472e-18 0 +503 8.67362e-19 1.73472e-18 0 +504 -5.20417e-18 0 0 +505 -5.85469e-18 0 0 +506 0 5.20417e-18 0 +507 -6.93889e-18 3.46945e-18 0 +508 -7.58942e-18 3.46945e-18 0 +509 4.77049e-18 6.93889e-18 0 +510 2.27682e-18 1.73472e-18 0 +511 3.46945e-18 1.73472e-18 0 +512 3.03577e-18 5.20417e-18 0 +513 3.03577e-18 5.20417e-18 0 +514 -3.46945e-18 -1.73472e-18 0 +515 2.81893e-18 3.46945e-18 0 +516 -5.96311e-18 3.46945e-18 0 +517 1.73472e-18 3.46945e-18 0 +518 -7.37257e-18 1.73472e-18 0 +519 2.81893e-18 1.73472e-18 0 +520 -8.67362e-19 0 0 +521 -6.53909e-18 1.73472e-18 0 +522 3.03577e-18 5.20417e-18 0 +523 -6.93889e-18 3.46945e-18 0 +524 1.84314e-18 3.46945e-18 0 +525 5.20417e-18 0 0 +526 4.33681e-18 1.73472e-18 0 +527 -6.07153e-18 -1.73472e-18 0 +528 -6.93889e-18 -1.73472e-18 0 +529 2.38524e-18 1.73472e-18 0 +530 3.90313e-18 5.20417e-18 0 +531 -5.20417e-18 -1.73472e-18 0 +532 -6.50521e-18 0 0 +533 -6.93889e-18 3.46945e-18 0 +534 -5.20417e-18 0 0 +535 -6.07153e-18 1.73472e-18 0 +536 0 0 0 +537 -8.45678e-18 3.46945e-18 0 +538 4.33681e-18 3.46945e-18 0 +539 2.60209e-18 6.93889e-18 0 +540 -5.20417e-18 -1.73472e-18 0 +541 -6.07153e-18 3.46945e-18 0 +542 3.46945e-18 3.46945e-18 0 +543 -7.80626e-18 3.46945e-18 0 +544 -4.33681e-18 0 0 +545 -6.07153e-18 3.46945e-18 0 +546 0 1.73472e-18 0 +547 2.38524e-18 1.73472e-18 0 +548 -8.23994e-18 3.46945e-18 0 +549 6.07153e-18 0 0 +550 0 1.73472e-18 0 +551 -9.54098e-18 3.46945e-18 0 +552 6.07153e-18 3.46945e-18 0 +553 3.46945e-18 6.93889e-18 0 +554 3.46945e-18 1.73472e-18 0 +555 3.03577e-18 1.73472e-18 0 +556 -1.73472e-18 0 0 +557 -6.28837e-18 3.46945e-18 0 +558 3.46945e-18 6.93889e-18 0 +559 4.11997e-18 1.73472e-18 0 +560 2.60209e-18 3.46945e-18 0 +561 -7.37257e-18 3.46945e-18 0 +562 -2.60209e-18 1.73472e-18 0 +563 -7.26415e-18 3.46945e-18 0 +564 -6.93889e-18 0 0 +565 2.60209e-18 6.93889e-18 0 +566 -5.20417e-18 -1.73472e-18 0 +567 -6.50521e-18 1.73472e-18 0 +568 3.57787e-18 1.73472e-18 0 +569 -6.07153e-18 -1.73472e-18 0 +570 -6.50521e-18 1.73472e-18 0 +571 -7.80626e-18 3.46945e-18 0 +572 6.07153e-18 0 0 +573 3.90313e-18 1.73472e-18 0 +574 6.07153e-18 1.73472e-18 0 +575 4.77049e-18 3.46945e-18 0 +576 -5.20417e-18 0 0 +577 -6.07153e-18 3.46945e-18 0 +578 -1.73472e-18 3.46945e-18 0 +579 -8.23994e-18 5.20417e-18 0 +580 -7.80626e-18 3.46945e-18 0 +581 2.60209e-18 3.46945e-18 0 +582 -3.46945e-18 -1.73472e-18 0 +583 -6.93889e-18 5.20417e-18 0 +584 3.46945e-18 5.20417e-18 0 +585 2.81893e-18 5.20417e-18 0 +586 4.01155e-18 1.73472e-18 0 +587 -9.54098e-18 3.46945e-18 0 +588 -3.46945e-18 -1.73472e-18 0 +589 -6.72205e-18 5.20417e-18 0 +590 2.81893e-18 1.73472e-18 0 +591 8.67362e-19 5.20417e-18 0 +592 -8.23994e-18 5.20417e-18 0 +593 6.93889e-18 0 0 +594 0 0 0 +595 -9.54098e-18 3.46945e-18 0 +596 5.63785e-18 0 0 +597 3.57787e-18 1.73472e-18 0 +598 3.25261e-18 6.93889e-18 0 +599 6.07153e-18 3.46945e-18 0 +600 -4.33681e-18 3.46945e-18 0 +601 -7.04731e-18 5.20417e-18 0 +602 3.90313e-18 3.46945e-18 0 +603 2.81893e-18 8.67362e-19 0 +604 -6.07153e-18 0 0 +605 -6.93889e-18 1.73472e-18 0 +606 1.46367e-18 8.67362e-19 0 +607 2.60209e-18 5.20417e-18 0 +608 -6.07153e-18 0 0 +609 -6.50521e-18 3.46945e-18 0 +610 -8.67362e-18 5.20417e-18 0 +611 -2.60209e-18 3.46945e-18 0 +612 -7.58942e-18 5.20417e-18 0 +613 -5.20417e-18 -1.73472e-18 0 +614 -6.93889e-18 5.20417e-18 0 +615 3.90313e-18 6.93889e-18 0 +616 -8.67362e-18 4.33681e-18 0 +617 2.81893e-18 1.73472e-18 0 +618 6.07153e-18 0 0 +619 -4.33681e-18 1.73472e-18 0 +620 -6.50521e-18 5.20417e-18 0 +621 6.07153e-18 1.73472e-18 0 +622 5.20417e-18 1.73472e-18 0 +623 1.68051e-18 1.73472e-18 0 +624 0 5.20417e-18 0 +625 -8.23994e-18 6.07153e-18 0 +626 -5.20417e-18 -1.73472e-18 0 +627 -7.58942e-18 6.93889e-18 0 +628 6.07153e-18 3.46945e-18 0 +629 2.81893e-18 1.73472e-18 0 +630 3.25261e-18 5.20417e-18 0 +631 4.33681e-18 5.20417e-18 0 +632 -5.20417e-18 0 0 +633 -7.58942e-18 5.20417e-18 0 +634 2.71051e-18 1.73472e-18 0 +635 -8.67362e-18 2.60209e-18 0 +636 3.46945e-18 5.20417e-18 0 +637 -9.1073e-18 6.07153e-18 0 +638 4.77049e-18 0 0 +639 0 8.67362e-19 0 +640 -1.12757e-17 2.60209e-18 0 +641 2.81893e-18 -8.67362e-19 0 +642 4.77049e-18 8.67362e-19 0 +643 -1.04083e-17 2.60209e-18 0 +644 4.11997e-18 5.20417e-18 0 +645 -4.33681e-18 1.73472e-18 0 +646 -7.64363e-18 6.07153e-18 0 +647 6.93889e-18 3.46945e-18 0 +648 -6.93889e-18 3.46945e-18 0 +649 3.46945e-18 2.60209e-18 0 +650 -6.07153e-18 0 0 +651 -6.50521e-18 5.20417e-18 0 +652 -5.20417e-18 0 0 +653 -6.93889e-18 6.93889e-18 0 +654 1.95156e-18 0 0 +655 6.07153e-18 3.46945e-18 0 +656 2.1684e-19 8.67362e-19 0 +657 -5.20417e-18 1.73472e-18 0 +658 -6.93889e-18 6.93889e-18 0 +659 -9.97466e-18 4.33681e-18 0 +660 -8.67362e-19 1.73472e-18 0 +661 -8.67362e-18 6.07153e-18 0 +662 4.33681e-18 6.07153e-18 0 +663 -6.07153e-18 1.73472e-18 0 +664 -7.37257e-18 6.93889e-18 0 +665 2.60209e-18 8.67362e-19 0 +666 4.33681e-18 0 0 +667 2.71051e-18 1.73472e-18 0 +668 5.20417e-18 1.73472e-18 0 +669 2.60209e-18 1.73472e-18 0 +670 -6.07153e-18 0 0 +671 -7.80626e-18 6.93889e-18 0 +672 3.36103e-18 1.73472e-18 0 +673 2.60209e-18 1.73472e-18 0 +674 -9.1073e-18 6.07153e-18 0 +675 7.80626e-18 3.46945e-18 0 +676 -9.97466e-18 3.46945e-18 0 +677 3.03577e-18 4.33681e-18 0 +678 4.33681e-18 4.33681e-18 0 +679 3.03577e-18 0 0 +680 -5.20417e-18 1.73472e-18 0 +681 -7.69784e-18 6.93889e-18 0 +682 6.07153e-18 3.46945e-18 0 +683 -9.75782e-18 4.33681e-18 0 +684 2.27682e-18 -1.30104e-18 0 +685 3.03577e-18 -8.67362e-19 0 +686 -5.20417e-18 3.46945e-18 0 +687 -6.07153e-18 5.20417e-18 0 +688 0 1.30104e-18 0 +689 -1.12757e-17 8.67362e-19 0 +690 2.1684e-18 0 0 +691 -1.73472e-18 1.73472e-18 0 +692 -8.32125e-18 6.07153e-18 0 +693 3.46945e-18 4.33681e-18 0 +694 -1.04083e-17 1.73472e-18 0 +695 -5.20417e-18 3.46945e-18 0 +696 -6.93889e-18 7.80626e-18 0 +697 6.07153e-18 2.60209e-18 0 +698 -1.04083e-17 2.60209e-18 0 +699 -5.20417e-18 3.46945e-18 0 +700 -6.50521e-18 7.80626e-18 0 +701 2.60209e-18 2.60209e-18 0 +702 1.78893e-18 2.60209e-18 0 +703 1.6263e-18 0 0 +704 -6.93889e-18 1.73472e-18 0 +705 -6.93889e-18 8.67362e-18 0 +706 7.80626e-18 1.73472e-18 0 +707 2.60209e-18 1.73472e-18 0 +708 -9.32414e-18 6.93889e-18 0 +709 -1.04083e-17 2.60209e-18 0 +710 -5.20417e-18 0 0 +711 -7.80626e-18 7.80626e-18 0 +712 4.11997e-18 4.33681e-18 0 +713 2.76472e-18 0 0 +714 3.03577e-18 2.1684e-18 0 +715 2.1684e-18 0 0 +716 3.14419e-18 4.33681e-19 0 +717 3.90313e-18 0 0 +718 -4.33681e-18 1.73472e-18 0 +719 -8.23994e-18 7.80626e-18 0 +720 2.60209e-18 -8.67362e-19 0 +721 5.20417e-18 1.73472e-18 0 +722 -9.54098e-18 5.20417e-18 0 +723 7.37257e-18 8.67362e-19 0 +724 -1.0842e-17 2.60209e-18 0 +725 3.25261e-18 3.03577e-18 0 +726 2.49366e-18 -4.33681e-19 0 +727 3.90313e-18 3.46945e-18 0 +728 -2.60209e-18 1.73472e-18 0 +729 -8.45678e-18 6.07153e-18 0 +730 -6.07153e-18 4.33681e-18 0 +731 -5.20417e-18 4.33681e-18 0 +732 -6.07153e-18 6.07153e-18 0 +733 1.40946e-18 -4.33681e-19 0 +734 7.80626e-18 2.60209e-18 0 +735 -1.01915e-17 3.46945e-18 0 +736 -5.20417e-18 4.33681e-18 0 +737 -6.50521e-18 6.93889e-18 0 +738 8.67362e-19 2.60209e-18 0 +739 -8.97177e-18 5.20417e-18 0 +740 1.73472e-18 -2.60209e-18 0 +741 -1.21431e-17 0 0 +742 0 2.1684e-19 0 +743 3.90313e-18 2.60209e-18 0 +744 1.73472e-18 -2.60209e-18 0 +745 -6.07153e-18 2.60209e-18 0 +746 -6.07153e-18 7.80626e-18 0 +747 1.09098e-18 8.67362e-19 0 +748 -1.21431e-17 8.67362e-19 0 +749 4.77049e-18 1.73472e-18 0 +750 -1.12757e-17 1.73472e-18 0 +751 2.38524e-18 4.33681e-19 0 +752 3.68629e-18 -8.67362e-19 0 +753 -6.07153e-18 1.73472e-18 0 +754 -7.37257e-18 6.93889e-18 0 +755 3.52366e-18 4.33681e-19 0 +756 3.46945e-18 2.60209e-18 0 +757 -9.43256e-18 3.46945e-18 0 +758 7.80626e-18 1.73472e-18 0 +759 -1.04083e-17 1.73472e-18 0 +760 -5.20417e-18 1.73472e-18 0 +761 -7.58942e-18 7.80626e-18 0 +762 2.43945e-18 0 0 +763 4.55365e-18 2.60209e-18 0 +764 2.49366e-18 2.1684e-18 0 +765 -2.60209e-18 2.60209e-18 0 +766 -8.67362e-18 6.07153e-18 0 +767 2.6563e-18 -4.33681e-19 0 +768 1.73472e-18 -1.73472e-18 0 +769 1.73472e-18 -8.67362e-19 0 +770 2.1684e-18 -3.46945e-18 0 +771 6.07153e-18 4.33681e-18 0 +772 -1.01915e-17 2.60209e-18 0 +773 1.51788e-18 0 0 +774 6.07153e-18 2.60209e-18 0 +775 3.25261e-18 1.73472e-18 0 +776 -1.17094e-17 8.67362e-19 0 +777 -2.60209e-18 1.73472e-18 0 +778 -8.99888e-18 5.20417e-18 0 +779 3.46945e-18 4.33681e-19 0 +780 -6.07153e-18 6.07153e-18 0 +781 -6.07153e-18 6.07153e-18 0 +782 -6.07153e-18 4.33681e-18 0 +783 -5.20417e-18 6.07153e-18 0 +784 -6.93889e-18 5.20417e-18 0 +785 -5.63785e-18 6.07153e-18 0 +786 1.0842e-18 0 0 +787 5.20417e-18 4.33681e-18 0 +788 -1.06252e-17 2.60209e-18 0 +789 -7.80626e-18 4.33681e-18 0 +790 -6.07153e-18 6.93889e-18 0 +791 1.73472e-18 3.46945e-18 0 +792 -9.71716e-18 3.46945e-18 0 +793 2.05998e-18 8.67362e-19 0 +794 1.30104e-18 -1.73472e-18 0 +795 0 0 0 +796 -1.21431e-17 8.67362e-19 0 +797 -4.33681e-19 -2.60209e-18 0 +798 0 0 0 +799 -1.21431e-17 8.67362e-19 0 +800 -6.93889e-18 4.33681e-18 0 +801 -6.93889e-18 7.80626e-18 0 +802 0 0 0 +803 2.1684e-18 8.67362e-19 0 +804 1.0842e-18 2.1684e-19 0 +805 -1.17094e-17 8.67362e-19 0 +806 3.68629e-18 -1.30104e-18 0 +807 0 0 0 +808 4.33681e-18 4.33681e-18 0 +809 -5.20417e-18 5.20417e-18 0 +810 -7.80626e-18 6.07153e-18 0 +811 -1.00831e-17 3.46945e-18 0 +812 4.33681e-18 4.33681e-18 0 +813 0 0 0 +814 -1.0842e-17 1.73472e-18 0 +815 2.1684e-18 1.73472e-18 0 +816 1.73472e-18 0 0 +817 0 0 0 +818 -4.33681e-18 4.33681e-18 0 +819 -8.67362e-18 5.20417e-18 0 +820 -4.33681e-19 -4.33681e-18 0 +821 -4.33681e-19 0 0 +822 3.46945e-18 6.07153e-18 0 +823 -1.04083e-17 3.46945e-18 0 +824 1.0842e-18 -2.60209e-18 0 +825 -6.93889e-18 6.93889e-18 0 +826 0 0 0 +827 -5.20417e-18 6.93889e-18 0 +828 -6.07153e-18 6.07153e-18 0 +829 2.49366e-18 6.50521e-19 0 +830 2.60209e-18 3.46945e-18 0 +831 -8.67362e-19 4.33681e-18 0 +832 -7.80626e-18 5.20417e-18 0 +833 -5.63785e-18 6.93889e-18 0 +834 -9.1073e-18 3.46945e-18 0 +835 -1.17094e-17 1.73472e-18 0 +836 2.60209e-18 -1.30104e-18 0 +837 -7.80626e-18 5.20417e-18 0 +838 -5.63785e-18 6.07153e-18 0 +839 0 0 0 +840 -6.93889e-18 5.20417e-18 0 +841 -6.07153e-18 6.07153e-18 0 +842 3.46945e-18 6.07153e-18 0 +843 -1.10589e-17 1.73472e-18 0 +844 2.60209e-18 5.20417e-18 0 +845 -9.6765e-18 2.60209e-18 0 +846 1.6263e-18 8.67362e-19 0 +847 -1.73472e-18 -1.73472e-18 0 +848 -6.07153e-18 6.07153e-18 0 +849 -6.93889e-18 5.20417e-18 0 +850 -1.38778e-17 0 0 +851 -6.50521e-19 -3.90313e-18 0 +852 -1.30104e-17 0 0 +853 0 0 0 +854 -4.33681e-19 2.60209e-18 0 +855 -1.25767e-17 8.67362e-19 0 +856 4.11997e-18 -1.30104e-18 0 +857 -5.20417e-18 5.20417e-18 0 +858 -7.15573e-18 5.20417e-18 0 +859 2.60209e-18 4.33681e-18 0 +860 -1.01915e-17 2.60209e-18 0 +861 2.60209e-18 5.20417e-18 0 +862 -1.12757e-17 1.30104e-18 0 +863 0 0 0 +864 1.73472e-18 4.33681e-19 0 +865 -1.73472e-18 6.07153e-18 0 +866 -8.89046e-18 3.46945e-18 0 +867 -5.20417e-18 8.67362e-18 0 +868 -6.93889e-18 6.93889e-18 0 +869 -3.25261e-18 -1.73472e-18 0 +870 -6.93889e-18 6.93889e-18 0 +871 -5.63785e-18 7.80626e-18 0 +872 -3.03577e-18 3.46945e-18 0 +873 1.73472e-18 5.20417e-18 0 +874 -1.06252e-17 2.1684e-18 0 +875 8.67362e-19 -1.73472e-18 0 +876 -7.80626e-18 4.33681e-18 0 +877 -6.07153e-18 6.07153e-18 0 +878 1.73472e-18 6.07153e-18 0 +879 -9.26993e-18 2.60209e-18 0 +880 0 0 0 +881 -1.73472e-18 6.93889e-18 0 +882 -6.93889e-18 5.20417e-18 0 +883 -5.63785e-18 5.20417e-18 0 +884 -1.25767e-17 8.67362e-19 0 +885 1.30104e-18 -1.51788e-18 0 +886 -5.20417e-18 5.20417e-18 0 +887 -6.07153e-18 5.20417e-18 0 +888 1.30104e-18 7.80626e-18 0 +889 -1.14925e-17 8.67362e-19 0 +890 8.67362e-19 4.33681e-18 0 +891 -9.74427e-18 1.30104e-18 0 +892 -4.33681e-18 5.20417e-18 0 +893 -6.28837e-18 4.33681e-18 0 +894 0 0 0 +895 -6.28837e-18 8.67362e-19 0 +896 -1.47451e-17 -8.67362e-19 0 +897 -2.60209e-18 -1.30104e-18 0 +898 -1.38778e-17 -4.33681e-19 0 +899 -5.20417e-18 5.63785e-18 0 +900 -1.34441e-17 -4.33681e-19 0 +901 6.50521e-19 -2.1684e-19 0 +902 -2.60209e-18 5.20417e-18 0 +903 -7.15573e-18 3.03577e-18 0 +904 0 4.33681e-18 0 +905 -1.00831e-17 1.30104e-18 0 +906 -3.46945e-18 6.07153e-18 0 +907 -1.17094e-17 0 0 +908 0 0 0 +909 -6.50521e-18 6.07153e-18 0 +910 0 6.07153e-18 0 +911 -6.07153e-18 6.93889e-18 0 +912 -6.50521e-18 6.07153e-18 0 +913 -7.91468e-18 2.60209e-18 0 +914 -6.07153e-18 4.33681e-18 0 +915 -5.63785e-18 5.20417e-18 0 +916 -6.93889e-18 3.46945e-18 0 +917 -5.20417e-18 3.46945e-18 0 +918 -4.33681e-18 2.1684e-19 0 +919 0 3.46945e-18 0 +920 -1.10589e-17 1.30104e-18 0 +921 -5.20417e-18 3.46945e-18 0 +922 -8.67362e-19 -2.1684e-19 0 +923 -5.20417e-18 3.46945e-18 0 +924 -5.20417e-18 1.73472e-18 0 +925 1.30104e-18 6.07153e-18 0 +926 -9.05309e-18 1.30104e-18 0 +927 -3.90313e-18 6.07153e-18 0 +928 -1.25767e-17 -4.33681e-19 0 +929 0 0 0 +930 -3.46945e-18 1.73472e-18 0 +931 -5.20417e-18 2.1684e-18 0 +932 -2.60209e-18 6.93889e-18 0 +933 -4.33681e-19 3.46945e-18 0 +934 -9.62229e-18 8.67362e-19 0 +935 -1.17094e-17 0 0 +936 -1.73472e-18 2.60209e-18 0 +937 -6.28837e-18 1.30104e-18 0 +938 -5.63785e-18 6.50521e-19 0 +939 -1.47451e-17 -1.73472e-18 0 +940 -2.92735e-18 -4.33681e-19 0 +941 -1.43115e-17 -1.73472e-18 0 +942 -4.98733e-18 5.20417e-18 0 +943 0 4.33681e-18 0 +944 -6.50521e-18 8.67362e-19 0 +945 -1.34441e-17 -1.73472e-18 0 +946 0 0 0 +947 -8.67362e-19 3.90313e-18 0 +948 -1.01915e-17 0 0 +949 -5.20417e-18 4.33681e-18 0 +950 -5.20417e-18 5.20417e-18 0 +951 -5.20417e-18 3.46945e-18 0 +952 -5.20417e-18 4.33681e-18 0 +953 -4.77049e-18 6.50521e-18 0 +954 -1.21431e-17 -1.30104e-18 0 +955 -6.07153e-18 1.73472e-18 0 +956 -5.20417e-18 3.03577e-18 0 +957 1.30104e-18 5.20417e-18 0 +958 -6.93889e-18 4.33681e-19 0 +959 -4.33681e-18 1.73472e-18 0 +960 -4.77049e-18 1.73472e-18 0 +961 -3.03577e-18 7.58942e-19 0 +962 -3.46945e-18 4.33681e-18 0 +963 -2.60209e-18 2.60209e-18 0 +964 -4.33681e-18 4.33681e-19 0 +965 -1.10589e-17 -1.30104e-18 0 +966 -5.63785e-18 3.46945e-18 0 +967 0 0 0 +968 8.67362e-19 4.33681e-18 0 +969 -8.23994e-18 -4.33681e-19 0 +970 -4.77049e-18 5.63785e-18 0 +971 -1.73472e-18 8.67362e-19 0 +972 -4.77049e-18 -4.33681e-19 0 +973 -1.30104e-17 -2.60209e-18 0 +974 -8.67362e-19 8.67362e-19 0 +975 -4.98733e-18 -8.67362e-19 0 +976 -2.1684e-18 3.03577e-18 0 +977 -9.32414e-18 -1.30104e-18 0 +978 -3.46945e-18 6.93889e-18 0 +979 -1.19262e-17 -2.1684e-18 0 +980 -3.68629e-18 6.50521e-19 0 +981 -1.60462e-17 -3.03577e-18 0 +982 0 0 0 +983 -1.47451e-17 -3.03577e-18 0 +984 4.33681e-19 3.46945e-18 0 +985 -4.77049e-18 -4.33681e-19 0 +986 -3.46945e-18 1.30104e-18 0 +987 -4.55365e-18 4.55365e-18 0 +988 -3.46945e-18 8.67362e-19 0 +989 -3.46945e-18 1.30104e-18 0 +990 -1.34441e-17 -3.46945e-18 0 +991 -3.46945e-18 4.33681e-19 0 +992 -3.90313e-18 4.33681e-19 0 +993 -3.46945e-18 3.03577e-18 0 +994 -1.02999e-17 -2.1684e-18 0 +995 -3.46945e-18 4.33681e-19 0 +996 -3.46945e-18 0 0 +997 -5.42101e-18 4.77049e-18 0 +998 -1.23599e-17 -3.46945e-18 0 +999 -8.67362e-19 3.03577e-18 0 +1000 -6.83047e-18 -1.73472e-18 0 +1001 -2.60209e-18 8.67362e-19 0 +1002 -3.03577e-18 -8.67362e-19 0 +1003 -1.73472e-18 4.33681e-19 0 +1004 -3.46945e-18 -1.30104e-18 0 +1005 -4.33681e-18 2.60209e-18 0 +1006 0 0 0 +1007 -1.12757e-17 -3.03577e-18 0 +1008 -4.01155e-18 1.84314e-18 0 +1009 -2.1684e-18 4.77049e-18 0 +1010 -7.99599e-18 -2.1684e-18 0 +1011 -1.30104e-18 -1.30104e-18 0 +1012 -3.46945e-18 -2.1684e-18 0 +1013 -4.11997e-18 4.98733e-18 0 +1014 -1.30104e-17 -4.33681e-18 0 +1015 -4.33681e-19 0 0 +1016 -3.90313e-18 -1.30104e-18 0 +1017 -3.90313e-18 3.46945e-18 0 +1018 -9.32414e-18 -3.03577e-18 0 +1019 -4.55365e-18 3.90313e-18 0 +1020 -1.19262e-17 -3.90313e-18 0 +1021 -2.1684e-18 0 0 +1022 -2.1684e-18 0 0 +1023 -8.67362e-19 -8.67362e-19 0 +1024 -3.03577e-18 -1.30104e-18 0 +1025 4.33681e-19 1.73472e-18 0 +1026 -4.98733e-18 -2.60209e-18 0 +1027 0 0 0 +1028 -1.60462e-17 -4.77049e-18 0 +1029 -2.60209e-18 -2.1684e-18 0 +1030 -3.46945e-18 -2.1684e-18 0 +1031 -1.43115e-17 -4.77049e-18 0 +1032 -3.25261e-18 2.27682e-18 0 +1033 -1.34441e-17 -5.20417e-18 0 +1034 -1.73472e-18 -2.1684e-18 0 +1035 -2.1684e-18 -2.1684e-18 0 +1036 -4.77049e-18 1.73472e-18 0 +1037 -1.04083e-17 -4.11997e-18 0 +1038 -4.33681e-19 -1.73472e-18 0 +1039 -1.73472e-18 -2.60209e-18 0 +1040 -3.68629e-18 3.03577e-18 0 +1041 -1.30104e-18 4.33681e-19 0 +1042 -6.50521e-18 -3.46945e-18 0 +1043 -1.23599e-17 -4.98733e-18 0 +1044 -4.33681e-19 -1.73472e-18 0 +1045 -3.03577e-18 -3.90313e-18 0 +1046 -4.11997e-18 1.30104e-18 0 +1047 -1.10589e-17 -4.55365e-18 0 +1048 -4.77049e-18 1.73472e-18 0 +1049 -7.88757e-18 -4.33681e-18 0 +1050 0 0 0 +1051 -1.30104e-18 -2.60209e-18 0 +1052 -2.60209e-18 -2.60209e-18 0 +1053 -9.75782e-19 2.38524e-18 0 +1054 -1.25767e-17 -6.07153e-18 0 +1055 -1.30104e-18 -8.67362e-19 0 +1056 -3.90313e-18 -3.46945e-18 0 +1057 -6.07153e-18 2.60209e-18 0 +1058 -1.30104e-18 0 0 +1059 -8.94467e-18 -5.85469e-18 0 +1060 0 4.33681e-19 0 +1061 -2.1684e-18 -1.73472e-18 0 +1062 -2.60209e-18 8.67362e-19 0 +1063 -1.21431e-17 -5.85469e-18 0 +1064 -8.67362e-19 -1.30104e-18 0 +1065 -2.60209e-18 -3.90313e-18 0 +1066 -4.33681e-19 -1.73472e-18 0 +1067 -1.73472e-18 -3.03577e-18 0 +1068 -1.30104e-18 1.73472e-18 0 +1069 -4.98733e-18 -4.77049e-18 0 +1070 -1.56125e-17 -6.28837e-18 0 +1071 -8.67362e-19 -3.03577e-18 0 +1072 -1.30104e-18 -3.03577e-18 0 +1073 -1.38778e-17 -6.50521e-18 0 +1074 0 0 0 +1075 -1.34441e-17 -6.72205e-18 0 +1076 -4.33681e-18 1.73472e-18 0 +1077 -9.6494e-18 -5.85469e-18 0 +1078 0 -3.46945e-18 0 +1079 -1.73472e-18 -3.90313e-18 0 +1080 -3.90313e-18 0 0 +1081 -6.07153e-18 -5.85469e-18 0 +1082 -9.75782e-19 8.67362e-19 0 +1083 -1.23599e-17 -6.72205e-18 0 +1084 -1.30104e-18 -3.46945e-18 0 +1085 -2.81893e-18 -4.33681e-18 0 +1086 -2.81893e-18 0 0 +1087 -1.10589e-17 -7.37257e-18 0 +1088 -5.63785e-18 -1.0842e-18 0 +1089 -1.73472e-18 -2.1684e-18 0 +1090 -2.60209e-18 -4.55365e-18 0 +1091 -7.48099e-18 -6.28837e-18 0 +1092 0 0 0 +1093 -1.25767e-17 -7.37257e-18 0 +1094 -4.33681e-19 8.67362e-19 0 +1095 -1.30104e-18 -1.73472e-18 0 +1096 -2.60209e-18 -8.67362e-19 0 +1097 -4.11997e-18 -5.20417e-18 0 +1098 0 8.67362e-19 0 +1099 -3.03577e-18 -2.60209e-18 0 +1100 4.33681e-19 4.33681e-19 0 +1101 -2.1684e-18 -3.03577e-18 0 +1102 -5.20417e-18 1.30104e-18 0 +1103 -8.29415e-18 -7.37257e-18 0 +1104 -1.19262e-18 6.50521e-19 0 +1105 0 -1.30104e-18 0 +1106 -8.67362e-19 -3.46945e-18 0 +1107 -1.17094e-17 -8.0231e-18 0 +1108 -3.90313e-18 1.30104e-18 0 +1109 -4.66207e-18 -6.28837e-18 0 +1110 -4.33681e-19 -1.73472e-18 0 +1111 -1.30104e-18 -4.77049e-18 0 +1112 -1.47451e-17 -7.80626e-18 0 +1113 -1.38778e-17 -7.80626e-18 0 +1114 -8.67362e-19 -2.60209e-18 0 +1115 -1.73472e-18 -5.63785e-18 0 +1116 -1.30104e-17 -8.0231e-18 0 +1117 -2.1684e-18 1.95156e-18 0 +1118 -9.43256e-18 -8.45678e-18 0 +1119 -5.63785e-18 0 0 +1120 -5.69206e-18 -7.15573e-18 0 +1121 0 0 0 +1122 -1.19262e-17 -8.67362e-18 0 +1123 -1.30104e-18 -2.60209e-18 0 +1124 -2.1684e-18 -6.93889e-18 0 +1125 -2.60209e-18 -4.33681e-19 0 +1126 -2.38524e-18 -6.50521e-18 0 +1127 -1.6263e-18 -3.25261e-19 0 +1128 -5.63785e-18 -2.1684e-19 0 +1129 -6.76271e-18 -8.23994e-18 0 +1130 -1.06252e-17 -9.1073e-18 0 +1131 -1.30104e-18 0 0 +1132 8.67362e-19 1.73472e-18 0 +1133 -1.30104e-18 -8.67362e-19 0 +1134 2.1684e-18 8.67362e-19 0 +1135 -2.1684e-18 -2.60209e-18 0 +1136 -4.33681e-18 0 0 +1137 -3.46945e-18 -5.85469e-18 0 +1138 -1.25767e-17 -9.1073e-18 0 +1139 8.67362e-19 4.33681e-19 0 +1140 -2.1684e-18 -3.46945e-18 0 +1141 4.33681e-19 1.30104e-18 0 +1142 -1.30104e-18 -4.98733e-18 0 +1143 -3.46945e-18 8.67362e-19 0 +1144 -7.88757e-18 -8.67362e-18 0 +1145 0 0 0 +1146 -1.12757e-17 -9.54098e-18 0 +1147 -4.33681e-19 0 0 +1148 -1.30104e-18 -6.28837e-18 0 +1149 -4.77049e-18 6.50521e-19 0 +1150 -4.98733e-18 -7.15573e-18 0 +1151 -4.33681e-19 -8.67362e-19 0 +1152 -2.38524e-18 -7.37257e-18 0 +1153 -1.38778e-17 -8.67362e-18 0 +1154 -1.30104e-17 -9.1073e-18 0 +1155 -1.6263e-18 1.73472e-18 0 +1156 -1.25767e-17 -9.32414e-18 0 +1157 -8.89046e-18 -9.43256e-18 0 +1158 -6.72205e-18 6.50521e-19 0 +1159 -6.34258e-18 -8.23994e-18 0 +1160 -1.73472e-18 -4.33681e-19 0 +1161 -1.95156e-18 -7.58942e-18 0 +1162 -1.14925e-17 -9.43256e-18 0 +1163 -3.03577e-18 -6.50521e-19 0 +1164 -2.38524e-18 -7.15573e-18 0 +1165 8.67362e-19 8.67362e-19 0 +1166 0 -4.33681e-19 0 +1167 -3.46945e-18 5.42101e-19 0 +1168 2.1684e-18 3.90313e-18 0 +1169 -1.30104e-18 -2.38524e-18 0 +1170 -7.07442e-18 -9.54098e-18 0 +1171 0 0 0 +1172 -1.00831e-17 -1.05168e-17 0 +1173 1.30104e-18 2.60209e-18 0 +1174 -2.1684e-18 -3.90313e-18 0 +1175 1.30104e-18 2.1684e-18 0 +1176 -1.73472e-18 -4.77049e-18 0 +1177 -3.90313e-18 -2.1684e-19 0 +1178 -3.46945e-18 -7.80626e-18 0 +1179 -1.19262e-17 -9.97466e-18 0 +1180 4.33681e-19 1.30104e-18 0 +1181 -8.67362e-19 -4.98733e-18 0 +1182 -2.38524e-18 7.58942e-19 0 +1183 -7.75205e-18 -1.02999e-17 0 +1184 4.33681e-19 1.0842e-18 0 +1185 -1.30104e-18 -7.37257e-18 0 +1186 -1.04083e-17 -1.01915e-17 0 +1187 -4.55365e-18 -8.67362e-19 0 +1188 -5.74627e-18 -9.43256e-18 0 +1189 0 -2.1684e-19 0 +1190 -2.38524e-18 -8.67362e-18 0 +1191 -1.30104e-17 -9.75782e-18 0 +1192 -1.25767e-17 -9.97466e-18 0 +1193 0 0 0 +1194 -8.5652e-18 -1.11673e-17 0 +1195 -1.17094e-17 -9.97466e-18 0 +1196 -3.25261e-18 -1.0842e-18 0 +1197 -6.72205e-18 -1.05168e-17 0 +1198 -8.67362e-19 -1.0842e-18 0 +1199 -1.95156e-18 -8.23994e-18 0 +1200 -1.10589e-17 -1.05168e-17 0 +1201 8.67362e-19 2.1684e-19 0 +1202 1.30104e-18 1.95156e-18 0 +1203 -8.67362e-19 -1.95156e-18 0 +1204 1.30104e-18 3.68629e-18 0 +1205 -1.73472e-18 -3.46945e-18 0 +1206 -1.73472e-18 -2.38524e-18 0 +1207 -2.38524e-18 -9.32414e-18 0 +1208 1.73472e-18 2.60209e-18 0 +1209 -1.73472e-18 -5.20417e-18 0 +1210 -1.51788e-18 -2.1684e-19 0 +1211 -7.06087e-18 -1.10589e-17 0 +1212 -9.21572e-18 -1.11673e-17 0 +1213 8.67362e-19 1.73472e-18 0 +1214 -8.67362e-19 -5.20417e-18 0 +1215 -3.03577e-18 -2.60209e-18 0 +1216 -3.79471e-18 -1.11673e-17 0 +1217 8.67362e-19 8.67362e-19 0 +1218 -1.30104e-18 -6.50521e-18 0 +1219 -1.12757e-17 -1.05168e-17 0 +1220 0 0 0 +1221 1.73472e-18 -2.1684e-19 0 +1222 -1.51788e-18 -8.89046e-18 0 +1223 -7.61652e-18 -1.12757e-17 0 +1224 -2.1684e-18 -2.81893e-18 0 +1225 -5.63785e-18 -1.14925e-17 0 +1226 -9.97466e-18 -1.07336e-17 0 +1227 0 -6.50521e-19 0 +1228 -1.73472e-18 -9.75782e-18 0 +1229 -1.25767e-17 -1.05168e-17 0 +1230 -1.21431e-17 -1.07336e-17 0 +1231 -8.0231e-18 -1.0842e-17 0 +1232 -1.30104e-18 -2.1684e-18 0 +1233 -2.38524e-18 -1.1601e-17 0 +1234 -1.0842e-18 -1.51788e-18 0 +1235 -1.12757e-17 -1.08962e-17 0 +1236 -6.55942e-18 -1.21431e-17 0 +1237 4.33681e-19 2.38524e-18 0 +1238 0 0 0 +1239 8.67362e-19 2.60209e-18 0 +1240 -1.73472e-18 -1.51788e-18 0 +1241 1.30104e-18 2.38524e-18 0 +1242 -2.60209e-18 -4.11997e-18 0 +1243 -1.01915e-17 -1.0842e-17 0 +1244 -1.0842e-18 -1.84314e-18 0 +1245 8.67362e-19 2.81893e-18 0 +1246 -2.1684e-18 -4.33681e-18 0 +1247 -2.60209e-18 -1.27936e-17 0 +1248 0 0 0 +1249 4.33681e-19 6.50521e-19 0 +1250 -2.1684e-18 -5.63785e-18 0 +1251 -6.65768e-18 -1.17094e-17 0 +1252 -8.5652e-18 -1.06794e-17 0 +1253 0 -1.0842e-18 0 +1254 -2.38524e-18 -7.37257e-18 0 +1255 -1.30104e-18 -2.71051e-18 0 +1256 -3.57787e-18 -1.31188e-17 0 +1257 -1.0842e-17 -1.12757e-17 0 +1258 0 8.67362e-19 0 +1259 -1.73472e-18 -9.43256e-18 0 +1260 -6.9931e-18 -1.0571e-17 0 +1261 -9.75782e-19 -2.33103e-18 0 +1262 -5.31259e-18 -1.27936e-17 0 +1263 -9.54098e-18 -1.08962e-17 0 +1264 -8.67362e-19 -1.30104e-18 0 +1265 -2.38524e-18 -1.20346e-17 0 +1266 -8.67362e-19 1.30104e-18 0 +1267 4.33681e-19 3.68629e-18 0 +1268 -1.30104e-18 -4.33681e-19 0 +1269 -1.17094e-17 -1.09504e-17 0 +1270 -2.1684e-19 -2.27682e-18 0 +1271 -2.38524e-18 -1.35525e-17 0 +1272 -1.12757e-17 -1.11673e-17 0 +1273 8.67362e-19 3.68629e-18 0 +1274 -3.46945e-18 -1.73472e-18 0 +1275 0 0 0 +1276 -7.69784e-18 -1.12757e-17 0 +1277 -6.28837e-18 -1.21431e-17 0 +1278 -1.06252e-17 -1.12757e-17 0 +1279 4.33681e-19 3.46945e-18 0 +1280 -3.46945e-18 -2.1684e-18 0 +1281 0 2.81893e-18 0 +1282 -2.60209e-18 -4.98733e-18 0 +1283 -9.97466e-18 -1.12215e-17 0 +1284 -6.50521e-19 -1.84314e-18 0 +1285 -2.60209e-18 -1.40946e-17 0 +1286 -2.60209e-18 4.33681e-19 0 +1287 -2.81893e-18 -7.26415e-18 0 +1288 -5.73611e-18 -1.12215e-17 0 +1289 -8.34836e-18 -1.11944e-17 0 +1290 -1.30104e-18 0 0 +1291 -2.38524e-18 -9.1073e-18 0 +1292 -9.75782e-19 -1.6263e-18 0 +1293 -3.79471e-18 -1.36067e-17 0 +1294 -2.1684e-19 -2.1684e-19 0 +1295 -2.1684e-18 -1.13841e-17 0 +1296 -1.04083e-17 -1.11673e-17 0 +1297 -6.47811e-18 -1.15468e-17 0 +1298 0 0 0 +1299 -5.14996e-18 -1.31731e-17 0 +1300 -6.50521e-19 -2.71051e-18 0 +1301 -3.03577e-18 -1.32273e-17 0 +1302 -9.21572e-18 -1.14112e-17 0 +1303 -4.33681e-19 3.46945e-18 0 +1304 0 1.51788e-18 0 +1305 4.33681e-19 3.68629e-18 0 +1306 -2.1684e-18 -1.51788e-18 0 +1307 8.67362e-19 4.11997e-18 0 +1308 -2.60209e-18 -2.1684e-18 0 +1309 -5.42101e-19 -2.38524e-18 0 +1310 -2.60209e-18 -1.46367e-17 0 +1311 8.67362e-19 2.38524e-18 0 +1312 -3.03577e-18 -3.79471e-18 0 +1313 -1.0842e-17 -1.10589e-17 0 +1314 -1.0842e-17 -1.11673e-17 0 +1315 -5.17707e-18 -1.17365e-17 0 +1316 -7.37257e-18 -1.19533e-17 0 +1317 -1.01915e-17 -1.11673e-17 0 +1318 -4.33681e-19 1.0842e-18 0 +1319 -2.38524e-18 -6.28837e-18 0 +1320 -1.0842e-18 -1.0842e-18 0 +1321 -2.38524e-18 -1.43115e-17 0 +1322 -9.54098e-18 -1.13706e-17 0 +1323 -1.30104e-18 -1.0842e-18 0 +1324 -3.25261e-18 -8.45678e-18 0 +1325 -5.45299e-18 -1.19533e-17 0 +1326 -4.33681e-19 -4.33681e-19 0 +1327 -3.46945e-18 -1.14925e-17 0 +1328 -8.13152e-18 -1.1872e-17 0 +1329 0 0 0 +1330 -3.90313e-18 -1.37152e-17 0 +1331 0 8.67362e-19 0 +1332 -2.81893e-18 -1.1601e-17 0 +1333 -9.75782e-18 -1.12757e-17 0 +1334 -6.12574e-18 -1.24819e-17 0 +1335 -3.25261e-19 -1.84314e-18 0 +1336 -3.46945e-18 -1.2902e-17 0 +1337 -4.49944e-18 -1.24412e-17 0 +1338 -4.33681e-19 2.38524e-18 0 +1339 0 1.51788e-18 0 +1340 -8.67362e-19 4.33681e-19 0 +1341 8.67362e-19 1.51788e-18 0 +1342 -2.60209e-18 -2.49366e-18 0 +1343 -8.89046e-18 -1.18237e-17 0 +1344 2.60209e-18 2.1684e-18 0 +1345 -2.60209e-18 -4.98733e-18 0 +1346 4.33681e-19 9.75782e-19 0 +1347 -2.60209e-18 -5.20417e-18 0 +1348 3.25261e-19 -2.71051e-19 0 +1349 -2.81893e-18 -1.36067e-17 0 +1350 -4.47233e-18 -1.22379e-17 0 +1351 -1.06252e-17 -1.12215e-17 0 +1352 -1.73472e-18 9.75782e-19 0 +1353 -2.60209e-18 -8.99888e-18 0 +1354 -6.77626e-18 -1.24903e-17 0 +1355 -1.04083e-17 -1.1357e-17 0 +1356 -9.75782e-18 -1.15006e-17 0 +1357 -1.51788e-18 1.6263e-18 0 +1358 -3.25261e-18 -1.1601e-17 0 +1359 0 0 0 +1360 -2.71051e-18 -1.40675e-17 0 +1361 -9.1073e-18 -1.16687e-17 0 +1362 -2.1684e-19 2.05998e-18 0 +1363 -2.60209e-18 -1.10047e-17 0 +1364 -5.21772e-18 -1.25225e-17 0 +1365 -7.80626e-18 -1.27123e-17 0 +1366 -3.25261e-18 -1.36067e-17 0 +1367 7.58942e-19 3.25261e-19 0 +1368 -3.25261e-18 -1.17636e-17 0 +1369 4.33681e-19 2.27682e-18 0 +1370 -8.67362e-19 1.84314e-18 0 +1371 8.67362e-19 1.73472e-18 0 +1372 -2.60209e-18 -2.1684e-18 0 +1373 -9.32414e-18 -1.18043e-17 0 +1374 -5.77338e-18 -1.28885e-17 0 +1375 0 -1.30104e-18 0 +1376 1.73472e-18 1.73472e-18 0 +1377 -3.46945e-18 -4.66207e-18 0 +1378 -2.60209e-18 -1.21431e-17 0 +1379 -3.7405e-18 -1.28139e-17 0 +1380 8.67362e-19 2.1684e-18 0 +1381 -1.73472e-18 -5.20417e-18 0 +1382 -8.13152e-18 -1.22244e-17 0 +1383 -4.33681e-19 1.73472e-18 0 +1384 -2.81893e-18 -8.13152e-18 0 +1385 0 0 0 +1386 -3.03577e-18 -1.24683e-17 0 +1387 -1.51788e-18 7.58942e-19 0 +1388 -3.68629e-18 -1.02999e-17 0 +1389 -4.14707e-18 -1.25158e-17 0 +1390 -9.97466e-18 -1.14587e-17 0 +1391 -6.39679e-18 -1.25632e-17 0 +1392 -9.75782e-18 -1.16552e-17 0 +1393 -8.67362e-19 1.0842e-18 0 +1394 -9.32414e-18 -1.18991e-17 0 +1395 -3.03577e-18 -1.11131e-17 0 +1396 -2.81893e-18 -1.29562e-17 0 +1397 -8.45678e-18 -1.19262e-17 0 +1398 7.58942e-19 2.81893e-18 0 +1399 -2.81893e-18 -1.10589e-17 0 +1400 -5.13302e-18 -1.24819e-17 0 +1401 -2.92735e-18 -1.29168e-17 0 +1402 -7.48099e-18 -1.24683e-17 0 +1403 3.25261e-19 3.52366e-19 0 +1404 -2.60209e-18 -1.10318e-17 0 +1405 -2.1684e-19 0 0 +1406 0 1.95156e-18 0 +1407 -1.30104e-18 -3.36103e-18 0 +1408 4.33681e-19 2.49366e-18 0 +1409 -3.03577e-18 -5.42101e-18 0 +1410 4.33681e-19 3.36103e-18 0 +1411 -3.03577e-18 -6.39679e-18 0 +1412 0 0 0 +1413 -2.60209e-18 -1.18449e-17 0 +1414 -8.67362e-18 -1.17365e-17 0 +1415 -4.33681e-19 2.27682e-18 0 +1416 -2.60209e-18 -8.13152e-18 0 +1417 -5.52943e-18 -1.21973e-17 0 +1418 -3.46945e-18 -1.24006e-17 0 +1419 -4.33681e-19 1.19262e-18 0 +1420 -3.46945e-18 -1.01373e-17 0 +1421 -7.69784e-18 -1.18991e-17 0 +1422 -2.60209e-18 -1.29223e-17 0 +1423 -1.51788e-18 2.1684e-19 0 +1424 -2.81893e-18 -1.0842e-17 0 +1425 -3.98444e-18 -1.1872e-17 0 +1426 -6.55942e-18 -1.2387e-17 0 +1427 8.67362e-19 7.04731e-19 0 +1428 -3.03577e-18 -1.08962e-17 0 +1429 -9.54098e-18 -1.16823e-17 0 +1430 -9.32414e-18 -1.18178e-17 0 +1431 -8.89046e-18 -1.1872e-17 0 +1432 -2.49366e-18 -1.27326e-17 0 +1433 1.68051e-18 4.33681e-19 0 +1434 -2.60209e-18 -1.07878e-17 0 +1435 -8.0231e-18 -1.17094e-17 0 +1436 -5.34647e-18 -1.20889e-17 0 +1437 -2.1684e-19 -6.50521e-19 0 +1438 -4.33681e-19 -2.60209e-18 0 +1439 0 1.73472e-18 0 +1440 -1.73472e-18 -5.31259e-18 0 +1441 -2.6563e-18 -1.23735e-17 0 +1442 0 0 0 +1443 -2.1684e-18 -1.08014e-17 0 +1444 -7.04731e-18 -1.23599e-17 0 +1445 2.1684e-19 4.01155e-18 0 +1446 -3.25261e-18 -6.61363e-18 0 +1447 4.33681e-19 2.27682e-18 0 +1448 -3.03577e-18 -8.18573e-18 0 +1449 8.67362e-19 1.51788e-18 0 +1450 -3.03577e-18 -9.16151e-18 0 +1451 -2.71051e-18 -1.22786e-17 0 +1452 -8.45678e-18 -1.16552e-17 0 +1453 -5.55654e-18 -1.22515e-17 0 +1454 -3.25261e-18 -1.23057e-17 0 +1455 -2.1684e-19 -4.87891e-19 0 +1456 -3.46945e-18 -1.12215e-17 0 +1457 -7.15573e-18 -1.16552e-17 0 +1458 4.33681e-19 -1.02999e-18 0 +1459 -2.60209e-18 -1.10589e-17 0 +1460 -1.95156e-18 -1.21024e-17 0 +1461 1.0842e-18 -2.71051e-20 0 +1462 -2.81893e-18 -1.11673e-17 0 +1463 -4.09286e-18 -1.24141e-17 0 +1464 -6.77626e-18 -1.21973e-17 0 +1465 -8.89046e-18 -1.17907e-17 0 +1466 -8.89046e-18 -1.1872e-17 0 +1467 -2.1684e-18 -1.20617e-17 0 +1468 -8.67362e-18 -1.18178e-17 0 +1469 0 0 0 +1470 -2.1684e-18 -9.83913e-18 0 +1471 -7.69784e-18 -1.1601e-17 0 +1472 -8.67362e-19 -2.81893e-18 0 +1473 -2.1684e-19 -1.51788e-18 0 +1474 -8.67362e-19 -3.36103e-18 0 +1475 4.33681e-19 1.30104e-18 0 +1476 -2.60209e-18 -4.44523e-18 0 +1477 -5.38374e-18 -1.25225e-17 0 +1478 2.1684e-19 3.14419e-18 0 +1479 -4.11997e-18 -5.47522e-18 0 +1480 -2.60209e-18 -1.11741e-17 0 +1481 -2.38524e-18 -1.26852e-17 0 +1482 1.0842e-18 3.52366e-18 0 +1483 -3.90313e-18 -8.18573e-18 0 +1484 -6.50521e-18 -1.14925e-17 0 +1485 5.42101e-19 1.6263e-18 0 +1486 -3.25261e-18 -1.01915e-17 0 +1487 -2.05998e-18 -1.12622e-17 0 +1488 1.0842e-19 -1.13841e-18 0 +1489 -2.60209e-18 -1.1357e-17 0 +1490 -3.08998e-18 -1.27936e-17 0 +1491 -5.82759e-18 -1.23057e-17 0 +1492 -8.34836e-18 -1.19262e-17 0 +1493 5.96311e-19 3.25261e-19 0 +1494 -1.95156e-18 -1.13841e-17 0 +1495 -2.05998e-18 -1.24683e-17 0 +1496 -6.93889e-18 -1.19804e-17 0 +1497 0 0 0 +1498 -1.73472e-18 -1.10453e-17 0 +1499 -4.03865e-18 -1.2902e-17 0 +1500 -6.34258e-18 -1.17636e-17 0 +1501 -8.89046e-18 -1.19804e-17 0 +1502 -2.27682e-18 -1.2631e-17 0 +1503 -8.45678e-18 -1.20889e-17 0 +1504 0 -2.60209e-18 0 +1505 -4.33681e-19 -3.36103e-18 0 +1506 -1.51788e-18 -1.1313e-17 0 +1507 -8.34836e-18 -1.21431e-17 0 +1508 -2.1684e-19 -2.22261e-18 0 +1509 -1.51788e-18 -4.2826e-18 0 +1510 8.67362e-19 1.89735e-18 0 +1511 -2.1684e-18 -4.98733e-18 0 +1512 6.50521e-19 8.67362e-19 0 +1513 -7.58942e-18 -1.23599e-17 0 +1514 -3.68629e-18 -7.58942e-18 0 +1515 -5.19401e-18 -1.2631e-17 0 +1516 -2.27682e-18 -1.11131e-17 0 +1517 1.30104e-18 9.21572e-19 0 +1518 -3.68629e-18 -9.70361e-18 0 +1519 -2.54788e-18 -1.31731e-17 0 +1520 -6.50521e-18 -1.24141e-17 0 +1521 8.67362e-19 8.13152e-19 0 +1522 -3.03577e-18 -9.94755e-18 0 +1523 -2.27682e-18 -1.22244e-17 0 +1524 5.96311e-19 -1.6263e-19 0 +1525 -2.38524e-18 -9.934e-18 0 +1526 -2.71051e-18 -1.34983e-17 0 +1527 -5.66496e-18 -1.21973e-17 0 +1528 -7.91468e-18 -1.24683e-17 0 +1529 0 0 0 +1530 -1.73472e-18 -9.94755e-18 0 +1531 -2.05998e-18 -1.30646e-17 0 +1532 -6.83047e-18 -1.2631e-17 0 +1533 -2.1684e-18 -1.08624e-17 0 +1534 -3.64563e-18 -1.39862e-17 0 +1535 2.1684e-19 -3.52366e-18 0 +1536 4.33681e-19 -2.22261e-18 0 +1537 -6.50521e-19 -5.58364e-18 0 +1538 6.50521e-19 0 0 +1539 -2.1684e-19 -6.28837e-18 0 +1540 -6.23416e-18 -1.24683e-17 0 +1541 -2.33103e-18 -1.33899e-17 0 +1542 -1.73472e-18 -1.04897e-17 0 +1543 -8.34836e-18 -1.22515e-17 0 +1544 1.51788e-18 1.6263e-19 0 +1545 -1.51788e-18 -7.75205e-18 0 +1546 -8.13152e-18 -1.24141e-17 0 +1547 -8.13152e-18 -1.25767e-17 0 +1548 9.75782e-19 -2.11419e-18 0 +1549 -2.60209e-18 -8.40257e-18 0 +1550 1.73472e-18 1.11131e-18 0 +1551 -7.26415e-18 -1.29562e-17 0 +1552 -3.90313e-18 -8.72783e-18 0 +1553 -1.73472e-18 -1.08962e-17 0 +1554 -4.33003e-18 -1.34983e-17 0 +1555 -2.22261e-18 -1.38778e-17 0 +1556 1.78893e-18 7.58942e-19 0 +1557 -2.60209e-18 -8.49743e-18 0 +1558 -6.17995e-18 -1.2902e-17 0 +1559 0 0 0 +1560 -1.95156e-18 -9.01243e-18 0 +1561 -2.38524e-18 -1.24412e-17 0 +1562 -2.6834e-18 -1.42573e-17 0 +1563 -2.38524e-18 -9.83236e-18 0 +1564 -4.98733e-18 -1.29562e-17 0 +1565 -7.48099e-18 -1.31188e-17 0 +1566 -2.1684e-18 -1.33357e-17 0 +1567 -6.77626e-18 -1.33357e-17 0 +1568 -2.49366e-18 -8.60585e-18 0 +1569 2.1684e-19 -2.81893e-18 0 +1570 -2.1684e-19 -5.14996e-18 0 +1571 1.51788e-18 -4.33681e-19 0 +1572 2.1684e-19 -7.04731e-18 0 +1573 1.40946e-18 -4.33681e-19 0 +1574 0 -7.88757e-18 0 +1575 -3.53721e-18 -1.38778e-17 0 +1576 1.40946e-18 -4.33681e-19 0 +1577 -8.67362e-19 -7.91468e-18 0 +1578 -2.1684e-18 -9.81203e-18 0 +1579 -2.00577e-18 -1.43657e-17 0 +1580 -5.9089e-18 -1.32273e-17 0 +1581 6.50521e-19 -1.6263e-18 0 +1582 -2.60209e-18 -7.56231e-18 0 +1583 -8.0231e-18 -1.26852e-17 0 +1584 -7.48099e-18 -1.28478e-17 0 +1585 -7.37257e-18 -1.30104e-17 0 +1586 1.89735e-18 8.26704e-19 0 +1587 -3.46945e-18 -6.34258e-18 0 +1588 -1.6263e-18 -1.17365e-17 0 +1589 -6.83047e-18 -1.35525e-17 0 +1590 0 0 0 +1591 -3.46945e-18 -6.3087e-18 0 +1592 -4.30632e-18 -1.32273e-17 0 +1593 -1.95156e-18 -1.45825e-17 0 +1594 -6.12574e-18 -1.35525e-17 0 +1595 -3.46945e-18 -7.9079e-18 0 +1596 -2.1684e-18 -1.29562e-17 0 +1597 -2.60209e-18 -8.71427e-18 0 +1598 -2.76472e-18 -1.43115e-17 0 +1599 -4.98733e-18 -1.35525e-17 0 +1600 -6.93889e-18 -1.36609e-17 0 +1601 -2.1684e-19 -4.66207e-18 0 +1602 -2.38524e-18 -1.46367e-17 0 +1603 1.51788e-18 -2.22261e-18 0 +1604 -2.1684e-19 -5.31259e-18 0 +1605 2.49366e-18 -3.25261e-19 0 +1606 4.33681e-19 -7.07442e-18 0 +1607 -2.60209e-18 -9.35124e-18 0 +1608 2.05998e-18 -5.96311e-19 0 +1609 -2.1684e-19 -7.58942e-18 0 +1610 -6.50521e-18 -1.38778e-17 0 +1611 -7.58942e-19 -6.50521e-19 0 +1612 -2.1684e-19 -7.53521e-18 0 +1613 -3.78116e-18 -1.37694e-17 0 +1614 -1.6263e-19 -3.38813e-19 0 +1615 -1.95156e-18 -6.87113e-18 0 +1616 -2.71051e-18 -1.13299e-17 0 +1617 -1.89735e-18 -1.40946e-17 0 +1618 -5.63785e-18 -1.38778e-17 0 +1619 0 0 0 +1620 -7.48099e-18 -1.33357e-17 0 +1621 -3.90313e-18 -7.32175e-18 0 +1622 -6.93889e-18 -1.34441e-17 0 +1623 -6.72205e-18 -1.37694e-17 0 +1624 -2.81893e-18 -1.24683e-17 0 +1625 -3.46945e-18 -6.74238e-18 0 +1626 -6.34258e-18 -1.4203e-17 0 +1627 -4.56043e-18 -1.38778e-17 0 +1628 -2.1684e-18 -1.33357e-17 0 +1629 -3.90313e-18 -7.03376e-18 0 +1630 -6.01732e-18 -1.40946e-17 0 +1631 -3.25261e-18 -1.34983e-17 0 +1632 -4.01155e-18 -8.75493e-18 0 +1633 3.25261e-19 -2.03288e-18 0 +1634 -5.42101e-19 -5.39391e-18 0 +1635 -3.1984e-18 -1.36609e-17 0 +1636 1.19262e-18 -7.31836e-19 0 +1637 -4.33681e-19 -6.20706e-18 0 +1638 -4.97378e-18 -1.39862e-17 0 +1639 9.75782e-19 6.50521e-19 0 +1640 0 -7.20994e-18 0 +1641 -6.28837e-18 -1.43115e-17 0 +1642 -2.60209e-18 -1.29562e-17 0 +1643 -8.13152e-19 1.24683e-18 0 +1644 -2.1684e-19 -7.94178e-18 0 +1645 -3.57787e-18 -1.02999e-17 0 +1646 -1.95156e-18 5.55654e-19 0 +1647 -2.1684e-19 -6.4239e-18 0 +1648 -6.12574e-18 -1.44199e-17 0 +1649 0 0 0 +1650 -2.38524e-18 -7.53859e-18 0 +1651 -4.67562e-18 -1.35525e-17 0 +1652 -3.36103e-18 -1.0842e-17 0 +1653 -2.11419e-18 -1.25225e-17 0 +1654 -3.46945e-18 -6.91857e-18 0 +1655 -5.25838e-18 -1.4203e-17 0 +1656 -6.72205e-18 -1.38778e-17 0 +1657 -6.28837e-18 -1.39862e-17 0 +1658 -5.96311e-18 -1.44199e-17 0 +1659 -3.46945e-18 -6.64074e-18 0 +1660 -4.11997e-18 -1.25225e-17 0 +1661 -5.85469e-18 -1.48536e-17 0 +1662 -2.52077e-18 -1.33357e-17 0 +1663 -5.02121e-18 -1.34441e-17 0 +1664 -3.79471e-18 -7.26415e-18 0 +1665 -3.46945e-18 -1.18178e-17 0 +1666 -5.58364e-18 -1.45283e-17 0 +1667 -1.0842e-18 -3.98444e-18 0 +1668 4.33681e-19 -4.06576e-19 0 +1669 -6.50521e-19 -5.39391e-18 0 +1670 -5.09575e-18 -8.51099e-18 0 +1671 0 5.42101e-19 0 +1672 -1.0842e-18 -6.80337e-18 0 +1673 -8.13152e-19 1.76183e-18 0 +1674 -5.42101e-19 -7.11508e-18 0 +1675 -3.44234e-18 -1.33357e-17 0 +1676 -2.30393e-18 7.31836e-19 0 +1677 2.1684e-19 -6.97955e-18 0 +1678 -5.48877e-18 -1.35525e-17 0 +1679 -2.6563e-18 -1.12757e-17 0 +1680 -3.90313e-18 -8.61941e-18 0 +1681 -5.58364e-18 -1.48536e-17 0 +1682 0 0 0 +1683 -1.40946e-18 -7.03037e-18 0 +1684 -2.1684e-18 -6.76271e-18 0 +1685 -5.69206e-18 -1.48536e-17 0 +1686 -4.44523e-18 -1.00289e-17 0 +1687 -4.37069e-18 -1.35525e-17 0 +1688 -2.81893e-18 -5.70561e-18 0 +1689 -2.60209e-18 -1.22515e-17 0 +1690 -5.25838e-18 -1.43115e-17 0 +1691 -3.79471e-18 -5.69206e-18 0 +1692 -5.85469e-18 -1.40946e-17 0 +1693 -5.52943e-18 -1.43115e-17 0 +1694 -4.44523e-18 -1.03541e-17 0 +1695 -5.3668e-18 -1.47451e-17 0 +1696 -5.3668e-18 -1.45283e-17 0 +1697 -5.09575e-18 -5.85469e-18 0 +1698 -2.71051e-18 -1.27936e-17 0 +1699 -4.80098e-18 -1.35525e-17 0 +1700 -1.51788e-18 -3.87602e-18 0 +1701 -1.84314e-18 -5.12286e-18 0 +1702 -4.33681e-19 -7.31836e-19 0 +1703 -1.30104e-18 -5.80048e-18 0 +1704 -3.79471e-18 -1.02999e-17 0 +1705 -7.58942e-19 1.15196e-18 0 +1706 -1.95156e-18 -6.35614e-18 0 +1707 -5.3397e-18 -1.45283e-17 0 +1708 -4.77049e-18 -5.69206e-18 0 +1709 -2.03288e-18 -8.13152e-20 0 +1710 -9.75782e-19 -6.08508e-18 0 +1711 0 0 0 +1712 0 -6.02071e-18 0 +1713 -3.80826e-18 -1.36609e-17 0 +1714 -2.05998e-18 -6.72544e-18 0 +1715 -5.12286e-18 -1.45283e-17 0 +1716 -5.09575e-18 -7.48099e-18 0 +1717 -2.87314e-18 -1.0571e-17 0 +1718 -5.3668e-18 -1.44199e-17 0 +1719 -2.81893e-18 -5.23128e-18 0 +1720 -5.04154e-18 -1.46367e-17 0 +1721 -5.20417e-18 -8.89046e-18 0 +1722 -3.46945e-18 -4.25549e-18 0 +1723 -4.20128e-18 -1.4203e-17 0 +1724 -2.98156e-18 -1.1601e-17 0 +1725 -5.01444e-18 -1.44199e-17 0 +1726 -4.22839e-18 -5.23128e-18 0 +1727 -4.93312e-18 -9.59519e-18 0 +1728 -5.04154e-18 -1.40946e-17 0 +1729 -5.04154e-18 -1.43115e-17 0 +1730 -4.98733e-18 -1.4203e-17 0 +1731 -4.98733e-18 -6.36969e-18 0 +1732 -3.79471e-18 -4.55365e-18 0 +1733 -1.40946e-18 -2.38524e-18 0 +1734 -2.38524e-18 -5.09575e-18 0 +1735 -3.08998e-18 -1.36609e-17 0 +1736 -1.13841e-18 -5.96311e-19 0 +1737 -2.27682e-18 -6.17995e-18 0 +1738 -4.87891e-18 -1.43115e-17 0 +1739 -4.77727e-18 -1.4962e-17 0 +1740 -1.35525e-18 9.89334e-19 0 +1741 -1.73472e-18 -5.28549e-18 0 +1742 -3.63208e-18 -9.97466e-18 0 +1743 0 0 0 +1744 -7.58942e-19 -4.69595e-18 0 +1745 -5.09575e-18 -7.10152e-18 0 +1746 -4.8518e-18 -1.4203e-17 0 +1747 -1.95156e-18 -5.01444e-18 0 +1748 -3.03577e-18 -4.07931e-18 0 +1749 -3.63208e-18 -1.4962e-17 0 +1750 -5.20417e-18 -8.40257e-18 0 +1751 -2.92735e-18 -1.05168e-17 0 +1752 -4.36391e-18 -1.48536e-17 0 +1753 -3.79471e-18 -3.78116e-18 0 +1754 -4.87891e-18 -1.4203e-17 0 +1755 -4.01155e-18 -4.06576e-18 0 +1756 -5.42101e-18 -8.72783e-18 0 +1757 -4.71628e-18 -1.40946e-17 0 +1758 -3.998e-18 -1.58294e-17 0 +1759 -3.30682e-18 -1.24683e-17 0 +1760 -4.77049e-18 -5.69206e-18 0 +1761 -4.22839e-18 -1.45283e-17 0 +1762 -4.71628e-18 -9.43256e-18 0 +1763 -4.06576e-18 -3.29326e-18 0 +1764 -4.11997e-18 -4.32326e-18 0 +1765 -2.22261e-18 -1.23328e-18 0 +1766 -2.71051e-18 -3.69984e-18 0 +1767 -4.39102e-18 -1.40946e-17 0 +1768 -4.44523e-18 -1.40946e-17 0 +1769 -2.43945e-18 -2.84603e-19 0 +1770 -2.38524e-18 -4.03188e-18 0 +1771 -5.09575e-18 -6.17995e-18 0 +1772 -4.55365e-18 -1.39862e-17 0 +1773 0 0 0 +1774 -7.58942e-19 -3.30343e-18 0 +1775 -3.87602e-18 -1.4962e-17 0 +1776 -3.95734e-18 -1.55041e-17 0 +1777 -4.60786e-18 -1.4203e-17 0 +1778 -8.67362e-19 -3.3983e-18 0 +1779 -3.1984e-18 -9.86624e-18 0 +1780 -5.96311e-18 -8.5652e-18 0 +1781 -2.27682e-18 -3.42879e-18 0 +1782 -4.44523e-18 -1.44199e-17 0 +1783 -2.05998e-18 -1.82959e-18 0 +1784 -4.06576e-18 -1.56125e-17 0 +1785 -4.71628e-18 -8.45678e-18 0 +1786 -3.79471e-18 -2.71051e-18 0 +1787 -2.92735e-18 -1.12757e-17 0 +1788 -3.79471e-18 -1.47451e-17 0 +1789 -4.39102e-18 -1.40946e-17 0 +1790 -4.77049e-18 -4.22839e-18 0 +1791 -4.93312e-18 -9.05309e-18 0 +1792 -4.25549e-18 -1.4203e-17 0 +1793 -3.80148e-18 -1.56125e-17 0 +1794 -3.98444e-18 -1.43115e-17 0 +1795 -5.09575e-18 -5.25838e-18 0 +1796 -4.8247e-18 -1.76183e-18 0 +1797 -4.39102e-18 -4.94667e-19 0 +1798 -4.2826e-18 -1.8838e-18 0 +1799 -3.06287e-18 -1.28749e-19 0 +1800 -3.79471e-18 -2.63597e-18 0 +1801 -3.7405e-18 -1.48536e-17 0 +1802 0 0 0 +1803 -2.38524e-18 -2.77827e-18 0 +1804 -4.17418e-18 -8.72783e-18 0 +1805 -1.19262e-18 -1.75039e-18 0 +1806 -6.17995e-18 -8.0231e-18 0 +1807 -3.7405e-18 -1.38778e-17 0 +1808 -3.90313e-18 -1.39862e-17 0 +1809 -3.95734e-18 -1.39862e-17 0 +1810 -1.30104e-18 -2.0261e-18 0 +1811 -4.17418e-18 -1.57209e-17 0 +1812 -3.15096e-18 -1.51788e-17 0 +1813 -4.09286e-18 -1.40946e-17 0 +1814 -1.40946e-18 -1.0571e-18 0 +1815 -5.52943e-18 -7.75205e-18 0 +1816 -2.76472e-18 -1.02999e-17 0 +1817 -1.51788e-18 -1.40946e-18 0 +1818 -3.82181e-18 -1.48536e-17 0 +1819 -4.98733e-18 -8.51099e-18 0 +1820 -3.68629e-18 -3.46945e-18 0 +1821 -3.57787e-18 -1.60462e-17 0 +1822 -3.25261e-18 -1.36609e-17 0 +1823 -3.13741e-18 -1.52873e-17 0 +1824 -5.20417e-18 -4.47233e-18 0 +1825 -3.65918e-18 -1.4203e-17 0 +1826 -4.49944e-18 -8.23994e-18 0 +1827 -4.93312e-18 -1.96512e-19 0 +1828 -5.25838e-18 2.57498e-19 0 +1829 -3.60497e-18 -1.46367e-17 0 +1830 -4.98733e-18 2.98156e-19 0 +1831 -5.3668e-18 3.79471e-19 0 +1832 -7.26415e-18 -7.64363e-18 0 +1833 0 0 0 +1834 -4.22839e-18 -1.3417e-18 0 +1835 -3.82181e-18 -1.51788e-17 0 +1836 -3.08998e-18 -1.57209e-17 0 +1837 -2.1684e-18 -8.82608e-19 0 +1838 -1.51788e-18 1.01644e-19 0 +1839 -3.68629e-18 -8.99888e-18 0 +1840 -3.11708e-18 -1.55041e-17 0 +1841 -5.85469e-18 -7.20994e-18 0 +1842 -1.30104e-18 1.38236e-18 0 +1843 -3.14419e-18 -1.36609e-17 0 +1844 -3.14419e-18 -1.38778e-17 0 +1845 -3.33392e-18 -1.4203e-17 0 +1846 -4.05221e-18 -1.58294e-17 0 +1847 -1.73472e-18 0 0 +1848 -2.81723e-18 -1.57209e-17 0 +1849 -5.52943e-18 -6.9931e-18 0 +1850 -3.2255e-18 -1.46367e-17 0 +1851 -4.3097e-18 -1.1601e-17 0 +1852 -2.49366e-18 -3.49655e-18 0 +1853 -3.06287e-18 -1.55041e-17 0 +1854 -3.14419e-18 -4.2826e-18 0 +1855 -5.20417e-18 -8.0231e-18 0 +1856 -2.90702e-18 -1.61546e-17 0 +1857 -4.03865e-18 -1.36609e-17 0 +1858 -5.3668e-18 -5.82759e-18 0 +1859 -4.47233e-18 4.87891e-19 0 +1860 -4.74338e-18 3.04932e-20 0 +1861 -5.58364e-18 -1.30782e-18 0 +1862 -2.33103e-18 -1.59378e-17 0 +1863 -3.00866e-18 -1.45283e-17 0 +1864 -3.08998e-18 -8.94467e-18 0 +1865 0 0 0 +1866 -5.96311e-18 -1.01644e-19 0 +1867 -4.01155e-18 2.35136e-18 0 +1868 -6.55942e-18 -5.74627e-18 0 +1869 -2.61564e-18 -1.51788e-17 0 +1870 -2.54788e-18 3.75405e-18 0 +1871 -3.57787e-18 -1.50704e-17 0 +1872 -2.46995e-18 -1.60462e-17 0 +1873 -1.89735e-18 3.41524e-18 0 +1874 -3.00866e-18 -1.01915e-17 0 +1875 -5.69206e-18 -6.07153e-18 0 +1876 -1.51788e-18 1.73472e-18 0 +1877 -2.50722e-18 -1.59378e-17 0 +1878 -2.49366e-18 -1.37694e-17 0 +1879 -1.84314e-18 -2.62919e-18 0 +1880 -2.43945e-18 -1.39862e-17 0 +1881 -2.54788e-18 -1.4203e-17 0 +1882 -5.9089e-18 -7.37257e-18 0 +1883 -4.36391e-18 -1.26852e-17 0 +1884 -2.1684e-18 -3.52366e-18 0 +1885 -2.22261e-18 -1.4962e-17 0 +1886 -1.96173e-18 -1.58294e-17 0 +1887 -3.52366e-18 -5.14996e-18 0 +1888 -2.23617e-18 -1.51788e-17 0 +1889 -4.06576e-18 -8.78204e-18 0 +1890 -3.44234e-18 -1.55041e-17 0 +1891 -4.03865e-18 -1.47451e-17 0 +1892 -4.44523e-18 9.45289e-19 0 +1893 -6.01732e-18 2.53093e-18 0 +1894 -4.66207e-18 -5.74627e-18 0 +1895 0 0 0 +1896 -7.10152e-18 1.65341e-18 0 +1897 -5.52943e-18 4.56043e-18 0 +1898 -3.7405e-18 4.98394e-18 0 +1899 -2.11419e-18 -9.32414e-18 0 +1900 -2.07354e-18 -1.47451e-17 0 +1901 -2.98156e-18 5.46844e-18 0 +1902 -5.47522e-18 -4.98733e-18 0 +1903 -1.62969e-18 -1.6263e-17 0 +1904 -2.45301e-18 -1.53957e-17 0 +1905 -2.60209e-18 2.61564e-18 0 +1906 -1.8838e-18 -1.53957e-17 0 +1907 -2.49366e-18 2.71051e-19 0 +1908 -1.87533e-18 -1.58294e-17 0 +1909 -6.01732e-18 -5.69206e-18 0 +1910 -2.92735e-18 -1.22515e-17 0 +1911 -2.27682e-18 -2.95445e-18 0 +1912 -1.87025e-18 -1.56125e-17 0 +1913 -1.87025e-18 -1.39862e-17 0 +1914 -3.67273e-18 -1.50704e-17 0 +1915 -1.72117e-18 -1.43115e-17 0 +1916 -1.76183e-18 -1.46367e-17 0 +1917 -4.98733e-18 -7.96889e-18 0 +1918 -2.54788e-18 -4.93312e-18 0 +1919 -3.84892e-18 -1.46367e-17 0 +1920 -3.1984e-18 -6.28837e-18 0 +1921 -1.15027e-18 -1.64799e-17 0 +1922 -3.41524e-18 -8.89046e-18 0 +1923 -1.66018e-18 -1.56125e-17 0 +1924 -2.84603e-18 7.18284e-19 0 +1925 0 0 0 +1926 -4.74338e-18 9.96111e-19 0 +1927 -5.31259e-18 2.18704e-18 0 +1928 -5.25838e-18 2.70922e-18 0 +1929 -3.7405e-18 -4.55365e-18 0 +1930 -3.23905e-18 -1.51788e-17 0 +1931 -2.92735e-18 3.64563e-18 0 +1932 -3.36103e-18 2.74439e-18 0 +1933 -3.90313e-18 -6.39679e-18 0 +1934 -3.00866e-18 -1.12757e-17 0 +1935 -2.40557e-18 -1.45283e-17 0 +1936 -2.81893e-18 6.77626e-19 0 +1937 -1.02999e-18 -1.51788e-17 0 +1938 -2.05998e-18 -2.27682e-18 0 +1939 -2.29038e-18 -1.53957e-17 0 +1940 -4.77049e-18 -8.67362e-18 0 +1941 -2.1684e-18 -5.17707e-18 0 +1942 -1.32476e-18 -1.63715e-17 0 +1943 -2.90024e-18 -1.43115e-17 0 +1944 -2.54788e-18 -1.45283e-17 0 +1945 -2.05998e-18 -6.47811e-18 0 +1946 -9.75782e-19 -1.43115e-17 0 +1947 -3.33392e-18 -1.01373e-17 0 +1948 -8.74138e-19 -1.46367e-17 0 +1949 -9.48677e-19 -1.50704e-17 0 +1950 -8.60585e-19 -1.53957e-17 0 +1951 -7.23366e-19 -1.66967e-17 0 +1952 -3.37458e-18 -1.46367e-17 0 +1953 -1.68051e-18 -6.93889e-18 0 +1954 0 0 0 +1955 -2.08709e-18 1.09606e-18 0 +1956 -4.09286e-18 1.97697e-18 0 +1957 -5.82759e-19 -1.52873e-17 0 +1958 -5.20417e-18 2.08624e-18 0 +1959 -2.24972e-18 -1.09504e-17 0 +1960 -4.06576e-18 1.23836e-18 0 +1961 -6.77626e-19 -1.60462e-17 0 +1962 -2.92735e-18 -7.96889e-18 0 +1963 -1.51788e-18 1.00289e-18 0 +1964 -2.41235e-18 -1.38778e-17 0 +1965 -8.74138e-19 -1.69136e-17 0 +1966 -1.51788e-18 -3.18484e-19 0 +1967 -2.11419e-18 -2.83248e-18 0 +1968 -2.95445e-18 -9.86624e-18 0 +1969 -2.60209e-18 -1.33357e-17 0 +1970 -2.81893e-18 -4.74338e-18 0 +1971 -5.84241e-19 -1.59378e-17 0 +1972 -1.46028e-18 -1.50704e-17 0 +1973 -3.33392e-18 -1.13299e-17 0 +1974 -2.6563e-18 -5.9089e-18 0 +1975 -1.17399e-18 -1.52873e-17 0 +1976 -1.14858e-18 -1.48536e-17 0 +1977 -1.30104e-18 -1.20346e-17 0 +1978 0 -1.43115e-17 0 +1979 0 -1.46367e-17 0 +1980 -2.6563e-18 -7.99599e-18 0 +1981 0 -1.48536e-17 0 +1982 0 0 0 +1983 -3.30682e-18 3.12725e-18 0 +1984 -5.06865e-18 5.23466e-18 0 +1985 0 -1.50704e-17 0 +1986 -5.17707e-18 2.23278e-18 0 +1987 0 -1.55041e-17 0 +1988 -3.25261e-18 8.19928e-19 0 +1989 -2.1684e-18 -8.83625e-18 0 +1990 -1.16552e-18 -1.31188e-17 0 +1991 0 -1.56125e-17 0 +1992 -6.23416e-19 -2.30393e-19 0 +1993 -1.42302e-18 -1.43115e-17 0 +1994 -1.15196e-18 -1.50704e-17 0 +1995 -2.30393e-18 -9.54098e-18 0 +1996 0 -1.63715e-17 0 +1997 -1.21973e-18 -3.02221e-18 0 +1998 0 -1.6263e-17 0 +1999 -2.84603e-18 -5.04154e-18 0 +2000 -2.00577e-18 -1.01915e-17 0 +2001 -6.23416e-19 -1.46367e-17 0 +2002 0 -1.58294e-17 0 +2003 -3.38813e-18 -5.96311e-18 0 +2004 0 -1.50704e-17 0 +2005 -3.25261e-18 -7.04731e-18 0 +2006 0 -1.43115e-17 0 +2007 -2.98156e-19 -1.38778e-17 0 +2008 0 0 0 +2009 -1.84314e-18 1.71948e-18 0 +2010 -4.59431e-18 1.94733e-18 0 +2011 0 -1.40946e-17 0 +2012 -5.04154e-18 5.31937e-19 0 +2013 -3.27971e-18 -9.21572e-18 0 +2014 -2.33103e-18 -3.6253e-19 0 +2015 -2.08709e-18 -8.78204e-18 0 +2016 -1.27394e-18 -1.96512e-18 0 +2017 -7.04731e-19 -1.31188e-17 0 +2018 0 -1.48536e-17 0 +2019 -1.43657e-18 -1.24683e-17 0 +2020 -1.16552e-18 -9.26993e-18 0 +2021 0 -1.4203e-17 0 +2022 -9.82558e-19 -1.25225e-17 0 +2023 -2.38524e-18 -5.01444e-18 0 +2024 -2.62919e-18 -7.20994e-18 0 +2025 0 -1.37694e-17 0 +2026 -2.52077e-18 -6.24772e-18 0 +2027 0 0 0 +2028 -1.0571e-18 -5.28972e-19 0 +2029 -2.81893e-18 -8.53809e-18 0 +2030 -3.49655e-18 1.2498e-18 0 +2031 0 -1.37694e-17 0 +2032 -4.44523e-18 -4.81115e-19 0 +2033 -6.50521e-19 -1.19804e-17 0 +2034 -1.11131e-18 -1.30104e-18 0 +2035 0 -1.32815e-17 0 +2036 -1.0571e-18 -8.99888e-18 0 +2037 -1.57209e-18 -5.52265e-18 0 +2038 0 -1.19262e-17 0 +2039 -1.84314e-18 -6.966e-18 0 +2040 -2.1413e-18 -8.07731e-18 0 +2041 -8.67362e-19 -6.39679e-18 0 +2042 -2.30393e-18 -7.57586e-18 0 +2043 0 -1.08962e-17 0 +2044 0 0 0 +2045 -1.999e-18 1.41116e-18 0 +2046 -1.57209e-18 -6.64074e-18 0 +2047 -4.05221e-18 9.71547e-19 0 +2048 -3.46945e-18 4.26905e-19 0 +2049 -2.4259e-18 -2.15485e-18 0 +2050 0 -8.94467e-18 0 +2051 -1.13841e-18 -6.34258e-18 0 +2052 -1.58565e-18 -6.1664e-18 0 +2053 0 -8.34836e-18 0 +2054 0 0 0 +2055 0 -7.18284e-18 0 +2056 -9.28348e-19 -8.21283e-18 0 +2057 -5.28549e-19 -7.47083e-19 0 +2058 -1.27394e-18 -7.7656e-18 0 +2059 -2.81893e-18 -1.78216e-18 0 +2060 -3.21195e-18 -4.92296e-18 0 +2061 -2.48011e-18 -6.43067e-18 0 +2062 0 -7.94178e-18 0 +2063 -4.47233e-19 -7.02021e-18 0 +2064 0 -8.83625e-18 0 +2065 0 0 0 +2066 1.25022e-18 -3.64055e-18 0 +2067 -1.02999e-18 -8.08408e-18 0 +2068 0 -7.86047e-18 0 +2069 -1.21634e-18 -8.63465e-18 0 +2070 -1.33831e-18 -8.18911e-18 0 +2071 0 -8.91756e-18 0 +2072 0 0 0 +2073 0 -8.20606e-18 0 +2074 6.53909e-19 -4.47318e-18 0 +2075 0 -7.88757e-18 0 +2076 0 0 0 +2077 0 -6.72544e-18 0 +2078 0 -3.42371e-18 0 +2079 0 0 0 +End Values Result "TOTAL_DISPLACEMENT" "Kratos" 4 Vector OnNodes Values 1 0 0.0195285 0 From e58831553b47e86c8c73a75f6f5f9020ac5d7066 Mon Sep 17 00:00:00 2001 From: Mohamed Nabi <106732406+mnabideltares@users.noreply.github.com> Date: Thu, 25 Apr 2024 12:20:00 +0200 Subject: [PATCH 010/142] [GeoMechanicsApplication] Add 1D functionality to the existing 2D/3D thermal element (#12303) * Added thermal line element * Fixed a bug * Added test cases * Added 3D thermal line element + test cases * modifications based on review 3 Added README.md for the test cases * fix for documentation * Modifications based on review 3 * Modifications based on review 4 * improvements in README * Fix in README.md for units * A small fix --- .../thermal_dispersion_law.cpp | 29 ++-- .../transient_thermal_element.cpp | 4 + .../transient_thermal_element.h | 38 ++++- .../geo_mechanics_application.cpp | 7 + .../geo_mechanics_application.h | 7 + .../test_thermal_line_element.svg | 1 + .../test_thermal_line_element_2D3N_result.png | Bin 0 -> 23398 bytes .../test_thermal_line_element/README.md | 23 +++ .../MaterialParameters.json | 24 +++ .../ProjectParameters.json | 143 ++++++++++++++++++ .../test_thermal_line_element_2D2N.mdpa | 81 ++++++++++ .../MaterialParameters.json | 24 +++ .../ProjectParameters.json | 143 ++++++++++++++++++ .../test_thermal_line_element_2D3N.mdpa | 90 +++++++++++ .../MaterialParameters.json | 24 +++ .../ProjectParameters.json | 143 ++++++++++++++++++ .../test_thermal_line_element_2D4N.mdpa | 99 ++++++++++++ .../MaterialParameters.json | 24 +++ .../ProjectParameters.json | 143 ++++++++++++++++++ .../test_thermal_line_element_2D5N.mdpa | 108 +++++++++++++ .../MaterialParameters.json | 24 +++ .../ProjectParameters.json | 143 ++++++++++++++++++ .../test_thermal_line_element_3D2N.mdpa | 81 ++++++++++ .../MaterialParameters.json | 24 +++ .../ProjectParameters.json | 143 ++++++++++++++++++ .../test_thermal_line_element_3D3N.mdpa | 90 +++++++++++ .../tests/test_transient_thermal.py | 43 ++++++ 27 files changed, 1682 insertions(+), 21 deletions(-) create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/documentation_data/test_thermal_line_element.svg create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/documentation_data/test_thermal_line_element_2D3N_result.png create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/README.md create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D2N/MaterialParameters.json create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D2N/ProjectParameters.json create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D2N/test_thermal_line_element_2D2N.mdpa create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D3N/MaterialParameters.json create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D3N/ProjectParameters.json create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D3N/test_thermal_line_element_2D3N.mdpa create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D4N/MaterialParameters.json create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D4N/ProjectParameters.json create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D4N/test_thermal_line_element_2D4N.mdpa create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D5N/MaterialParameters.json create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D5N/ProjectParameters.json create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D5N/test_thermal_line_element_2D5N.mdpa create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D2N/MaterialParameters.json create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D2N/ProjectParameters.json create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D2N/test_thermal_line_element_3D2N.mdpa create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D3N/MaterialParameters.json create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D3N/ProjectParameters.json create mode 100644 applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D3N/test_thermal_line_element_3D3N.mdpa diff --git a/applications/GeoMechanicsApplication/custom_constitutive/thermal_dispersion_law.cpp b/applications/GeoMechanicsApplication/custom_constitutive/thermal_dispersion_law.cpp index 378959b6e30f..23406d72c15d 100644 --- a/applications/GeoMechanicsApplication/custom_constitutive/thermal_dispersion_law.cpp +++ b/applications/GeoMechanicsApplication/custom_constitutive/thermal_dispersion_law.cpp @@ -24,7 +24,7 @@ GeoThermalDispersionLaw::GeoThermalDispersionLaw() : mNumberOfDimensions{2} {} GeoThermalDispersionLaw::GeoThermalDispersionLaw(std::size_t NumberOfDimensions) : mNumberOfDimensions{NumberOfDimensions} { - KRATOS_ERROR_IF(mNumberOfDimensions < 2 || mNumberOfDimensions > 3) + KRATOS_ERROR_IF(mNumberOfDimensions < 1 || mNumberOfDimensions > 3) << "Got invalid number of dimensions: " << mNumberOfDimensions << std::endl; } @@ -49,23 +49,24 @@ Matrix GeoThermalDispersionLaw::CalculateThermalDispersionMatrix(const Propertie const double solid_fraction = 1.0 - rProp[POROSITY]; const auto x = static_cast(indexThermalFlux::X); - const auto y = static_cast(indexThermalFlux::Y); - result(x, x) = solid_fraction * rProp[THERMAL_CONDUCTIVITY_SOLID_XX] + water_fraction * rProp[THERMAL_CONDUCTIVITY_WATER]; - result(x, y) = solid_fraction * rProp[THERMAL_CONDUCTIVITY_SOLID_XY]; - result(y, y) = solid_fraction * rProp[THERMAL_CONDUCTIVITY_SOLID_YY] + - water_fraction * rProp[THERMAL_CONDUCTIVITY_WATER]; - result(y, x) = result(x, y); - if (mNumberOfDimensions == 3) { - const auto z = static_cast(indexThermalFlux::Z); - result(y, z) = solid_fraction * rProp[THERMAL_CONDUCTIVITY_SOLID_YZ]; - result(z, x) = solid_fraction * rProp[THERMAL_CONDUCTIVITY_SOLID_XZ]; - result(z, z) = solid_fraction * rProp[THERMAL_CONDUCTIVITY_SOLID_ZZ] + + if (mNumberOfDimensions >= 2) { + const auto y = static_cast(indexThermalFlux::Y); + result(x, y) = solid_fraction * rProp[THERMAL_CONDUCTIVITY_SOLID_XY]; + result(y, y) = solid_fraction * rProp[THERMAL_CONDUCTIVITY_SOLID_YY] + water_fraction * rProp[THERMAL_CONDUCTIVITY_WATER]; - result(z, y) = result(y, z); - result(x, z) = result(z, x); + result(y, x) = result(x, y); + if (mNumberOfDimensions == 3) { + const auto z = static_cast(indexThermalFlux::Z); + result(y, z) = solid_fraction * rProp[THERMAL_CONDUCTIVITY_SOLID_YZ]; + result(z, x) = solid_fraction * rProp[THERMAL_CONDUCTIVITY_SOLID_XZ]; + result(z, z) = solid_fraction * rProp[THERMAL_CONDUCTIVITY_SOLID_ZZ] + + water_fraction * rProp[THERMAL_CONDUCTIVITY_WATER]; + result(z, y) = result(y, z); + result(x, z) = result(z, x); + } } return result; diff --git a/applications/GeoMechanicsApplication/custom_elements/transient_thermal_element.cpp b/applications/GeoMechanicsApplication/custom_elements/transient_thermal_element.cpp index 7ce6e76ff62d..e9284d7c8f7c 100644 --- a/applications/GeoMechanicsApplication/custom_elements/transient_thermal_element.cpp +++ b/applications/GeoMechanicsApplication/custom_elements/transient_thermal_element.cpp @@ -17,13 +17,17 @@ namespace Kratos { +template class TransientThermalElement<2, 2>; template class TransientThermalElement<2, 3>; template class TransientThermalElement<2, 4>; +template class TransientThermalElement<2, 5>; template class TransientThermalElement<2, 6>; template class TransientThermalElement<2, 8>; template class TransientThermalElement<2, 9>; template class TransientThermalElement<2, 10>; template class TransientThermalElement<2, 15>; +template class TransientThermalElement<3, 2>; +template class TransientThermalElement<3, 3>; template class TransientThermalElement<3, 4>; template class TransientThermalElement<3, 8>; template class TransientThermalElement<3, 10>; diff --git a/applications/GeoMechanicsApplication/custom_elements/transient_thermal_element.h b/applications/GeoMechanicsApplication/custom_elements/transient_thermal_element.h index 264d99de9437..8152040108cf 100644 --- a/applications/GeoMechanicsApplication/custom_elements/transient_thermal_element.h +++ b/applications/GeoMechanicsApplication/custom_elements/transient_thermal_element.h @@ -70,8 +70,16 @@ class KRATOS_API(GEO_MECHANICS_APPLICATION) TransientThermalElement : public Ele GeometryType::ShapeFunctionsGradientsType dN_dX_container; Vector det_J_container; - GetGeometry().ShapeFunctionsIntegrationPointsGradients(dN_dX_container, det_J_container, - GetIntegrationMethod()); + + if (GetGeometry().LocalSpaceDimension() == 1) { + GetGeometry().DeterminantOfJacobian(det_J_container, this->GetIntegrationMethod()); + dN_dX_container = GetGeometry().ShapeFunctionsLocalGradients(this->GetIntegrationMethod()); + } + else { + GetGeometry().ShapeFunctionsIntegrationPointsGradients(dN_dX_container, det_J_container, + GetIntegrationMethod()); + } + const auto integration_coefficients = CalculateIntegrationCoefficients(det_J_container); const auto conductivity_matrix = CalculateConductivityMatrix(dN_dX_container, integration_coefficients, rCurrentProcessInfo); @@ -86,6 +94,22 @@ class KRATOS_API(GEO_MECHANICS_APPLICATION) TransientThermalElement : public Ele GeometryData::IntegrationMethod GetIntegrationMethod() const override { + if (GetGeometry().LocalSpaceDimension() == 1) + { + switch (TNumNodes) { + case 2: + case 3: + return GeometryData::IntegrationMethod::GI_GAUSS_2; + case 4: + return GeometryData::IntegrationMethod::GI_GAUSS_3; + case 5: + return GeometryData::IntegrationMethod::GI_GAUSS_5; + default: + KRATOS_ERROR << "Can't return integration method: unexpected number of nodes: " << TNumNodes + << std::endl; + } + } + switch (TNumNodes) { case 3: case 4: @@ -100,8 +124,7 @@ class KRATOS_API(GEO_MECHANICS_APPLICATION) TransientThermalElement : public Ele case 15: return GeometryData::IntegrationMethod::GI_GAUSS_5; default: - KRATOS_ERROR << "Can't return integration method: unexpected " - "number of nodes: " + KRATOS_ERROR << "Can't return integration method: unexpected number of nodes: " << TNumNodes << std::endl; } } @@ -236,9 +259,10 @@ class KRATOS_API(GEO_MECHANICS_APPLICATION) TransientThermalElement : public Ele const Vector& rIntegrationCoefficients, const ProcessInfo& rCurrentProcessInfo) const { - GeoThermalDispersionLaw law{TDim}; - const auto constitutive_matrix = - law.CalculateThermalDispersionMatrix(GetProperties(), rCurrentProcessInfo); + const std::size_t number_of_dimensions = GetGeometry().LocalSpaceDimension(); + + GeoThermalDispersionLaw law{number_of_dimensions}; + const auto constitutive_matrix = law.CalculateThermalDispersionMatrix(GetProperties(), rCurrentProcessInfo); auto result = BoundedMatrix{ZeroMatrix{TNumNodes, TNumNodes}}; for (unsigned int integration_point_index = 0; diff --git a/applications/GeoMechanicsApplication/geo_mechanics_application.cpp b/applications/GeoMechanicsApplication/geo_mechanics_application.cpp index 5f802320a3a3..3ce19bdd6b4f 100644 --- a/applications/GeoMechanicsApplication/geo_mechanics_application.cpp +++ b/applications/GeoMechanicsApplication/geo_mechanics_application.cpp @@ -220,6 +220,13 @@ void KratosGeoMechanicsApplication::Register() { KRATOS_REGISTER_ELEMENT("GeoTransientThermalElement3D20N", mTransientThermalElement3D20N) KRATOS_REGISTER_ELEMENT("GeoTransientThermalElement3D27N", mTransientThermalElement3D27N) + KRATOS_REGISTER_ELEMENT("GeoTransientThermalLineElement2D2N", mTransientThermalLineElement2D2N) + KRATOS_REGISTER_ELEMENT("GeoTransientThermalLineElement2D3N", mTransientThermalLineElement2D3N) + KRATOS_REGISTER_ELEMENT("GeoTransientThermalLineElement2D4N", mTransientThermalLineElement2D4N) + KRATOS_REGISTER_ELEMENT("GeoTransientThermalLineElement2D5N", mTransientThermalLineElement2D5N) + KRATOS_REGISTER_ELEMENT("GeoTransientThermalLineElement3D2N", mTransientThermalLineElement3D2N) + KRATOS_REGISTER_ELEMENT("GeoTransientThermalLineElement3D3N", mTransientThermalLineElement3D3N) + //Register Conditions KRATOS_REGISTER_CONDITION("UPwForceCondition2D1N", mUPwForceCondition2D1N) KRATOS_REGISTER_CONDITION("UPwForceCondition3D1N", mUPwForceCondition3D1N) diff --git a/applications/GeoMechanicsApplication/geo_mechanics_application.h b/applications/GeoMechanicsApplication/geo_mechanics_application.h index 90af6ba11217..42d5519e0340 100644 --- a/applications/GeoMechanicsApplication/geo_mechanics_application.h +++ b/applications/GeoMechanicsApplication/geo_mechanics_application.h @@ -456,6 +456,13 @@ class KRATOS_API(GEO_MECHANICS_APPLICATION) KratosGeoMechanicsApplication : publ const TransientThermalElement<3,20> mTransientThermalElement3D20N{ 0, Kratos::make_shared< Hexahedra3D20 >(Element::GeometryType::PointsArrayType(20)) }; const TransientThermalElement<3,27> mTransientThermalElement3D27N{ 0, Kratos::make_shared< Hexahedra3D27 >(Element::GeometryType::PointsArrayType(27)) }; + const TransientThermalElement<2, 2> mTransientThermalLineElement2D2N{ 0, Kratos::make_shared>(Element::GeometryType::PointsArrayType(2))}; + const TransientThermalElement<2, 3> mTransientThermalLineElement2D3N{ 0, Kratos::make_shared>(Element::GeometryType::PointsArrayType(3))}; + const TransientThermalElement<2, 4> mTransientThermalLineElement2D4N{ 0, Kratos::make_shared>(Element::GeometryType::PointsArrayType(4))}; + const TransientThermalElement<2, 5> mTransientThermalLineElement2D5N{ 0, Kratos::make_shared>(Element::GeometryType::PointsArrayType(5))}; + const TransientThermalElement<3, 2> mTransientThermalLineElement3D2N{ 0, Kratos::make_shared>(Element::GeometryType::PointsArrayType(2))}; + const TransientThermalElement<3, 3> mTransientThermalLineElement3D3N{ 0, Kratos::make_shared>(Element::GeometryType::PointsArrayType(3))}; + // conditions const UPwForceCondition<2,1> mUPwForceCondition2D1N{ 0, Kratos::make_shared< Point2D >(Condition::GeometryType::PointsArrayType(1)) }; const UPwForceCondition<3,1> mUPwForceCondition3D1N{ 0, Kratos::make_shared< Point3D >(Condition::GeometryType::PointsArrayType(1)) }; diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/documentation_data/test_thermal_line_element.svg b/applications/GeoMechanicsApplication/tests/test_thermal_element/documentation_data/test_thermal_line_element.svg new file mode 100644 index 000000000000..d92d51d23dfb --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/documentation_data/test_thermal_line_element.svg @@ -0,0 +1 @@ +100°C-10°C \ No newline at end of file diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/documentation_data/test_thermal_line_element_2D3N_result.png b/applications/GeoMechanicsApplication/tests/test_thermal_element/documentation_data/test_thermal_line_element_2D3N_result.png new file mode 100644 index 0000000000000000000000000000000000000000..3159b319d8dc34dfeda29b9bf336dc3e7e8b1de6 GIT binary patch literal 23398 zcmeHvc~nzZ7w=VTC#<$wr7B8W6bEEbs-g&3CsYsw6@6zJAB)hz11YP4dd zckuzYgXte=H=FHI^vDNF|1e@04Wx2E!H?aJel9+1=GJ4rxFB|H8OvR-JC&=i?f z*In}0^+&eso9(+MD@%y(3&d%K%{3KD2&aYlsa+FEy6pTafp4_y7Sk;o1D5)-{U6JWtcHD{- z+Gu-<@0XTq^t|ARy;U9CEVVzFUeqw7X@*uqd(frcf&MphC37^0vVyx!Iof9IqDSHP zO#-W5u#t9|)=$Hx0S$;?q9p}l^mfn#D>9nX$SHgZZ; zXH=CgwRteWPTyvkIxyB_;t6efo#WP*D%CaCSq*TWxYp;B{QsP#1po&)2bja2}kQPsleq&jaqay`i#GbDqjZI9S$ta7LxBl9`l}ysWj*bf0Bub zNvS0S6c zS6Q|U!Mv_p4b0NR13}G89Itx^`X4mQziZ>)qu807^BFCwW1~@9ttd$B6UCo-*p4Qy z6+B86muBBnxEylmN{v!nbLA!;sB^OKYLj{;)0+zV`#CwYn=%IIT(;@)JK^(8=G>mK zAZx?9qO;$+U%5SFlXSyxY3=m6)(UCq{eiyB^G2VZuzAwwY2>}Yr^JrYBMY=T)ZEzB z#x<%C%b=GSM6`Vc={RI=%$w5l@&ymy(~3rewfgHZ5G?a#J{n&p+Mro zc`2$(+%Zsk#INuTr_8w8(NVz^7c^W?Y(E;&8qgvAEtkKm!o&Y!WM%eJ8>8&X3;jLW ziM#r<#jnzvLj44C`Q=7kZ?}g7?2urAH1McXv86!LTgEZ+Ypw7u>g`@g`jzm&n5||k z&XKDo;KpmZ>T&rcesQvZ^q?Y>fykqkv^r*v(T>9Y8lbY-my&m|6GC&Ny6CjJ+?-1i zUw^;OSDYZRXI%TgJ`wSCW!GG5H)#p})+x?PXCG{75aqm-um`4fuA+5W_5>UDZ}ji? zYt(kRRPd(%Xu}Pj)5~6(z%l(&++~~(oL6=V6$w~Zbcu_OLw`cM>1L~Ho%DWb#elkl zlSzqpj9E*Q^d(a+cC2x-=ov_@+xDi#uJBdAv=pqmF`?b2__O$fjQrD#U6mSDjTuWg z-}Sfl+;5NsYF4@T^4-*hD>Pmensuk7C6EnJ6ducCw#LK>E&TAzzz>j-Z#NQ$;aUU8er46E94)nMn$V2;PX zW?|XBE*DD!XA0!9{asFl^v;%}9Cj?%s41J-z^{=k4D}h%T_7;*?e~8+U(i+6%#_Oy z2fpdn5&dq&kPpnIaRbExv~Z4IjG($py6bovaN9X|W&$VrE$!?a2J|OWzJ1{eQA>Kw z<A7`{kA|wH|4VtpL&XcAsZEP{EYv5xuL4OF{ zvEX!Y6GLn(ZR_kW3<)dqSM<^x?T&5=?zh!L;J>>hYb5l8=AMCF?R%u4im=t9-G?DpZu-MzIIVs(If8&PmGn_y|+;OrbVlwYDZyZ^&&c>Ek>|2XMj=n zqE4%qpO$Qt@H`!aiWO|%oJ%|WXPJq0LOQvwFACy{?-l!%N*y=>B`S0^4&9foub!7$nyEGus>v(x&H6)Z3F63wsTY8))L>ympH-g^rm>1~Zk z%*)+XT_ZUdrD4}l;={C!`Lg#;51(mia6Nn~nYx7T;TzdnUG=q|>&>{?4xxM9#>biae z7QtG(Z581$E%B&z!;Mo^+A8;y^_SIYU<5-91AP3Hh?G|^5*^#7HJ5R}T3&K1uU)$= zgt7Qgz^TK{w9_-2et6tH{4M6bRmB1PZNc|ByPnn@UCo_Y6UL@rDIH%?pKhcM^$37u zbF1QBxjvmAqRY45L@RGVxC00md@z!e_^ZRk#f1-S*y$>2Ct4N^HPjJVCnOuFc8Ou_ zB71|6s&)W_dds#*I5D%OnQhu=-O!EE6F|vLKHBtCHMi?*91oL__BEq0fh5>@CAwWTx_GOOx;uhj*;sSg2$up z(pxmW(~EWpD_z^tzMnfX)Kl?cK7IF+E{@d`E2qY3E>4VKld$czt4Yi~(u>Nh8pakb zly?_Dbsc9wew*&XD-P(wE zCmU3jC$elB7kZ#Yu~I=K+Iwi8n~7Y?+1eP#x63N)xr1RPr93KCLC_z4x0tbJQbr_K zvM;J`0()lpQBK-n$M;HokbOYF@?|>za*FnaS zshX(G`)SBBXM=D*^8mB(J2|#{;Y=v_MNT^%m|WqJnD?X;Y%bopaQg4|o@i#5}P zs|R(uD+*k*z!#H?;VlIlFflEXYnF{&l;sXgC-yJp>R3S9v9acZ)?%OwV@6Va;c5Fu zoqHulV+U*9QT*=4-dBn*x9B|mRh0hT-5H~Er6`WWPRT9m)VgfbHXceMg&gv(8pgRGN0Zmt3W}BZO;b_>V02bbN3Cy~##xx195p zNu6(eZUWt@s+(CJXsj2f=Hxfas79u}IHztVk_Mr9AdBwY8-bH=7nH5b{IAc}(rumD-2{w-6;>PTcrES+&rVBA3eE zmxB5~T)Lp?wmk@GrxvzNFJfGFDIHEMP#FNGPu8~iZBrY%RB}OfLy^J52k6@(QJ0}Y zisPD;GhP@zB*ayM%7gb}0rpJ;{X}gd>bf%X7%YL;gBH(9K$*y1Yfb2xT;wRCm92G{ zhkA!^zFGU|PIVT?rqOSbXV80AIwpEEv#PqZjSL%l=fG+fJd|>@JtA-pIt_|yXFoFP zYyc6Gr#`4vBjA~rhsaqBBBt~D!3fFY!uY(LKII!*euF(zykKeEJBv? zz;s1{r@NLkKVp-W;3z4GwLH8_N4fn)kRMaG#@7A%6QIC=JIY|^dbKiss5lul@#^vdhpF34eou$7I;0VQ(*yk#A9o2k;8>R1ZsHRK*_=nl%b#312#dp zZZP!6g4Cetb-(rVZ{6hxI|%AYGK{j>5vV2pkB> zyMY;7TomzcCF;fa3-0nl_kz;DLXc2u`96K~O2fNc6#m)zWT0>bAdr|g)W(~V!7H=v zwHQ1HWbrl{A`f#9#R2F*pd6i6=Az+S`upp=W1+KmR_k@$5`=)2IQ zCu|$UZ316xo~*Q5M7%?=3m`QL_E&(F6aC7%fmICrk(i+@j#w~A64M??ecWWIisLO` zfP&(PAxbhVTPQ|}GpxXn*kSOYlB>#fWv+MQzj$(p`>!?Ii(*jv zRyHHW7Czr7DE;d_1WR{M`F%bYb30rAsj8}Kn{q8(D}P``Zyv{D)(NeJ`B8_7#_CdU zsVDmKro$NK4|bxSL(>i*KwLeU~cvPGM=`$Gke! zGyzMuVoz;_X4gfB#!3E`0Rb}lC_H>f#}PN$1@B2;61=W(t__tl^x~sj8)Tbf1fVP_ zIt0od8EmBz8Eq*wvg$>GB{t<#K@Myibg4R7wYh+krp@`yfgs{+`2v|F0;8vl7rWiu zpD!YKJ8?|N<0S8E(7AWHbNRtBL>7qEj63k7g^wHi{hsB1t7@>UY8%+|@afqAjI7U} zxk@5)ZGvHW1O?h)a4}Jm@KMs2T)=h%%BESWHW#cpW`(;bsV;FLv5EDGSox-<&!?t^*g>uXAvgdmpCTc->)Jac&e z1TGcAqkn{Y^m=m<#K85n831pd(um-~wil)85t-g(@ByU$L)rd zK+|NH@YQlP*Fi2X62(Z#yl2n|fR&>@tFm~2d*pATfJh6tcvwJoQN%m#Memq2CPDGo zicc$D4SkxoAAWIC4OK(3&O$|+rzq3S*D%QQ-Y7xUC-DC6K|%fDQdcJ{?-zod1IC_k z51C9^V>tJ;GxA^Dw-}7efXtFz)orz5SgqpW&}Wmvyc?yIMQZ2jMP*w*JT zxl)6CU65PN{G$i!lZecVtf=xhgR+HNfVeiEgD0 zg5q9V8$A77t_69f)a4IvLuDBE*UdO3q8kaSxlQlDPqDjUTS`*Lb}F3|2wHo6#=qA& z+L_GtbDxlL?U`fa7^2L+*Zi6G3}8%m#h^d+++5(-%sJ#di=hH&5|&X!*nA+b>11^? za0g4@UYjmoR-n5ts^P#bptduB1nBjJs4MoC8R&iKy3uHRz?Hue*TnvLvxajwE?vbV zD2@+eD_ZiUwUEx`t~%oC*F8#BX1-uF_+1wE-TiGIh}6*eBmos`YmETgZ5onaoyfp$XM`*-K9plak+a-98F|i-60X zeXFR}U&q2pf%4Z;Rhi!PKaZMo!G6q(sLD{Z)Zr4&8ATSB>R|PWkvgHildL{@+0YLN zCnfLfdmI|O@RTxII-i6uIL|{_K{y@OX7{YtfGQ59O5ZwrX5q92qk0@jp#C|ZQyyBD zy!n^juOg~$DqMdU^>!e}Zjru+!?i>y_(B4Qap%hvG1~z%6rr}7D#`Hs!qrMa^E9E` z^1er5om~0PppHRRw#R2k@Uupg;2Z7ukoR%fQT@ze1Yt#XS4=7ZPeHclMOL*HKr(55 zgR8saNNx`MsKIq9vp`|)z{h=u*b_*PV<{Wst$;y;(78e-b=Dq;Z-`ytXtkAqga&4E zm40bK}+!X>IB2vDm2OlQIR6JdjMckT19$zE2p zbQE|5jB)f9?(%>2@a@LC|rT$_Q@q7tS}f^`#NP6ffl-3$sy^ZEz!G6 zLJ4O8D1o(C>ne>VX0bc;^1?swA95N+kDw=KGWkQL)wn!Qi@4|*bxlp*0&7=x*s8r+%dPZO`-cVNO zF%A2xmU0DWbGsfQZeUIlc*2hz)Oz9Eg7QJ##Dy@Dm zy$Dr$#gj*nhnT-mihm5p;+qH1IVDi4h_uSV~BY5i!xNgv1aL1E&rDbx?eXJzx+uR^5GD zmk0!}AGCW=HC5bfFv$`5-oCx(+qdtBj(XX1!WEr||H25ux{gHE`xRY4Hj5yBCIJl# z#~$I=lv(VGhr2{f1pPqVu*;i`c14W>(RmXQq`5tjf;1qnnt`Y1TlLJ*d0Q4ByF6i4 z=9Iy>u03})011a9j)ta>peM1*5*F9gEZxFVif9nh=z&24AddxLMG##Siy%CqLt%Jc zI|OKi@CPc`vzj4BojLpq9v5bpzqaE6x+869L zCiI?)A(gWsz?pl1{yFrhp2As7qKq-7rzWN{wZtAbnej!WB1br88E)Spy3J74i~kG|W}zExqH zs0;{}+VdS?4;^<8C61O=9&n?%)^PL>h)YFdIxhdY;$h3;)-8jhG9sFtmg;@S?JM?f zRlV9O7&7lx#uPIebc~!g!`@poZN;v?)t8`xW|hpwjTZh7r!p`7Sh{Q$c=xJ^?jOAx z)*P9yUex%coY79sh4#HVRZVCAr0L{D!|O1vD>MpXRVrEf@di-NWkpj|dNdxD{0jAg zUz?!V_{Hagv2m$&=($`_b8LHRKU`Ksj!Mpc{^+bSxNNAX&azpS+;qkB?(M?~?zmza zQWgS1)HbiM*dB#q%PvTlgFQ|ov*s>@stAK3GQsn9U{UX1C94cfz7s?;s;4usL&t)y z78<{RbTuea4}4EnN|2_lcnDjK>+?@4%RQ3aLom{-EzFsR_%CwoFylh5XZB0$h&`5} zCLu1vHWl*Hz$nr@@1_{N+K%nfV-5<{LMatPOi|h=lB_8HB>}Hs0ZhZJ1Qf}MZ6y9$ zjmO7@x@2T$fh+*%f&Gw_R*qk0aqs{EGkz$GharL7Y32zfoPjXEVUI}XKwFaMgjAiP z4MXQBVY?n0!PZcR&T=-a?_gUHLh?936_Fk3c$DagqVJ(m1;BP4h%Vzu@a2o6kx+$N zY875gfN~gP5wwRxp_4(+iz+xk?I8z?buAK$hVV%w7MrcjLJS_&)3vwAPn8!Is!h81 zB074+VqqxwctJVurS&~j?hQbG5sV5V``?Z>f%PMq@9*L%eGh_ED@MHpYaBInB)ovK z0`U=vfQ0r4ido8(Pz>pk3DULI>=J#WU!+6WJkoAVL^p@p4QPT@thE84#@6uW^`*=q z4Un0zZwEl^8j-KPzqw=)Oq#DTa%4>*4Z&kJUV#b-$jA#@@Dz348OldPAvXp-#fsbw z%yj^0Os-LAfS2%W_!0t8YVcu+8JNYRs2DG;Nx?IJ^b9yuwdcsl`@vT`{~*fS z<$n;2R%zOSAcMVuH4u&`bCzI@_N9}#lNE@qYiABdZ9>!wA&7(2%t;eu+aN%uP+JjV zn0n@H8RER)=)g%^K5e8r&*yXFukJP->Lg{$!@tV4T3FumvgU1m1{iaiT9Y`eT^lxL zc)=)b65SV+dV>3}6 zg6%>mn8!wJ2CP)<)*kywGsv5a1x?;c#vjz<15a3(0-xqZ;7u_|$MKdIgC(~gA-SxQ z2Als2Zv_|+l67RnvCJF_Xh5~QAcE_;6rh^xrse7_I1NH-hlG-ZPKuh>!7#&G#Om>? zu>g5Fq+-=@z-KL>2!_-6IGOWGn8ZWDdyDF@B*i|}Oz*H+mj9&Hb3(R`TGU&rcV4@~r(V5uJAh-ax8QI0 zT|)t3-tzhM6~$7;%R7mVEyJgrhYUam1oj2rl9)8RJPhj8U*W_8#&B}aXfMxbpTG_dVfo$4ieL%qC&xWpWVEplYrqV3o@S}@_rrS{-+47wY-wWzt$6U< zLtu=c0Xm*Fv*oF|z`C~fM(sH0;zZkm6SXf<9XfwD7~sB|?vh^5fp5HC0mVrNb4TfR z_yq@S*UmbriIUXp1NUyg4`6kXbyIXXVBI*sO3dn)bojjZ4t|8t2=J_vvSD`3VC3e| z2SVxEu2GxoS7v0QN83Orb3pCdI6}B)nQKGjw;TsQ+8*BGPW@-Qb%(|ekb{cZYJTEL zr4fbq9SY2qSZ$^&m}tr<*R?w{EUV4ABWS5`*a-u^_rcC4B{@e;J$oz>`5y2$-vPYN z;}A9+gB0v_9y;W8KIsH47&EX=Q79+W4B0)QN(RqRoI(gyh-7F&4seP+*mHRw505#| zU?C_Q|LP&daeV8JEk8AQNwc0(N(|f$BehJ_luDo+R>)nFp9Gq*&#xRZ@U}>%PKs2+c>5 z9hTdN6n&Ug%Sc(3CRs}h?WlDbv|1Qbp&`6J>lwf`DKjhp5!ql0`Px*9gy-$SIv0vD zMxb&4>j`OE-OKSKnT2G=#q>5HxM4}&hbr!lPllANSfrg`;vi_Us?vv)5&owU5nfsr zIXTSuTTyhoVR?uPet6?q%365egg5`?ozkcc%oq-(!3C*R;$)OT9;;Qe!5p9P0IBGw zn6V&u^*DR6wpjsDZE;>DEZlI_=!&&|;F}RzUoHbo{`!-#kFL)nnKB4eK-VVT8BCZA zfu9haZT-Op0Cv73Iqyd4+yivL;WWCzw^(@|b~p{O5^!1~qCk5d^>-6U5mNx8qkMN8 z9`;#%0Rc@S8ZwU+Gy=8(&*%5#3`Ox64F{aVgLlWM0X8KHJ~j*mL$bSqn`NVuRD9LG zab@Hdikl=8Dq%zJdI_AKg2uC&is>ZkC4}RFB(T8<-zFHC80Mvt*XkrrE5Zc`@p?Q7 z48Z&bls$a)Fc1UB=hWu917#)O@Fu6}NMcEmgGNh+9U%x$a7jOCQM#!@;GXG(>JrLM z2t&X=`Y+lA{10PZg7vjXoA?`}0%8Jg*Et(wV`u${p*n9DDfUMsD&Xbf?I0%ZLq-DU zlmUWiYaM|Do`r;`x}<}Kw&xV1#Io!`SpbJUprbw{!DyXog z0Ndns;*dgE?8jf*LtT?Yfw8#cAcSK{M#EqkHZ0yPU^hZ)8LAkz!@&qZpdK9#d2ypd z8}wEFc)a6PMi)8QMOwRX(4Sx)w`Vu1a2e~8sbs8gghN&ON;35?-v(oHi@VOa;jfGjk3XIt#Y zLUn9N#JA*r>`Q_nyl5OA6&Q9FTe1pJc-gCdA!#t+X)B7e#%uwgB73h9Co>6qK;R`Ms4s5&2Isbet;NI%aFO#RuqRaitstjLs{Mi1iyGH!) zSq|f5yH{vk+AMGR!sda~Q76)x)`ve$KV@)3CJ)H0?CvTT6wNv;w=b(Q>c3shEj^ta z#mEN-+{9h_ik6m^u20M=rpk0zyU)Ddxn{g==9>VxMxrFyq_5ROjR=b^F74T$M9+Up zo)3zjf8v7R=Dozf9AZpAAfhtC1kVOP`UaF`h*l6*y&uhBrPeQ^-;2ZABEjsgJEl%y zyIlXda2CZBULzVC5dEEV^F9&##59p!U0H@mC(sTAj=IwPGv4%KhX$F`rB?Uwr)qtk zf!dir-;p?A-brSm!Wh#=xCW!mE#)ENPbKAg&ONTOF6xKY7l9zUw5Bn3n8LUCCB8?!CMYAX4xrUcDI?x;79^xg@0WQGds#8>2r zl00Mb1~ou$!*`+3hNB6+X)is!Xlh3f8s)=)Q06cj55x@f;*jvYwG}%$ZIg>GAyQVU zZHvp1TzWD%OO!{&lvvykGN7c4-Hy^X{J92Lq7uA2BtAiN8{h?&3djMmVK~_nIyeWY zfon~#j?mMC%>d=jTUUnX0xPU|?q3j#W-dwUrRfqLSsQUu7|kHoC0aMep}J2gx@I<_ zAj&XZMewd*^*xBjg} z50JP1K1_quqk@u@I(Y8Hw-YAdCtK~bmX{W*fRVtqdgUsi0tsI;tWoM5CoAj$c_yHW z%t(Y&LeY3%G>8H2?=C=gLy}7%j4#Ks_LC@wXa(dA>}-G$Hx$N4B5^#*B?lWTKIEWD z7V)5a7dY<&IR8qy07>Tp4}gs@g+oe_LKjjrlz|g#L1$fZDx8Z)<$z?o-SZhgPN!6O z6Vzl=^LSI0*EnA63L#Cy05`M78yJ%I?XeKyOam>HIvrF-Nu7XjSd8ep3#mq{qyWBB z314rNgb$V?*;#SZD(dBCQ92|VDO||n=Xo+!;4vPU7Brm((YN4FeAg$ z#~|yIVZ5SpL_MuO0Zjmsbx#RxIHRk)ZBsn0>zCYYH8yTc0aa)df-D`Uy>v*2s1x#ZM*@7-vBhUJvv%2JiAl| ziMiSSSqxnAaM{wgYE9gd37?#6e5isZ`=Lo0O@u;_)_o3C&|otV>6&*E&5pvOd-(bj zlvj>HkKu{7?X2fA9p` z0|j-0&EKSSw&spF)j0HvFGTF0*2&L4Uv7Iu*8d!kFrLj7(tAl?eO2xiGfHL!4t>Q^ zYO^w}q(IGiJKx=4ema+_b?TP8Cgtlih>Pt{eq@F_WpKY6S{Hv#Jt$EM#xs zKoR&8_962>4JN%21R{9ec(WE$n>PhJ3?7yMPw*HOw6Dk?)ggGLNRf}q?5D{_l(xS(?Q;NgXEnF;?WLl5Fle$-qZSe)Tl6H6R4d* zAa+|C7bw67n*-mUIKzB zejA^%&d1Xg;H492v@cSNGFy-RI5FDdUIf_Q@6h&wV{|Zk9Qa}cAqKl`2>tNEa_1k7 zC=>@$;mqmJw>bs!X*i+?E5n4nnE|r+ol-|`d-YQG zDlWY!LRobYe*=AHAWDd5N?8LEy_}Py&kQM zNu?j65l?Zy24k)uee8gzY$*H;+vFICjb&h@G z?BXdy1kd~#q_xVejpyKiE&OB6B1hwLD8Kz2ovdl0(g`aQCBhDBPk3J=Q{k_o?)M-n z1WZIK_`f3tpL<3(1~dMRR%a0SkMS>z!t?x8H&B^70M%Mlv9`&i&p#3`63IxwbJg_Z z3(-t7+=>FPTA*_gacI^F-ei#kTiy~N2&wQZs3eHQLv!E;-uU^9Dzab)XDrYn!w|Bo z*O>Ay^DY97^iz|Qb2r{0Ih-cL;jKXOmupbuw2b)pVd4S4AULRGKzziL(vRNBL}_HZ z@+zjJ$OX+ZL#fR-ANHR>8PVXc@9ACd-El{<26th>ZSa@D{%3!yO7r*rfemq3etMEyG-v{zhF(OJE7#{?c4*bU-7J(Z0|AJ8d3%ACC-B)Y+_Ehs| zKdwXKhq&pMx=o(&HzC_9`Va$BwQy!NSK>Z1DWYX_WERE>JOkG@Mv3u#&g1DM^Fi>k zqRa#}*6e#%$>b+osvE`GSA`=l5l~eJreG@nTB?D`077`39mQF1IMep9O8Gx4HVtnN zQ7tw^Z8fJwazx*!@Uwf_7P6%k9;@P_K;{J*1HB8AFvNubisK?54$#aFFTln?WQMT= zjijmBp4g3v?jPI=ztgZiiPI~QDREDvTm2?j+02>7DRIQV;X*h+5e#E42%7O1!mrc{T31a+W)=ZBK<%AfqEwe5?R;Sc;C5Zl7gzVNyWAu9WQ&g7N5Ih zTYGG2)$`ajz`O->XaKJUjg*J8_QhEEfj7WbbK9CVdV7Ld?1DE)Frz1e-HjJ0J~_nJWFq z(Mc#)F>d`mP~*jxx&CfluEt-V7mfom(7=Ns#X0iq3)y}%R`K06HdQ@OPtynsxKR?4 zFux~tdRojJV34bSSsu&V@nDjk%)K?;Xuk%7w5k}W#*X7?f|RkWt>y;m~9U>rMSPVoh9mSf?A z`@*x9GWwFT^7YD@}5`ps`UfG-5<8y4}A(lO;cAd zn)SrKN8Daa{hru==lx_NdDpLv{lDnpySW01lUb^|xIF%0Tw6Wgx2vH0G)V~&KOI=? zSK2h-*qfCzi#8*8NB#t=TTc+*=l&Y_FySB0>AJ+acuvkCMZQV86MKK1r2IF(-kR>( zM`=pLw^3V1Jt8lx%)Q4>LpNMtK8Y3;a5ATIpkoHY1$R zFs4P(zi)_2bZ?O6bp5-8Qzp0`RGfa@j>5OjmyaB_%V3B9IAcQl7e2FTy~VnWHO@c%4?7hCi2wiq literal 0 HcmV?d00001 diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/README.md b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/README.md new file mode 100644 index 000000000000..f1e2f343def1 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/README.md @@ -0,0 +1,23 @@ +# Test Cases for Thermal Line Element temperature + +**Author:** [Mohamed Nabi](https://github.com/mnabideltares) + +**Source files:** [Thermal line element with fixed temperature](https://github.com/KratosMultiphysics/Kratos/tree/master/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element) + +## Case Specification +In this thermal test case, a 3 m deep soil is considered, with everywhere set to 0 $\mathrm{[^\circ C]}$ then a sudden jump at the top and bottom boundary temperatures are given. These are -10 $\mathrm{[^\circ C]}$ at bottom and 100 $\mathrm{[^\circ C]}$ at the top boundaries. The simulation spans 1000 days to allow for a transition from an exponential to a linear temperature profile between the two sides. This test is conducted for various configurations, including 2D2N, 2D3N, 2D4N, 2D5N, 3D2N and 3D3N line elements. The temperature distribution along the depth is then evaluated with its own result. +The boundary conditions are shown below: + +Visualization of the Boundary conditions + +## Results + +The picture below illustrates the temperature contours resulting from the simulation (as an example the 2D3N test is shown below). + +Temperature along the depth at the last time step + +These results are associated with the final time step after the solution reaches a steady state. The analytical solution is: + +$T = \frac{110}{3} y + 100$ + +In this test case, the result at node number 3 at location $y = -2$ is compared with the analytical solution. The value of the temperature at node 3 is 26.6666666... $\mathrm{[^\circ C]}$ \ No newline at end of file diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D2N/MaterialParameters.json b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D2N/MaterialParameters.json new file mode 100644 index 000000000000..4081c366faf8 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D2N/MaterialParameters.json @@ -0,0 +1,24 @@ +{ + "properties": [{ + "model_part_name" : "PorousDomain.filter", + "properties_id" : 1, + "Material" : { + "constitutive_law": { + "name" : "GeoThermalDispersion2DLaw" + }, + "Variables" : { + "DENSITY_SOLID" : 2650.0, + "DENSITY_WATER" : 1000.0, + "POROSITY" : 1.0, + "RETENTION_LAW" : "SaturatedLaw", + "SATURATED_SATURATION" : 1.0, + "SPECIFIC_HEAT_CAPACITY_SOLID" : 400.0, + "SPECIFIC_HEAT_CAPACITY_WATER" : 379.5, + "THERMAL_CONDUCTIVITY_SOLID_XX" : 2.65, + "THERMAL_CONDUCTIVITY_WATER" : 4800, + "DYNAMIC_VISCOSITY" : 0.001 + }, + "Tables": {} + } + }] +} diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D2N/ProjectParameters.json b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D2N/ProjectParameters.json new file mode 100644 index 000000000000..80626c5345b1 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D2N/ProjectParameters.json @@ -0,0 +1,143 @@ +{ + "problem_data": { + "problem_name" : "test_thermal_line_element_2D2N", + "start_time" : 0.0, + "end_time" : 86400000, + "echo_level" : 0, + "parallel_type" : "OpenMP", + "number_of_threads" : 1 + }, + "solver_settings": { + "solver_type" : "T", + "model_part_name" : "PorousDomain", + "domain_size" : 2, + "model_import_settings" : { + "input_type" : "mdpa", + "input_filename" : "test_thermal_line_element_2D2N" + }, + "material_import_settings" : { + "materials_filename" : "MaterialParameters.json" + }, + "time_stepping" : { + "time_step" : 600, + "max_delta_time_factor" : 10000 + }, + "buffer_size" : 2, + "echo_level" : 0, + "clear_storage" : false, + "compute_reactions" : false, + "move_mesh_flag" : false, + "reform_dofs_at_each_step" : false, + "nodal_smoothing" : false, + "block_builder" : true, + "solution_type" : "Transient_Heat_Transfer", + "scheme_type" : "Backward_Euler", + "reset_displacements" : false, + "newmark_beta" : 0.25, + "newmark_gamma" : 0.5, + "newmark_theta" : 0.5, + "rayleigh_m" : 0.0, + "rayleigh_k" : 0.0, + "strategy_type" : "newton_raphson", + "convergence_criterion" : "temperature_criterion", + "temperature_relative_tolerance" : 1.0E-4, + "temperature_absolute_tolerance" : 1.0E-9, + "residual_relative_tolerance" : 1.0E-4, + "residual_absolute_tolerance" : 1.0E-9, + "min_iterations" : 2, + "max_iterations" : 15, + "number_cycles" : 2, + "reduction_factor" : 0.5, + "increase_factor" : 2.0, + "desired_iterations" : 2, + "max_radius_factor" : 10.0, + "min_radius_factor" : 0.1, + "calculate_reactions" : true, + "max_line_search_iterations" : 5, + "first_alpha_value" : 0.5, + "second_alpha_value" : 1.0, + "min_alpha" : 0.1, + "max_alpha" : 2.0, + "line_search_tolerance" : 0.5, + "rotation_dofs" : true, + "linear_solver_settings" : { + "solver_type" : "bicgstab", + "tolerance" : 1.0e-6, + "max_iteration" : 1000, + "scaling" : true, + "preconditioner_type" : "ilu0" + }, + "problem_domain_sub_model_part_list" : ["filter"], + "processes_sub_model_part_list" : ["Start","top","bottom"], + "body_domain_sub_model_part_list" : ["filter"] + }, + "output_processes": { + "gid_output": [{ + "python_module" : "gid_output_process", + "kratos_module" : "KratosMultiphysics", + "process_name" : "GiDOutputProcess", + "Parameters" : { + "model_part_name" : "PorousDomain.filter", + "output_name" : "test_thermal_line_element_2D2N", + "postprocess_parameters" : { + "result_file_configuration" : { + "gidpost_flags" : { + "WriteDeformedMeshFlag" : "WriteUndeformed", + "WriteConditionsFlag" : "WriteElementsOnly", + "GiDPostMode" : "GiD_PostAscii", + "MultiFileFlag" : "SingleFile" + }, + "file_label" : "step", + "output_control_type" : "step", + "output_interval" : 1, + "body_output" : true, + "node_output" : false, + "skin_output" : false, + "plane_output" : [], + "nodal_results" : ["TEMPERATURE"], + "gauss_point_results" : [] + }, + "point_data_configuration" : [] + } + } + }] + }, + "processes": { + "constraints_process_list": [{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters": { + "model_part_name" : "PorousDomain.Start", + "variable_name" : "TEMPERATURE", + "is_fixed" : false, + "value" : 0.0, + "table" : 0 + } + },{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters": { + "model_part_name" : "PorousDomain.top", + "variable_name" : "TEMPERATURE", + "is_fixed" : true, + "value" : 100.0, + "table" : 0 + } + },{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters" : { + "model_part_name" : "PorousDomain.bottom", + "variable_name" : "TEMPERATURE", + "is_fixed" : true, + "value" : -10.0, + "table" : 0 + } + }], + "loads_process_list": [], + "auxiliar_process_list": [] + } +} diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D2N/test_thermal_line_element_2D2N.mdpa b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D2N/test_thermal_line_element_2D2N.mdpa new file mode 100644 index 000000000000..db1c0c99d82a --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D2N/test_thermal_line_element_2D2N.mdpa @@ -0,0 +1,81 @@ +Begin Properties 1 +End Properties + + +Begin Nodes + 1 0.000000e+00 0.000000e+00 0.000000e+00 + 2 0.000000e+00 -1.000000e+00 0.000000e+00 + 3 0.000000e+00 -2.000000e+00 0.000000e+00 + 4 0.000000e+00 -3.000000e+00 0.000000e+00 +End Nodes + + +Begin Elements GeoTransientThermalLineElement2D2N + 1 1 1 2 + 2 1 2 3 + 3 1 3 4 +End Elements + + +Begin SubModelPart Start + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart + + +Begin SubModelPart filter + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions + End SubModelPart + + +Begin SubModelPart top + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + End SubModelPartNodes + Begin SubModelPartElements + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart + + +Begin SubModelPart bottom + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 4 + End SubModelPartNodes + Begin SubModelPartElements + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart \ No newline at end of file diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D3N/MaterialParameters.json b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D3N/MaterialParameters.json new file mode 100644 index 000000000000..4081c366faf8 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D3N/MaterialParameters.json @@ -0,0 +1,24 @@ +{ + "properties": [{ + "model_part_name" : "PorousDomain.filter", + "properties_id" : 1, + "Material" : { + "constitutive_law": { + "name" : "GeoThermalDispersion2DLaw" + }, + "Variables" : { + "DENSITY_SOLID" : 2650.0, + "DENSITY_WATER" : 1000.0, + "POROSITY" : 1.0, + "RETENTION_LAW" : "SaturatedLaw", + "SATURATED_SATURATION" : 1.0, + "SPECIFIC_HEAT_CAPACITY_SOLID" : 400.0, + "SPECIFIC_HEAT_CAPACITY_WATER" : 379.5, + "THERMAL_CONDUCTIVITY_SOLID_XX" : 2.65, + "THERMAL_CONDUCTIVITY_WATER" : 4800, + "DYNAMIC_VISCOSITY" : 0.001 + }, + "Tables": {} + } + }] +} diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D3N/ProjectParameters.json b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D3N/ProjectParameters.json new file mode 100644 index 000000000000..80f9b92f8505 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D3N/ProjectParameters.json @@ -0,0 +1,143 @@ +{ + "problem_data": { + "problem_name" : "test_thermal_line_element_2D3N", + "start_time" : 0.0, + "end_time" : 86400000, + "echo_level" : 0, + "parallel_type" : "OpenMP", + "number_of_threads" : 1 + }, + "solver_settings": { + "solver_type" : "T", + "model_part_name" : "PorousDomain", + "domain_size" : 2, + "model_import_settings" : { + "input_type" : "mdpa", + "input_filename" : "test_thermal_line_element_2D3N" + }, + "material_import_settings" : { + "materials_filename" : "MaterialParameters.json" + }, + "time_stepping" : { + "time_step" : 600, + "max_delta_time_factor" : 10000 + }, + "buffer_size" : 2, + "echo_level" : 0, + "clear_storage" : false, + "compute_reactions" : false, + "move_mesh_flag" : false, + "reform_dofs_at_each_step" : false, + "nodal_smoothing" : false, + "block_builder" : true, + "solution_type" : "Transient_Heat_Transfer", + "scheme_type" : "Backward_Euler", + "reset_displacements" : false, + "newmark_beta" : 0.25, + "newmark_gamma" : 0.5, + "newmark_theta" : 0.5, + "rayleigh_m" : 0.0, + "rayleigh_k" : 0.0, + "strategy_type" : "newton_raphson", + "convergence_criterion" : "temperature_criterion", + "temperature_relative_tolerance" : 1.0E-4, + "temperature_absolute_tolerance" : 1.0E-9, + "residual_relative_tolerance" : 1.0E-4, + "residual_absolute_tolerance" : 1.0E-9, + "min_iterations" : 2, + "max_iterations" : 15, + "number_cycles" : 2, + "reduction_factor" : 0.5, + "increase_factor" : 2.0, + "desired_iterations" : 2, + "max_radius_factor" : 10.0, + "min_radius_factor" : 0.1, + "calculate_reactions" : true, + "max_line_search_iterations" : 5, + "first_alpha_value" : 0.5, + "second_alpha_value" : 1.0, + "min_alpha" : 0.1, + "max_alpha" : 2.0, + "line_search_tolerance" : 0.5, + "rotation_dofs" : true, + "linear_solver_settings" : { + "solver_type" : "bicgstab", + "tolerance" : 1.0e-6, + "max_iteration" : 1000, + "scaling" : true, + "preconditioner_type" : "ilu0" + }, + "problem_domain_sub_model_part_list" : ["filter"], + "processes_sub_model_part_list" : ["Start","top","bottom"], + "body_domain_sub_model_part_list" : ["filter"] + }, + "output_processes": { + "gid_output": [{ + "python_module" : "gid_output_process", + "kratos_module" : "KratosMultiphysics", + "process_name" : "GiDOutputProcess", + "Parameters" : { + "model_part_name" : "PorousDomain.filter", + "output_name" : "test_thermal_line_element_2D3N", + "postprocess_parameters" : { + "result_file_configuration" : { + "gidpost_flags" : { + "WriteDeformedMeshFlag" : "WriteUndeformed", + "WriteConditionsFlag" : "WriteElementsOnly", + "GiDPostMode" : "GiD_PostAscii", + "MultiFileFlag" : "SingleFile" + }, + "file_label" : "step", + "output_control_type" : "step", + "output_interval" : 1, + "body_output" : true, + "node_output" : false, + "skin_output" : false, + "plane_output" : [], + "nodal_results" : ["TEMPERATURE"], + "gauss_point_results" : [] + }, + "point_data_configuration" : [] + } + } + }] + }, + "processes": { + "constraints_process_list": [{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters": { + "model_part_name" : "PorousDomain.Start", + "variable_name" : "TEMPERATURE", + "is_fixed" : false, + "value" : 0.0, + "table" : 0 + } + },{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters": { + "model_part_name" : "PorousDomain.top", + "variable_name" : "TEMPERATURE", + "is_fixed" : true, + "value" : 100.0, + "table" : 0 + } + },{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters" : { + "model_part_name" : "PorousDomain.bottom", + "variable_name" : "TEMPERATURE", + "is_fixed" : true, + "value" : -10.0, + "table" : 0 + } + }], + "loads_process_list": [], + "auxiliar_process_list": [] + } +} diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D3N/test_thermal_line_element_2D3N.mdpa b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D3N/test_thermal_line_element_2D3N.mdpa new file mode 100644 index 000000000000..70ae0927ee21 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D3N/test_thermal_line_element_2D3N.mdpa @@ -0,0 +1,90 @@ +Begin Properties 1 +End Properties + + +Begin Nodes + 1 0.000000e+00 0.000000e+00 0.000000e+00 + 2 0.000000e+00 -1.000000e+00 0.000000e+00 + 3 0.000000e+00 -2.000000e+00 0.000000e+00 + 4 0.000000e+00 -3.000000e+00 0.000000e+00 + 5 0.000000e+00 -0.500000e+00 0.000000e+00 + 6 0.000000e+00 -1.500000e+00 0.000000e+00 + 7 0.000000e+00 -2.500000e+00 0.000000e+00 +End Nodes + + +Begin Elements GeoTransientThermalLineElement2D3N + 1 1 1 2 5 + 2 1 2 3 6 + 3 1 3 4 7 +End Elements + + +Begin SubModelPart Start + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + 5 + 6 + 7 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart + + +Begin SubModelPart filter + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + 5 + 6 + 7 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions + End SubModelPart + + +Begin SubModelPart top + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + End SubModelPartNodes + Begin SubModelPartElements + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart + + +Begin SubModelPart bottom + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 4 + End SubModelPartNodes + Begin SubModelPartElements + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart \ No newline at end of file diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D4N/MaterialParameters.json b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D4N/MaterialParameters.json new file mode 100644 index 000000000000..4081c366faf8 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D4N/MaterialParameters.json @@ -0,0 +1,24 @@ +{ + "properties": [{ + "model_part_name" : "PorousDomain.filter", + "properties_id" : 1, + "Material" : { + "constitutive_law": { + "name" : "GeoThermalDispersion2DLaw" + }, + "Variables" : { + "DENSITY_SOLID" : 2650.0, + "DENSITY_WATER" : 1000.0, + "POROSITY" : 1.0, + "RETENTION_LAW" : "SaturatedLaw", + "SATURATED_SATURATION" : 1.0, + "SPECIFIC_HEAT_CAPACITY_SOLID" : 400.0, + "SPECIFIC_HEAT_CAPACITY_WATER" : 379.5, + "THERMAL_CONDUCTIVITY_SOLID_XX" : 2.65, + "THERMAL_CONDUCTIVITY_WATER" : 4800, + "DYNAMIC_VISCOSITY" : 0.001 + }, + "Tables": {} + } + }] +} diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D4N/ProjectParameters.json b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D4N/ProjectParameters.json new file mode 100644 index 000000000000..cedf987beadf --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D4N/ProjectParameters.json @@ -0,0 +1,143 @@ +{ + "problem_data": { + "problem_name" : "test_thermal_line_element_2D4N", + "start_time" : 0.0, + "end_time" : 86400000, + "echo_level" : 0, + "parallel_type" : "OpenMP", + "number_of_threads" : 1 + }, + "solver_settings": { + "solver_type" : "T", + "model_part_name" : "PorousDomain", + "domain_size" : 2, + "model_import_settings" : { + "input_type" : "mdpa", + "input_filename" : "test_thermal_line_element_2D4N" + }, + "material_import_settings" : { + "materials_filename" : "MaterialParameters.json" + }, + "time_stepping" : { + "time_step" : 600, + "max_delta_time_factor" : 10000 + }, + "buffer_size" : 2, + "echo_level" : 0, + "clear_storage" : false, + "compute_reactions" : false, + "move_mesh_flag" : false, + "reform_dofs_at_each_step" : false, + "nodal_smoothing" : false, + "block_builder" : true, + "solution_type" : "Transient_Heat_Transfer", + "scheme_type" : "Backward_Euler", + "reset_displacements" : false, + "newmark_beta" : 0.25, + "newmark_gamma" : 0.5, + "newmark_theta" : 0.5, + "rayleigh_m" : 0.0, + "rayleigh_k" : 0.0, + "strategy_type" : "newton_raphson", + "convergence_criterion" : "temperature_criterion", + "temperature_relative_tolerance" : 1.0E-4, + "temperature_absolute_tolerance" : 1.0E-9, + "residual_relative_tolerance" : 1.0E-4, + "residual_absolute_tolerance" : 1.0E-9, + "min_iterations" : 2, + "max_iterations" : 15, + "number_cycles" : 2, + "reduction_factor" : 0.5, + "increase_factor" : 2.0, + "desired_iterations" : 2, + "max_radius_factor" : 10.0, + "min_radius_factor" : 0.1, + "calculate_reactions" : true, + "max_line_search_iterations" : 5, + "first_alpha_value" : 0.5, + "second_alpha_value" : 1.0, + "min_alpha" : 0.1, + "max_alpha" : 2.0, + "line_search_tolerance" : 0.5, + "rotation_dofs" : true, + "linear_solver_settings" : { + "solver_type" : "bicgstab", + "tolerance" : 1.0e-6, + "max_iteration" : 1000, + "scaling" : true, + "preconditioner_type" : "ilu0" + }, + "problem_domain_sub_model_part_list" : ["filter"], + "processes_sub_model_part_list" : ["Start","top","bottom"], + "body_domain_sub_model_part_list" : ["filter"] + }, + "output_processes": { + "gid_output": [{ + "python_module" : "gid_output_process", + "kratos_module" : "KratosMultiphysics", + "process_name" : "GiDOutputProcess", + "Parameters" : { + "model_part_name" : "PorousDomain.filter", + "output_name" : "test_thermal_line_element_2D4N", + "postprocess_parameters" : { + "result_file_configuration" : { + "gidpost_flags" : { + "WriteDeformedMeshFlag" : "WriteUndeformed", + "WriteConditionsFlag" : "WriteElementsOnly", + "GiDPostMode" : "GiD_PostAscii", + "MultiFileFlag" : "SingleFile" + }, + "file_label" : "step", + "output_control_type" : "step", + "output_interval" : 1, + "body_output" : true, + "node_output" : false, + "skin_output" : false, + "plane_output" : [], + "nodal_results" : ["TEMPERATURE"], + "gauss_point_results" : [] + }, + "point_data_configuration" : [] + } + } + }] + }, + "processes": { + "constraints_process_list": [{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters": { + "model_part_name" : "PorousDomain.Start", + "variable_name" : "TEMPERATURE", + "is_fixed" : false, + "value" : 0.0, + "table" : 0 + } + },{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters": { + "model_part_name" : "PorousDomain.top", + "variable_name" : "TEMPERATURE", + "is_fixed" : true, + "value" : 100.0, + "table" : 0 + } + },{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters" : { + "model_part_name" : "PorousDomain.bottom", + "variable_name" : "TEMPERATURE", + "is_fixed" : true, + "value" : -10.0, + "table" : 0 + } + }], + "loads_process_list": [], + "auxiliar_process_list": [] + } +} diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D4N/test_thermal_line_element_2D4N.mdpa b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D4N/test_thermal_line_element_2D4N.mdpa new file mode 100644 index 000000000000..805a3d3c5f84 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D4N/test_thermal_line_element_2D4N.mdpa @@ -0,0 +1,99 @@ +Begin Properties 1 +End Properties + + +Begin Nodes + 1 0.000000e+00 0.000000e+00 0.000000e+00 + 2 0.000000e+00 -1.000000e+00 0.000000e+00 + 3 0.000000e+00 -2.000000e+00 0.000000e+00 + 4 0.000000e+00 -3.000000e+00 0.000000e+00 + 5 0.000000e+00 -0.333333e+00 0.000000e+00 + 6 0.000000e+00 -0.666667e+00 0.000000e+00 + 7 0.000000e+00 -1.333333e+00 0.000000e+00 + 8 0.000000e+00 -1.666667e+00 0.000000e+00 + 9 0.000000e+00 -2.333333e+00 0.000000e+00 +10 0.000000e+00 -2.666667e+00 0.000000e+00 +End Nodes + + +Begin Elements GeoTransientThermalLineElement2D4N + 1 1 1 2 5 6 + 2 1 2 3 7 8 + 3 1 3 4 9 10 +End Elements + + +Begin SubModelPart Start + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart + + +Begin SubModelPart filter + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions + End SubModelPart + + +Begin SubModelPart top + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + End SubModelPartNodes + Begin SubModelPartElements + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart + + +Begin SubModelPart bottom + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 4 + End SubModelPartNodes + Begin SubModelPartElements + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart \ No newline at end of file diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D5N/MaterialParameters.json b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D5N/MaterialParameters.json new file mode 100644 index 000000000000..4081c366faf8 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D5N/MaterialParameters.json @@ -0,0 +1,24 @@ +{ + "properties": [{ + "model_part_name" : "PorousDomain.filter", + "properties_id" : 1, + "Material" : { + "constitutive_law": { + "name" : "GeoThermalDispersion2DLaw" + }, + "Variables" : { + "DENSITY_SOLID" : 2650.0, + "DENSITY_WATER" : 1000.0, + "POROSITY" : 1.0, + "RETENTION_LAW" : "SaturatedLaw", + "SATURATED_SATURATION" : 1.0, + "SPECIFIC_HEAT_CAPACITY_SOLID" : 400.0, + "SPECIFIC_HEAT_CAPACITY_WATER" : 379.5, + "THERMAL_CONDUCTIVITY_SOLID_XX" : 2.65, + "THERMAL_CONDUCTIVITY_WATER" : 4800, + "DYNAMIC_VISCOSITY" : 0.001 + }, + "Tables": {} + } + }] +} diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D5N/ProjectParameters.json b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D5N/ProjectParameters.json new file mode 100644 index 000000000000..f38ecf0861f9 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D5N/ProjectParameters.json @@ -0,0 +1,143 @@ +{ + "problem_data": { + "problem_name" : "test_thermal_line_element_2D5N", + "start_time" : 0.0, + "end_time" : 86400000, + "echo_level" : 0, + "parallel_type" : "OpenMP", + "number_of_threads" : 1 + }, + "solver_settings": { + "solver_type" : "T", + "model_part_name" : "PorousDomain", + "domain_size" : 2, + "model_import_settings" : { + "input_type" : "mdpa", + "input_filename" : "test_thermal_line_element_2D5N" + }, + "material_import_settings" : { + "materials_filename" : "MaterialParameters.json" + }, + "time_stepping" : { + "time_step" : 600, + "max_delta_time_factor" : 10000 + }, + "buffer_size" : 2, + "echo_level" : 0, + "clear_storage" : false, + "compute_reactions" : false, + "move_mesh_flag" : false, + "reform_dofs_at_each_step" : false, + "nodal_smoothing" : false, + "block_builder" : true, + "solution_type" : "Transient_Heat_Transfer", + "scheme_type" : "Backward_Euler", + "reset_displacements" : false, + "newmark_beta" : 0.25, + "newmark_gamma" : 0.5, + "newmark_theta" : 0.5, + "rayleigh_m" : 0.0, + "rayleigh_k" : 0.0, + "strategy_type" : "newton_raphson", + "convergence_criterion" : "temperature_criterion", + "temperature_relative_tolerance" : 1.0E-4, + "temperature_absolute_tolerance" : 1.0E-9, + "residual_relative_tolerance" : 1.0E-4, + "residual_absolute_tolerance" : 1.0E-9, + "min_iterations" : 2, + "max_iterations" : 15, + "number_cycles" : 2, + "reduction_factor" : 0.5, + "increase_factor" : 2.0, + "desired_iterations" : 2, + "max_radius_factor" : 10.0, + "min_radius_factor" : 0.1, + "calculate_reactions" : true, + "max_line_search_iterations" : 5, + "first_alpha_value" : 0.5, + "second_alpha_value" : 1.0, + "min_alpha" : 0.1, + "max_alpha" : 2.0, + "line_search_tolerance" : 0.5, + "rotation_dofs" : true, + "linear_solver_settings" : { + "solver_type" : "bicgstab", + "tolerance" : 1.0e-6, + "max_iteration" : 1000, + "scaling" : true, + "preconditioner_type" : "ilu0" + }, + "problem_domain_sub_model_part_list" : ["filter"], + "processes_sub_model_part_list" : ["Start","top","bottom"], + "body_domain_sub_model_part_list" : ["filter"] + }, + "output_processes": { + "gid_output": [{ + "python_module" : "gid_output_process", + "kratos_module" : "KratosMultiphysics", + "process_name" : "GiDOutputProcess", + "Parameters" : { + "model_part_name" : "PorousDomain.filter", + "output_name" : "test_thermal_line_element_2D5N", + "postprocess_parameters" : { + "result_file_configuration" : { + "gidpost_flags" : { + "WriteDeformedMeshFlag" : "WriteUndeformed", + "WriteConditionsFlag" : "WriteElementsOnly", + "GiDPostMode" : "GiD_PostAscii", + "MultiFileFlag" : "SingleFile" + }, + "file_label" : "step", + "output_control_type" : "step", + "output_interval" : 1, + "body_output" : true, + "node_output" : false, + "skin_output" : false, + "plane_output" : [], + "nodal_results" : ["TEMPERATURE"], + "gauss_point_results" : [] + }, + "point_data_configuration" : [] + } + } + }] + }, + "processes": { + "constraints_process_list": [{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters": { + "model_part_name" : "PorousDomain.Start", + "variable_name" : "TEMPERATURE", + "is_fixed" : false, + "value" : 0.0, + "table" : 0 + } + },{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters": { + "model_part_name" : "PorousDomain.top", + "variable_name" : "TEMPERATURE", + "is_fixed" : true, + "value" : 100.0, + "table" : 0 + } + },{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters" : { + "model_part_name" : "PorousDomain.bottom", + "variable_name" : "TEMPERATURE", + "is_fixed" : true, + "value" : -10.0, + "table" : 0 + } + }], + "loads_process_list": [], + "auxiliar_process_list": [] + } +} diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D5N/test_thermal_line_element_2D5N.mdpa b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D5N/test_thermal_line_element_2D5N.mdpa new file mode 100644 index 000000000000..63e78c2f4978 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_2D5N/test_thermal_line_element_2D5N.mdpa @@ -0,0 +1,108 @@ +Begin Properties 1 +End Properties + + +Begin Nodes + 1 0.000000e+00 0.000000e+00 0.000000e+00 + 2 0.000000e+00 -1.000000e+00 0.000000e+00 + 3 0.000000e+00 -2.000000e+00 0.000000e+00 + 4 0.000000e+00 -3.000000e+00 0.000000e+00 + 5 0.000000e+00 -0.500000e+00 0.000000e+00 + 6 0.000000e+00 -1.500000e+00 0.000000e+00 + 7 0.000000e+00 -2.500000e+00 0.000000e+00 + 8 0.000000e+00 -0.250000e+00 0.000000e+00 + 9 0.000000e+00 -0.750000e+00 0.000000e+00 +10 0.000000e+00 -1.250000e+00 0.000000e+00 +11 0.000000e+00 -1.750000e+00 0.000000e+00 +12 0.000000e+00 -2.250000e+00 0.000000e+00 +13 0.000000e+00 -2.750000e+00 0.000000e+00 +End Nodes + + +Begin Elements GeoTransientThermalLineElement2D5N + 1 1 1 2 8 5 9 + 2 1 2 3 10 6 11 + 3 1 3 4 12 7 13 +End Elements + + +Begin SubModelPart Start + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart + + +Begin SubModelPart filter + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions + End SubModelPart + + +Begin SubModelPart top + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + End SubModelPartNodes + Begin SubModelPartElements + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart + + +Begin SubModelPart bottom + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 4 + End SubModelPartNodes + Begin SubModelPartElements + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart \ No newline at end of file diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D2N/MaterialParameters.json b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D2N/MaterialParameters.json new file mode 100644 index 000000000000..b8ea0f4d25d7 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D2N/MaterialParameters.json @@ -0,0 +1,24 @@ +{ + "properties": [{ + "model_part_name" : "PorousDomain.filter", + "properties_id" : 1, + "Material" : { + "constitutive_law": { + "name" : "GeoThermalDispersion3DLaw" + }, + "Variables" : { + "DENSITY_SOLID" : 2650.0, + "DENSITY_WATER" : 1000.0, + "POROSITY" : 1.0, + "RETENTION_LAW" : "SaturatedLaw", + "SATURATED_SATURATION" : 1.0, + "SPECIFIC_HEAT_CAPACITY_SOLID" : 400.0, + "SPECIFIC_HEAT_CAPACITY_WATER" : 379.5, + "THERMAL_CONDUCTIVITY_SOLID_XX" : 2.65, + "THERMAL_CONDUCTIVITY_WATER" : 4800, + "DYNAMIC_VISCOSITY" : 0.001 + }, + "Tables": {} + } + }] +} diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D2N/ProjectParameters.json b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D2N/ProjectParameters.json new file mode 100644 index 000000000000..315a2d66fe9e --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D2N/ProjectParameters.json @@ -0,0 +1,143 @@ +{ + "problem_data": { + "problem_name" : "test_thermal_line_element_3D2N", + "start_time" : 0.0, + "end_time" : 86400000, + "echo_level" : 0, + "parallel_type" : "OpenMP", + "number_of_threads" : 1 + }, + "solver_settings": { + "solver_type" : "T", + "model_part_name" : "PorousDomain", + "domain_size" : 3, + "model_import_settings" : { + "input_type" : "mdpa", + "input_filename" : "test_thermal_line_element_3D2N" + }, + "material_import_settings" : { + "materials_filename" : "MaterialParameters.json" + }, + "time_stepping" : { + "time_step" : 600, + "max_delta_time_factor" : 10000 + }, + "buffer_size" : 2, + "echo_level" : 0, + "clear_storage" : false, + "compute_reactions" : false, + "move_mesh_flag" : false, + "reform_dofs_at_each_step" : false, + "nodal_smoothing" : false, + "block_builder" : true, + "solution_type" : "Transient_Heat_Transfer", + "scheme_type" : "Backward_Euler", + "reset_displacements" : false, + "newmark_beta" : 0.25, + "newmark_gamma" : 0.5, + "newmark_theta" : 0.5, + "rayleigh_m" : 0.0, + "rayleigh_k" : 0.0, + "strategy_type" : "newton_raphson", + "convergence_criterion" : "temperature_criterion", + "temperature_relative_tolerance" : 1.0E-4, + "temperature_absolute_tolerance" : 1.0E-9, + "residual_relative_tolerance" : 1.0E-4, + "residual_absolute_tolerance" : 1.0E-9, + "min_iterations" : 2, + "max_iterations" : 15, + "number_cycles" : 2, + "reduction_factor" : 0.5, + "increase_factor" : 2.0, + "desired_iterations" : 2, + "max_radius_factor" : 10.0, + "min_radius_factor" : 0.1, + "calculate_reactions" : true, + "max_line_search_iterations" : 5, + "first_alpha_value" : 0.5, + "second_alpha_value" : 1.0, + "min_alpha" : 0.1, + "max_alpha" : 2.0, + "line_search_tolerance" : 0.5, + "rotation_dofs" : true, + "linear_solver_settings" : { + "solver_type" : "bicgstab", + "tolerance" : 1.0e-6, + "max_iteration" : 1000, + "scaling" : true, + "preconditioner_type" : "ilu0" + }, + "problem_domain_sub_model_part_list" : ["filter"], + "processes_sub_model_part_list" : ["Start","top","bottom"], + "body_domain_sub_model_part_list" : ["filter"] + }, + "output_processes": { + "gid_output": [{ + "python_module" : "gid_output_process", + "kratos_module" : "KratosMultiphysics", + "process_name" : "GiDOutputProcess", + "Parameters" : { + "model_part_name" : "PorousDomain.filter", + "output_name" : "test_thermal_line_element_3D2N", + "postprocess_parameters" : { + "result_file_configuration" : { + "gidpost_flags" : { + "WriteDeformedMeshFlag" : "WriteUndeformed", + "WriteConditionsFlag" : "WriteElementsOnly", + "GiDPostMode" : "GiD_PostAscii", + "MultiFileFlag" : "SingleFile" + }, + "file_label" : "step", + "output_control_type" : "step", + "output_interval" : 1, + "body_output" : true, + "node_output" : false, + "skin_output" : false, + "plane_output" : [], + "nodal_results" : ["TEMPERATURE"], + "gauss_point_results" : [] + }, + "point_data_configuration" : [] + } + } + }] + }, + "processes": { + "constraints_process_list": [{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters": { + "model_part_name" : "PorousDomain.Start", + "variable_name" : "TEMPERATURE", + "is_fixed" : false, + "value" : 0.0, + "table" : 0 + } + },{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters": { + "model_part_name" : "PorousDomain.top", + "variable_name" : "TEMPERATURE", + "is_fixed" : true, + "value" : 100.0, + "table" : 0 + } + },{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters" : { + "model_part_name" : "PorousDomain.bottom", + "variable_name" : "TEMPERATURE", + "is_fixed" : true, + "value" : -10.0, + "table" : 0 + } + }], + "loads_process_list": [], + "auxiliar_process_list": [] + } +} diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D2N/test_thermal_line_element_3D2N.mdpa b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D2N/test_thermal_line_element_3D2N.mdpa new file mode 100644 index 000000000000..db1c0c99d82a --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D2N/test_thermal_line_element_3D2N.mdpa @@ -0,0 +1,81 @@ +Begin Properties 1 +End Properties + + +Begin Nodes + 1 0.000000e+00 0.000000e+00 0.000000e+00 + 2 0.000000e+00 -1.000000e+00 0.000000e+00 + 3 0.000000e+00 -2.000000e+00 0.000000e+00 + 4 0.000000e+00 -3.000000e+00 0.000000e+00 +End Nodes + + +Begin Elements GeoTransientThermalLineElement2D2N + 1 1 1 2 + 2 1 2 3 + 3 1 3 4 +End Elements + + +Begin SubModelPart Start + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart + + +Begin SubModelPart filter + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions + End SubModelPart + + +Begin SubModelPart top + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + End SubModelPartNodes + Begin SubModelPartElements + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart + + +Begin SubModelPart bottom + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 4 + End SubModelPartNodes + Begin SubModelPartElements + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart \ No newline at end of file diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D3N/MaterialParameters.json b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D3N/MaterialParameters.json new file mode 100644 index 000000000000..b8ea0f4d25d7 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D3N/MaterialParameters.json @@ -0,0 +1,24 @@ +{ + "properties": [{ + "model_part_name" : "PorousDomain.filter", + "properties_id" : 1, + "Material" : { + "constitutive_law": { + "name" : "GeoThermalDispersion3DLaw" + }, + "Variables" : { + "DENSITY_SOLID" : 2650.0, + "DENSITY_WATER" : 1000.0, + "POROSITY" : 1.0, + "RETENTION_LAW" : "SaturatedLaw", + "SATURATED_SATURATION" : 1.0, + "SPECIFIC_HEAT_CAPACITY_SOLID" : 400.0, + "SPECIFIC_HEAT_CAPACITY_WATER" : 379.5, + "THERMAL_CONDUCTIVITY_SOLID_XX" : 2.65, + "THERMAL_CONDUCTIVITY_WATER" : 4800, + "DYNAMIC_VISCOSITY" : 0.001 + }, + "Tables": {} + } + }] +} diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D3N/ProjectParameters.json b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D3N/ProjectParameters.json new file mode 100644 index 000000000000..6af9e4f7ddb0 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D3N/ProjectParameters.json @@ -0,0 +1,143 @@ +{ + "problem_data": { + "problem_name" : "test_thermal_line_element_3D3N", + "start_time" : 0.0, + "end_time" : 86400000, + "echo_level" : 0, + "parallel_type" : "OpenMP", + "number_of_threads" : 1 + }, + "solver_settings": { + "solver_type" : "T", + "model_part_name" : "PorousDomain", + "domain_size" : 3, + "model_import_settings" : { + "input_type" : "mdpa", + "input_filename" : "test_thermal_line_element_3D3N" + }, + "material_import_settings" : { + "materials_filename" : "MaterialParameters.json" + }, + "time_stepping" : { + "time_step" : 600, + "max_delta_time_factor" : 10000 + }, + "buffer_size" : 2, + "echo_level" : 0, + "clear_storage" : false, + "compute_reactions" : false, + "move_mesh_flag" : false, + "reform_dofs_at_each_step" : false, + "nodal_smoothing" : false, + "block_builder" : true, + "solution_type" : "Transient_Heat_Transfer", + "scheme_type" : "Backward_Euler", + "reset_displacements" : false, + "newmark_beta" : 0.25, + "newmark_gamma" : 0.5, + "newmark_theta" : 0.5, + "rayleigh_m" : 0.0, + "rayleigh_k" : 0.0, + "strategy_type" : "newton_raphson", + "convergence_criterion" : "temperature_criterion", + "temperature_relative_tolerance" : 1.0E-4, + "temperature_absolute_tolerance" : 1.0E-9, + "residual_relative_tolerance" : 1.0E-4, + "residual_absolute_tolerance" : 1.0E-9, + "min_iterations" : 2, + "max_iterations" : 15, + "number_cycles" : 2, + "reduction_factor" : 0.5, + "increase_factor" : 2.0, + "desired_iterations" : 2, + "max_radius_factor" : 10.0, + "min_radius_factor" : 0.1, + "calculate_reactions" : true, + "max_line_search_iterations" : 5, + "first_alpha_value" : 0.5, + "second_alpha_value" : 1.0, + "min_alpha" : 0.1, + "max_alpha" : 2.0, + "line_search_tolerance" : 0.5, + "rotation_dofs" : true, + "linear_solver_settings" : { + "solver_type" : "bicgstab", + "tolerance" : 1.0e-6, + "max_iteration" : 1000, + "scaling" : true, + "preconditioner_type" : "ilu0" + }, + "problem_domain_sub_model_part_list" : ["filter"], + "processes_sub_model_part_list" : ["Start","top","bottom"], + "body_domain_sub_model_part_list" : ["filter"] + }, + "output_processes": { + "gid_output": [{ + "python_module" : "gid_output_process", + "kratos_module" : "KratosMultiphysics", + "process_name" : "GiDOutputProcess", + "Parameters" : { + "model_part_name" : "PorousDomain.filter", + "output_name" : "test_thermal_line_element_3D3N", + "postprocess_parameters" : { + "result_file_configuration" : { + "gidpost_flags" : { + "WriteDeformedMeshFlag" : "WriteUndeformed", + "WriteConditionsFlag" : "WriteElementsOnly", + "GiDPostMode" : "GiD_PostAscii", + "MultiFileFlag" : "SingleFile" + }, + "file_label" : "step", + "output_control_type" : "step", + "output_interval" : 1, + "body_output" : true, + "node_output" : false, + "skin_output" : false, + "plane_output" : [], + "nodal_results" : ["TEMPERATURE"], + "gauss_point_results" : [] + }, + "point_data_configuration" : [] + } + } + }] + }, + "processes": { + "constraints_process_list": [{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters": { + "model_part_name" : "PorousDomain.Start", + "variable_name" : "TEMPERATURE", + "is_fixed" : false, + "value" : 0.0, + "table" : 0 + } + },{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters": { + "model_part_name" : "PorousDomain.top", + "variable_name" : "TEMPERATURE", + "is_fixed" : true, + "value" : 100.0, + "table" : 0 + } + },{ + "python_module" : "apply_scalar_constraint_table_process", + "kratos_module" : "KratosMultiphysics.GeoMechanicsApplication", + "process_name" : "ApplyScalarConstraintTableProcess", + "Parameters" : { + "model_part_name" : "PorousDomain.bottom", + "variable_name" : "TEMPERATURE", + "is_fixed" : true, + "value" : -10.0, + "table" : 0 + } + }], + "loads_process_list": [], + "auxiliar_process_list": [] + } +} diff --git a/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D3N/test_thermal_line_element_3D3N.mdpa b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D3N/test_thermal_line_element_3D3N.mdpa new file mode 100644 index 000000000000..70ae0927ee21 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/test_thermal_element/test_thermal_line_element/test_thermal_line_element_3D3N/test_thermal_line_element_3D3N.mdpa @@ -0,0 +1,90 @@ +Begin Properties 1 +End Properties + + +Begin Nodes + 1 0.000000e+00 0.000000e+00 0.000000e+00 + 2 0.000000e+00 -1.000000e+00 0.000000e+00 + 3 0.000000e+00 -2.000000e+00 0.000000e+00 + 4 0.000000e+00 -3.000000e+00 0.000000e+00 + 5 0.000000e+00 -0.500000e+00 0.000000e+00 + 6 0.000000e+00 -1.500000e+00 0.000000e+00 + 7 0.000000e+00 -2.500000e+00 0.000000e+00 +End Nodes + + +Begin Elements GeoTransientThermalLineElement2D3N + 1 1 1 2 5 + 2 1 2 3 6 + 3 1 3 4 7 +End Elements + + +Begin SubModelPart Start + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + 5 + 6 + 7 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart + + +Begin SubModelPart filter + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + 5 + 6 + 7 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions + End SubModelPart + + +Begin SubModelPart top + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 1 + End SubModelPartNodes + Begin SubModelPartElements + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart + + +Begin SubModelPart bottom + Begin SubModelPartTables + End SubModelPartTables + Begin SubModelPartNodes + 4 + End SubModelPartNodes + Begin SubModelPartElements + End SubModelPartElements + Begin SubModelPartConditions + End SubModelPartConditions +End SubModelPart \ No newline at end of file diff --git a/applications/GeoMechanicsApplication/tests/test_transient_thermal.py b/applications/GeoMechanicsApplication/tests/test_transient_thermal.py index 6746d13a8460..2077b233858e 100644 --- a/applications/GeoMechanicsApplication/tests/test_transient_thermal.py +++ b/applications/GeoMechanicsApplication/tests/test_transient_thermal.py @@ -11,6 +11,7 @@ class KratosGeoMechanicsTransientThermalTests(KratosUnittest.TestCase): etalon_value2 = 17.55892791313559322 etalon_value3 = 41.3797035928672316 etalon_value4 = 35.31073446327683615819 + etalon_value5 = 26.6666666666666667 def setUp(self): # Code here will be placed BEFORE every test in this TestCase. @@ -395,6 +396,48 @@ def test_micro_climate_8(self): temperature = test_helper.get_temperature(simulation) temp = temperature[4] self.assertAlmostEqual(6.1263675349643965, temp) + + def test_thermal_line_element_2D2N(self): + test_name = 'test_thermal_line_element_2D2N' + file_path = test_helper.get_file_path(os.path.join('test_thermal_element', 'test_thermal_line_element', test_name)) + simulation = test_helper.run_kratos(file_path) + temperature = test_helper.get_temperature(simulation) + self.assertAlmostEqual(self.etalon_value5, temperature[2]) + + def test_thermal_line_element_2D3N(self): + test_name = 'test_thermal_line_element_2D3N' + file_path = test_helper.get_file_path(os.path.join('test_thermal_element', 'test_thermal_line_element', test_name)) + simulation = test_helper.run_kratos(file_path) + temperature = test_helper.get_temperature(simulation) + self.assertAlmostEqual(self.etalon_value5, temperature[2]) + + def test_thermal_line_element_2D4N(self): + test_name = 'test_thermal_line_element_2D4N' + file_path = test_helper.get_file_path(os.path.join('test_thermal_element', 'test_thermal_line_element', test_name)) + simulation = test_helper.run_kratos(file_path) + temperature = test_helper.get_temperature(simulation) + self.assertAlmostEqual(self.etalon_value5, temperature[2]) + + def test_thermal_line_element_2D5N(self): + test_name = 'test_thermal_line_element_2D5N' + file_path = test_helper.get_file_path(os.path.join('test_thermal_element', 'test_thermal_line_element', test_name)) + simulation = test_helper.run_kratos(file_path) + temperature = test_helper.get_temperature(simulation) + self.assertAlmostEqual(self.etalon_value5, temperature[2]) + + def test_thermal_line_element_3D2N(self): + test_name = 'test_thermal_line_element_3D2N' + file_path = test_helper.get_file_path(os.path.join('test_thermal_element', 'test_thermal_line_element', test_name)) + simulation = test_helper.run_kratos(file_path) + temperature = test_helper.get_temperature(simulation) + self.assertAlmostEqual(self.etalon_value5, temperature[2]) + + def test_thermal_line_element_3D3N(self): + test_name = 'test_thermal_line_element_3D3N' + file_path = test_helper.get_file_path(os.path.join('test_thermal_element', 'test_thermal_line_element', test_name)) + simulation = test_helper.run_kratos(file_path) + temperature = test_helper.get_temperature(simulation) + self.assertAlmostEqual(self.etalon_value5, temperature[2]) if __name__ == '__main__': KratosUnittest.main() From 5f10a9245872b4e8b11c6af2e3cd086c5c9f88cd Mon Sep 17 00:00:00 2001 From: IAntonau Date: Tue, 19 Mar 2024 16:14:42 +0100 Subject: [PATCH 011/142] required changes --- .../custom_external_libraries/CoSimIO/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/CoSimulationApplication/custom_external_libraries/CoSimIO/CMakeLists.txt b/applications/CoSimulationApplication/custom_external_libraries/CoSimIO/CMakeLists.txt index 14edbca76e94..7906fe7ab838 100644 --- a/applications/CoSimulationApplication/custom_external_libraries/CoSimIO/CMakeLists.txt +++ b/applications/CoSimulationApplication/custom_external_libraries/CoSimIO/CMakeLists.txt @@ -85,7 +85,7 @@ if(MSVC) endif() elseif(${CMAKE_COMPILER_IS_GNUCXX}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c89") if (CO_SIM_IO_STRICT_COMPILER) @@ -101,7 +101,7 @@ elseif(${CMAKE_COMPILER_IS_GNUCXX}) # Note: This command makes sure that this option comes pretty late on the cmdline. link_libraries("$<$,$,7.0>,$,9.0>>:-lstdc++fs>") elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c89") if (CO_SIM_IO_STRICT_COMPILER) @@ -110,7 +110,7 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") endif() elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c89") if (CO_SIM_IO_STRICT_COMPILER) @@ -119,7 +119,7 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") endif() else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wpedantic") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -Wpedantic") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c89 -Wall -Wpedantic") endif() From 6b28b071085482981353852d41cd726fa8c0eead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Fri, 26 Apr 2024 10:30:44 +0200 Subject: [PATCH 012/142] Update README --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index ffe92b54237b..9e4e2e8e34df 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,13 @@ [![Release][release-image]][releases] - + [![PyPI pyversions](https://img.shields.io/pypi/pyversions/KratosMultiphysics.svg)](https://pypi.org/project/KratosMultiphysics/) [![Downloads](https://pepy.tech/badge/KratosMultiphysics/month)](https://pepy.tech/project/KratosMultiphysics) -[release-image]: https://img.shields.io/badge/release-9.4-green.svg?style=flat +[release-image]: https://img.shields.io/badge/release-9.5-green.svg?style=flat [releases]: https://github.com/KratosMultiphysics/Kratos/releases [license-image]: https://img.shields.io/badge/license-BSD-green.svg?style=flat @@ -157,6 +157,6 @@ Some users of the technologies developed in Kratos are: # How to cite Kratos? Please, use the following references when citing Kratos in your work. -- Dadvand, P., Rossi, R. & Oñate, E. An Object-oriented Environment for Developing Finite Element Codes for Multi-disciplinary Applications. Arch Computat Methods Eng 17, 253–297 (2010). https://doi.org/10.1007/s11831-010-9045-2 -- Dadvand, P., Rossi, R., Gil, M., Martorell, X., Cotela, J., Juanpere, E., Idelsohn, S., Oñate, E. (2013). Migration of a generic multi-physics framework to HPC environments. Computers & Fluids. 80. 301–309. 10.1016/j.compfluid.2012.02.004. -- Vicente Mataix Ferrándiz, Philipp Bucher, Rubén Zorrilla, Riccardo Rossi, Jordi Cotela, Alejandro Cornejo Velázquez, Miguel Angel Celigueta, Josep Maria, Tobias Teschemacher, Carlos Roig, Miguel Maso, Guillermo Casas, Suneth Warnakulasuriya, Marc Núñez, Pooyan Dadvand, Salva Latorre, Ignasi de Pouplana, Joaquín Irazábal González, Ferran Arrufat, … Javi Gárate. (2022). KratosMultiphysics/Kratos: Release 9.2 (v9.2). Zenodo. https://doi.org/10.5281/zenodo.3234644 +- [Dadvand, P., Rossi, R. & Oñate, E. An Object-oriented Environment for Developing Finite Element Codes for Multi-disciplinary Applications. Arch Computat Methods Eng 17, 253–297 (2010). https://doi.org/10.1007/s11831-010-9045-2](https://doi.org/10.1007/s11831-010-9045-2) +- [Dadvand, P., Rossi, R., Gil, M., Martorell, X., Cotela, J., Juanpere, E., Idelsohn, S., Oñate, E. (2013). Migration of a generic multi-physics framework to HPC environments. Computers & Fluids. 80. 301–309. 10.1016/j.compfluid.2012.02.004.](10.1016/j.compfluid.2012.02.004) +- [Vicente Mataix Ferrándiz, Philipp Bucher, Rubén Zorrilla, Suneth Warnakulasuriya, Riccardo Rossi, Alejandro Cornejo, jcotela, Carlos Roig, Josep Maria, tteschemacher, Miguel Masó, Guillermo Casas, Marc Núñez, Pooyan Dadvand, Salva Latorre, Ignasi de Pouplana, Joaquín Irazábal González, AFranci, Ferran Arrufat, riccardotosi, Aditya Ghantasala, Klaus Bernd Sautter, Peter Wilson, dbaumgaertner, Bodhinanda Chandra, Armin Geiser, Inigo Lopez, lluís, jgonzalezusua, Javi Gárate. (2024). KratosMultiphysics/Kratos: Release 9.5 (v9.5). Zenodo. https://doi.org/10.5281/zenodo.3234644](https://zenodo.org/records/6926179) From 6798f3c8e6155b8d931086234a7e85711ed96fdb Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 29 Apr 2024 09:42:42 +0200 Subject: [PATCH 013/142] Applying some suggestions --- .../add_trilinos_linear_solvers_to_python.cpp | 2 +- .../linear_solvers/fallback_linear_solver.h | 48 ++++++++++--------- .../python/add_linear_solvers_to_python.cpp | 2 +- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp b/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp index 5e5f4912371a..bacb1f728820 100644 --- a/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp +++ b/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp @@ -91,7 +91,7 @@ void AddLinearSolvers(pybind11::module& m) .def("GetParameters", &TrilinosFallbackLinearSolverType::GetParameters) .def("SetParameters", &TrilinosFallbackLinearSolverType::SetParameters) .def("GetCurrentSolverIndex", &TrilinosFallbackLinearSolverType::GetCurrentSolverIndex) - .def("SetCurrentSolverIndex", &TrilinosFallbackLinearSolverType::SetCurrentSolverIndex) + .def("ClearCurrentSolverIndex", &TrilinosFallbackLinearSolverType::ClearCurrentSolverIndex) ; #ifndef TRILINOS_EXCLUDE_AZTEC_SOLVER diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index daf31f19ba9a..242428c4b10e 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -104,11 +104,16 @@ class FallbackLinearSolver ///@name Life Cycle ///@{ + /** + * @brief This is the default constructor + */ + explicit FallbackLinearSolver() = default; + /** * @brief This is the default constructor * @param ThisParameters The configuration parameters */ - explicit FallbackLinearSolver(Parameters ThisParameters = Parameters(R"({})")) + explicit FallbackLinearSolver(Parameters ThisParameters) : mParameters(ThisParameters) { // Set the default parameters @@ -161,6 +166,9 @@ class FallbackLinearSolver ) : mSolvers(rSolvers), mParameters(ThisParameters) { + // Verify that linear solvers are not defined in the parameters + KRATOS_ERROR_IF(mParameters.Has("solvers")) << "The solvers are already defined in the input parameters" << std::endl; + // Set the default parameters mParameters.ValidateAndAssignDefaults(GetDefaultParameters()); @@ -317,7 +325,7 @@ class FallbackLinearSolver // In case of failure if (!success) { // First, update the counter - UpdateCounterSolverIndex(); + UpdateSolverIndex(); // Call initialize methods InitializeSolutionStep(rA, rX, rB); @@ -347,7 +355,7 @@ class FallbackLinearSolver // In case of failure if (!success) { // First, update the counter - UpdateCounterSolverIndex(); + UpdateSolverIndex(); // // Call initialize methods (NOTE: does not exist the method for dense matrices) // InitializeSolutionStep(rA, rX, rB); @@ -500,21 +508,20 @@ class FallbackLinearSolver } /** - * @brief Get the Current Solver Index. + * @brief Get the Current Solver Index. (not mutable) * @return IndexType The current solver index. */ - IndexType& GetCurrentSolverIndex() + const IndexType GetCurrentSolverIndex() { return mCurrentSolverIndex; } /** - * @brief Set the Current Solver Index. - * @param index The new solver index to set. + * @brief Set the Current Solver Index to 0. */ - void SetCurrentSolverIndex(const IndexType Index) + void ClearCurrentSolverIndex() { - mCurrentSolverIndex = Index; + mCurrentSolverIndex = 0; } ///@} @@ -747,6 +754,14 @@ class FallbackLinearSolver /** * @brief Get the default parameters for this solver. * @details This function returns the default parameters for configuring this solver. + * Empty in defaults. Should be filled with the solvers to try. For example: + * { + * "solver_type": "amgcl" + * }, + * { + * "solver_type": "skyline_lu_factorization" + * } + * Label of the solver is solver_x, where x is the index in the list * @return Default parameters for the solver. */ const Parameters GetDefaultParameters() const @@ -754,14 +769,6 @@ class FallbackLinearSolver return Parameters(R"({ "solver_type": "fallback_linear_solver", "solvers" : [ - // Empty in defaults. Should be filled with the solvers to try. For example: - // { - // "solver_type": "amgcl" - // }, - // { - // "solver_type": "skyline_lu_factorization" - // } - // Label of the solver is solver_x, where x is the index in the list ], "reset_solver_index_each_try": false })"); @@ -776,13 +783,10 @@ class FallbackLinearSolver * outlines a placeholder for enhanced future functionality, such as more comprehensive logging or * additional transition actions. */ - void UpdateCounterSolverIndex() + void UpdateSolverIndex() { // Safety check to ensure we have solvers to work with - if (mSolvers.empty()) { - KRATOS_WARNING("FallbackLinearSolver") << "No solvers are configured." << std::endl; - return; - } + KRATOS_ERROR_IF(mSolvers.empty()) << "No solvers are configured." << std::endl; // Log the settings of the current (failing) solver, if applicable if (mCurrentSolverIndex < mSolvers.size()) { diff --git a/kratos/python/add_linear_solvers_to_python.cpp b/kratos/python/add_linear_solvers_to_python.cpp index 9ff1baff2641..e0ab8671726f 100644 --- a/kratos/python/add_linear_solvers_to_python.cpp +++ b/kratos/python/add_linear_solvers_to_python.cpp @@ -256,7 +256,7 @@ void AddLinearSolversToPython(pybind11::module& m) .def("GetParameters", &FallbackLinearSolverType::GetParameters) .def("SetParameters", &FallbackLinearSolverType::SetParameters) .def("GetCurrentSolverIndex", &FallbackLinearSolverType::GetCurrentSolverIndex) - .def("SetCurrentSolverIndex", &FallbackLinearSolverType::SetCurrentSolverIndex) + .def("ClearCurrentSolverIndex", &FallbackLinearSolverType::ClearCurrentSolverIndex) ; } From cab49c94a1396f7f3e442968867c38e3ce52e8ea Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 29 Apr 2024 09:44:14 +0200 Subject: [PATCH 014/142] Missing --- kratos/linear_solvers/fallback_linear_solver.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index 242428c4b10e..c6ec05f35850 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -144,6 +144,9 @@ class FallbackLinearSolver ) : mSolvers({pSolver1, pSolver2}), mParameters(ThisParameters) { + // Verify that linear solvers are not defined in the parameters + KRATOS_ERROR_IF(mParameters.Has("solvers")) << "The solvers are already defined in the input parameters" << std::endl; + // Set the default parameters mParameters.ValidateAndAssignDefaults(GetDefaultParameters()); From 3bdf811d408ec6fc69f06036dd13c263516d5226 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 29 Apr 2024 09:50:41 +0200 Subject: [PATCH 015/142] Remove shallow copies --- kratos/linear_solvers/fallback_linear_solver.h | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index c6ec05f35850..c8e07d58c306 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -185,12 +185,7 @@ class FallbackLinearSolver } /// Copy constructor. - FallbackLinearSolver(const FallbackLinearSolver& rOther) - : mSolvers(rOther.mSolvers), - mParameters(rOther.mParameters), - mCurrentSolverIndex(rOther.mCurrentSolverIndex) - { - } + FallbackLinearSolver(const FallbackLinearSolver& rOther) = delete; /// Destructor. ~FallbackLinearSolver() override = default; @@ -200,13 +195,7 @@ class FallbackLinearSolver ///@{ /// Assignment operator. - FallbackLinearSolver& operator=(const FallbackLinearSolver& rOther) - { - mSolvers = rOther.mSolvers; - mParameters = rOther.mParameters; - mCurrentSolverIndex = rOther.mCurrentSolverIndex; - return *this; - } + FallbackLinearSolver& operator=(const FallbackLinearSolver& rOther) = delete; ///@} ///@name Operations From 57a5c8d5a98df6f61d707bdc91920d9fab4e2d74 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 29 Apr 2024 09:56:48 +0200 Subject: [PATCH 016/142] More suggestions --- .../linear_solvers/fallback_linear_solver.h | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index c8e07d58c306..675f8142c3e6 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -419,25 +419,24 @@ class FallbackLinearSolver { // Increase the solvers vector mSolvers.push_back(pSolver); + + // Extend the parameters + FillParametersFromSolver(pSolver); } /** * @brief Add a linear solver to the collection with additional parameters. * @details This function adds a linear solver to the collection and extends the parameters. - * @param pSolver Pointer to the linear solver to be added. * @param ThisParameters Parameters associated with the linear solver. - * @note This function extends parameters, but the interface for this is yet to be decided. */ - void AddSolver( - LinearSolverPointer pSolver, - const Parameters ThisParameters - ) + void AddSolver(const Parameters ThisParameters) { - // Increase the solvers vector - AddSolver(pSolver); + // Create the solver + auto p_solver = ConstructLinearSolverFromSettings(ThisParameters); + mSolvers.push_back(p_solver); - // Extend the parameters - FillParametersFromSolver(pSolver); + // Add the new solver parameters to the collection + mParameters["solvers"].Append(ThisParameters); } ///@} @@ -726,7 +725,7 @@ class FallbackLinearSolver // Set the solver type to include the solver's information dummy_parameters["solver_type"].SetString(pSolver->Info() + " (settings unknown)"); - // Generate a unique key and add the new solver parameters to the collection + // Add the new solver parameters to the collection mParameters["solvers"].Append(dummy_parameters); } From d86b4dd9fec93b046d5257f0ef855b66af998204 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 29 Apr 2024 13:46:20 +0200 Subject: [PATCH 017/142] More suggestions --- .../add_trilinos_linear_solvers_to_python.cpp | 6 +++--- .../test_trilinos_fallback_linear_solver.cpp | 2 +- kratos/linear_solvers/fallback_linear_solver.h | 16 ++++++++-------- kratos/python/add_linear_solvers_to_python.cpp | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp b/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp index bacb1f728820..3ae2ab855182 100644 --- a/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp +++ b/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp @@ -81,12 +81,12 @@ void AddLinearSolvers(pybind11::module& m) .def("AddSolver", [](TrilinosFallbackLinearSolverType& rSelf, TrilinosLinearSolverType::Pointer pSolver) { rSelf.AddSolver(pSolver); }) - .def("AddSolver", [](TrilinosFallbackLinearSolverType& rSelf, TrilinosLinearSolverType::Pointer pSolver, const Parameters ThisParameters) { - rSelf.AddSolver(pSolver, ThisParameters); + .def("AddSolver", [](TrilinosFallbackLinearSolverType& rSelf, const Parameters ThisParameters) { + rSelf.AddSolver(ThisParameters); }) .def("GetSolvers", &TrilinosFallbackLinearSolverType::GetSolvers) .def("SetSolvers", &TrilinosFallbackLinearSolverType::SetSolvers) - .def("GetResetSolverIndexEachTry", &TrilinosFallbackLinearSolverType::GetResetSolverIndexEachTry) + .def("GetResetSolverEachTry", &TrilinosFallbackLinearSolverType::GetResetSolverEachTry) .def("SetResetSolverIndexEachTry", &TrilinosFallbackLinearSolverType::SetResetSolverIndexEachTry) .def("GetParameters", &TrilinosFallbackLinearSolverType::GetParameters) .def("SetParameters", &TrilinosFallbackLinearSolverType::SetParameters) diff --git a/applications/TrilinosApplication/tests/cpp_tests/linear_solvers/test_trilinos_fallback_linear_solver.cpp b/applications/TrilinosApplication/tests/cpp_tests/linear_solvers/test_trilinos_fallback_linear_solver.cpp index eed744c41183..ce0d8a863450 100644 --- a/applications/TrilinosApplication/tests/cpp_tests/linear_solvers/test_trilinos_fallback_linear_solver.cpp +++ b/applications/TrilinosApplication/tests/cpp_tests/linear_solvers/test_trilinos_fallback_linear_solver.cpp @@ -148,7 +148,7 @@ KRATOS_DISTRIBUTED_TEST_CASE_IN_SUITE(TrilinosFallbackLinearSolverConstructorPar "solver_type": "amgcl" } ], - "reset_solver_index_each_try": false + "reset_solver_each_try": false })"); TrilinosFallbackLinearSolverType simple_fallback_solver(parameters); diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index 675f8142c3e6..244c779deac8 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -310,7 +310,7 @@ class FallbackLinearSolver VectorType& rB ) override { - if (mResetSolverIndexEachTry) mCurrentSolverIndex = 0; + if (mResetSolverEachTry) mCurrentSolverIndex = 0; bool success = false; while (!success && mCurrentSolverIndex < mSolvers.size()) { success = GetCurrentSolver()->Solve(rA, rX, rB); @@ -340,7 +340,7 @@ class FallbackLinearSolver DenseMatrixType& rB ) override { - if (mResetSolverIndexEachTry) mCurrentSolverIndex = 0; + if (mResetSolverEachTry) mCurrentSolverIndex = 0; bool success = false; while (!success && mCurrentSolverIndex < mSolvers.size()) { success = GetCurrentSolver()->Solve(rA, rX, rB); @@ -466,9 +466,9 @@ class FallbackLinearSolver * @return true If the solver index is reset for each try. * @return false Otherwise. */ - bool& GetResetSolverIndexEachTry() + bool& GetResetSolverEachTry() { - return mResetSolverIndexEachTry; + return mResetSolverEachTry; } /** @@ -477,7 +477,7 @@ class FallbackLinearSolver */ void SetResetSolverIndexEachTry(const bool Reset) { - mResetSolverIndexEachTry = Reset; + mResetSolverEachTry = Reset; } /** @@ -617,7 +617,7 @@ class FallbackLinearSolver rOStream << "\nSolver: " << p_solver->Info() << "\n:"; p_solver->PrintData(rOStream); } - rOStream << "\nReset solver index each try: " << mResetSolverIndexEachTry; + rOStream << "\nReset solver index each try: " << mResetSolverEachTry; rOStream << "\nGlobal parameters: " << mParameters; rOStream << "\nCurrent solver index: " << mCurrentSolverIndex << std::endl; } @@ -639,7 +639,7 @@ class FallbackLinearSolver std::vector mSolvers; /// Flag to reset the solver index each try - bool mResetSolverIndexEachTry = false; + bool mResetSolverEachTry = false; /// The parameters Parameters mParameters; @@ -739,7 +739,7 @@ class FallbackLinearSolver void CommonSettingsFromParameters() { // Set the member variables - mResetSolverIndexEachTry = mParameters["reset_solver_index_each_try"].GetBool(); + mResetSolverEachTry = mParameters["reset_solver_index_each_try"].GetBool(); } /** diff --git a/kratos/python/add_linear_solvers_to_python.cpp b/kratos/python/add_linear_solvers_to_python.cpp index e0ab8671726f..8a6ebb57358b 100644 --- a/kratos/python/add_linear_solvers_to_python.cpp +++ b/kratos/python/add_linear_solvers_to_python.cpp @@ -251,7 +251,7 @@ void AddLinearSolversToPython(pybind11::module& m) }) .def("GetSolvers", &FallbackLinearSolverType::GetSolvers) .def("SetSolvers", &FallbackLinearSolverType::SetSolvers) - .def("GetResetSolverIndexEachTry", &FallbackLinearSolverType::GetResetSolverIndexEachTry) + .def("GetResetSolverEachTry", &FallbackLinearSolverType::GetResetSolverEachTry) .def("SetResetSolverIndexEachTry", &FallbackLinearSolverType::SetResetSolverIndexEachTry) .def("GetParameters", &FallbackLinearSolverType::GetParameters) .def("SetParameters", &FallbackLinearSolverType::SetParameters) From 96065b6aaca9409ae303a08895b6a4a8468e5441 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 29 Apr 2024 13:46:29 +0200 Subject: [PATCH 018/142] Even more suggestions --- kratos/linear_solvers/fallback_linear_solver.h | 14 ++++++++------ kratos/python/add_linear_solvers_to_python.cpp | 4 ++-- .../linear_solvers/test_fallback_linear_solver.cpp | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index 244c779deac8..7d36cb8d7777 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -466,7 +466,7 @@ class FallbackLinearSolver * @return true If the solver index is reset for each try. * @return false Otherwise. */ - bool& GetResetSolverEachTry() + const bool GetResetSolverEachTry() const { return mResetSolverEachTry; } @@ -478,6 +478,7 @@ class FallbackLinearSolver void SetResetSolverIndexEachTry(const bool Reset) { mResetSolverEachTry = Reset; + mParameters["reset_solver_each_try"].SetBool(Reset); } /** @@ -502,7 +503,7 @@ class FallbackLinearSolver * @brief Get the Current Solver Index. (not mutable) * @return IndexType The current solver index. */ - const IndexType GetCurrentSolverIndex() + const IndexType GetCurrentSolverIndex() const { return mCurrentSolverIndex; } @@ -739,7 +740,7 @@ class FallbackLinearSolver void CommonSettingsFromParameters() { // Set the member variables - mResetSolverEachTry = mParameters["reset_solver_index_each_try"].GetBool(); + mResetSolverEachTry = mParameters["reset_solver_each_try"].GetBool(); } /** @@ -758,10 +759,11 @@ class FallbackLinearSolver const Parameters GetDefaultParameters() const { return Parameters(R"({ - "solver_type": "fallback_linear_solver", - "solvers" : [ + "solver_type" : "fallback_linear_solver", + "solvers" : [ + // As default is empty, if not defined it will throw an error ], - "reset_solver_index_each_try": false + "reset_solver_each_try" : false })"); } diff --git a/kratos/python/add_linear_solvers_to_python.cpp b/kratos/python/add_linear_solvers_to_python.cpp index 8a6ebb57358b..1cbdc754fee3 100644 --- a/kratos/python/add_linear_solvers_to_python.cpp +++ b/kratos/python/add_linear_solvers_to_python.cpp @@ -246,8 +246,8 @@ void AddLinearSolversToPython(pybind11::module& m) .def("AddSolver", [](FallbackLinearSolverType& rSelf, LinearSolverType::Pointer pSolver) { rSelf.AddSolver(pSolver); }) - .def("AddSolver", [](FallbackLinearSolverType& rSelf, LinearSolverType::Pointer pSolver, const Parameters ThisParameters) { - rSelf.AddSolver(pSolver, ThisParameters); + .def("AddSolver", [](FallbackLinearSolverType& rSelf, const Parameters ThisParameters) { + rSelf.AddSolver(ThisParameters); }) .def("GetSolvers", &FallbackLinearSolverType::GetSolvers) .def("SetSolvers", &FallbackLinearSolverType::SetSolvers) diff --git a/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp b/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp index 833a0005e05b..908f7e96e2cb 100644 --- a/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp +++ b/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp @@ -150,7 +150,7 @@ KRATOS_TEST_CASE_IN_SUITE(FallbackLinearSolverConstructorParameters, AltairExten "solver_type": "skyline_lu_factorization" } ], - "reset_solver_index_each_try": false + "reset_solver_each_try": false })"); FallbackLinearSolverType simple_fallback_solver(parameters); From 6ed43766952aa03936b4a69888dc2e2f360ef313 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 29 Apr 2024 13:53:10 +0200 Subject: [PATCH 019/142] Set parameters --- kratos/linear_solvers/fallback_linear_solver.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index 7d36cb8d7777..4cfd4331c3ec 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -458,7 +458,17 @@ class FallbackLinearSolver */ void SetSolvers(const std::vector& rSolvers) { + // Assign the solvers mSolvers = rSolvers; + + // Remove solvers and add again + mParameters.RemoveValue("solvers"); + mParameters.AddEmptyArray("solvers"); + + // Fill the parameters with the solvers + for (auto& p_solver : mSolvers) { + FillParametersFromSolver(p_solver); + } } /** From 017a8e284217c113db57c0a29860542d07f0a38e Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 29 Apr 2024 14:02:37 +0200 Subject: [PATCH 020/142] More comments --- .../add_trilinos_linear_solvers_to_python.cpp | 1 - kratos/linear_solvers/fallback_linear_solver.h | 9 --------- kratos/python/add_linear_solvers_to_python.cpp | 1 - 3 files changed, 11 deletions(-) diff --git a/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp b/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp index 3ae2ab855182..9ed4cf1cd52b 100644 --- a/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp +++ b/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp @@ -89,7 +89,6 @@ void AddLinearSolvers(pybind11::module& m) .def("GetResetSolverEachTry", &TrilinosFallbackLinearSolverType::GetResetSolverEachTry) .def("SetResetSolverIndexEachTry", &TrilinosFallbackLinearSolverType::SetResetSolverIndexEachTry) .def("GetParameters", &TrilinosFallbackLinearSolverType::GetParameters) - .def("SetParameters", &TrilinosFallbackLinearSolverType::SetParameters) .def("GetCurrentSolverIndex", &TrilinosFallbackLinearSolverType::GetCurrentSolverIndex) .def("ClearCurrentSolverIndex", &TrilinosFallbackLinearSolverType::ClearCurrentSolverIndex) ; diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index 4cfd4331c3ec..13bc7c6cad85 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -500,15 +500,6 @@ class FallbackLinearSolver return mParameters; } - /** - * @brief Set the Parameters. - * @param parameters A Parameters object to set. - */ - void SetParameters(const Parameters ThisParameters) - { - mParameters = ThisParameters; - } - /** * @brief Get the Current Solver Index. (not mutable) * @return IndexType The current solver index. diff --git a/kratos/python/add_linear_solvers_to_python.cpp b/kratos/python/add_linear_solvers_to_python.cpp index 1cbdc754fee3..b6649514440e 100644 --- a/kratos/python/add_linear_solvers_to_python.cpp +++ b/kratos/python/add_linear_solvers_to_python.cpp @@ -254,7 +254,6 @@ void AddLinearSolversToPython(pybind11::module& m) .def("GetResetSolverEachTry", &FallbackLinearSolverType::GetResetSolverEachTry) .def("SetResetSolverIndexEachTry", &FallbackLinearSolverType::SetResetSolverIndexEachTry) .def("GetParameters", &FallbackLinearSolverType::GetParameters) - .def("SetParameters", &FallbackLinearSolverType::SetParameters) .def("GetCurrentSolverIndex", &FallbackLinearSolverType::GetCurrentSolverIndex) .def("ClearCurrentSolverIndex", &FallbackLinearSolverType::ClearCurrentSolverIndex) ; From e0339991b49856079cf2a52815071d2b2bfa75f3 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 29 Apr 2024 14:09:26 +0200 Subject: [PATCH 021/142] Remove `const` --- kratos/linear_solvers/fallback_linear_solver.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index 13bc7c6cad85..fa93c5431423 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -476,7 +476,7 @@ class FallbackLinearSolver * @return true If the solver index is reset for each try. * @return false Otherwise. */ - const bool GetResetSolverEachTry() const + bool GetResetSolverEachTry() const { return mResetSolverEachTry; } @@ -502,9 +502,9 @@ class FallbackLinearSolver /** * @brief Get the Current Solver Index. (not mutable) - * @return IndexType The current solver index. + * @return mCurrentSolverIndex The current solver index. */ - const IndexType GetCurrentSolverIndex() const + IndexType GetCurrentSolverIndex() const { return mCurrentSolverIndex; } From 2abd9b80ac373cca6db552ec409fe2cdb10f1143 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Mon, 6 May 2024 10:10:46 +0200 Subject: [PATCH 022/142] Simplify test Co-authored-by: Philipp Bucher --- .../cpp_tests/linear_solvers/test_fallback_linear_solver.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp b/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp index 908f7e96e2cb..751ff4171abe 100644 --- a/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp +++ b/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp @@ -114,8 +114,7 @@ KRATOS_TEST_CASE_IN_SUITE(FallbackLinearSolverConstructorSolvers, AltairExtensio KRATOS_EXPECT_EQ(simple_fallback_solver_1.GetCurrentSolverIndex(), 1); // Create a simple fallback solver - std::vector solvers = {p_solver1, p_solver2}; - FallbackLinearSolverType simple_fallback_solver_2(solvers); + FallbackLinearSolverType simple_fallback_solver_2({p_solver1, p_solver2}); // Solve the system solved = simple_fallback_solver_2.Solve(A, x, b); From a6dd1dda5e83f32fef56a4b5729541ce88c5dc33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Mon, 6 May 2024 10:15:46 +0200 Subject: [PATCH 023/142] KRATOS_ERROR --- kratos/linear_solvers/fallback_linear_solver.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index fa93c5431423..618b806ca8fb 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -715,9 +715,7 @@ class FallbackLinearSolver void FillParametersFromSolver(LinearSolverPointer pSolver) { // Ensure the solver pointer is not null - if (!pSolver) { - throw std::invalid_argument("Solver pointer is null."); - } + KRATOS_ERROR_IF(!pSolver) << "Solver pointer is null." << std::endl; // Initialize dummy parameters for the new solver Parameters dummy_parameters = Parameters(R"({ From 4a1f8005fe73583dc9dfd05f6c35dff9736f70ab Mon Sep 17 00:00:00 2001 From: tote1989 Date: Mon, 6 May 2024 08:59:56 +0000 Subject: [PATCH 024/142] Revert "Simplify test" This reverts commit 2abd9b80ac373cca6db552ec409fe2cdb10f1143. --- .../cpp_tests/linear_solvers/test_fallback_linear_solver.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp b/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp index 751ff4171abe..908f7e96e2cb 100644 --- a/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp +++ b/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp @@ -114,7 +114,8 @@ KRATOS_TEST_CASE_IN_SUITE(FallbackLinearSolverConstructorSolvers, AltairExtensio KRATOS_EXPECT_EQ(simple_fallback_solver_1.GetCurrentSolverIndex(), 1); // Create a simple fallback solver - FallbackLinearSolverType simple_fallback_solver_2({p_solver1, p_solver2}); + std::vector solvers = {p_solver1, p_solver2}; + FallbackLinearSolverType simple_fallback_solver_2(solvers); // Solve the system solved = simple_fallback_solver_2.Solve(A, x, b); From e9ad45aac916c7ac6be86996b5d7bcf60671d194 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 6 May 2024 14:35:52 +0200 Subject: [PATCH 025/142] Using Or operation in `AdditionalPhysicalDataIsNeeded` --- kratos/linear_solvers/fallback_linear_solver.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index 618b806ca8fb..65ae5b355f38 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -383,7 +383,11 @@ class FallbackLinearSolver */ bool AdditionalPhysicalDataIsNeeded() override { - return GetCurrentSolver()->AdditionalPhysicalDataIsNeeded(); + bool additional_data_needed = false; + for (auto& p_solver : mSolvers) { + additional_data_needed = additional_data_needed || p_solver->AdditionalPhysicalDataIsNeeded(); + } + return additional_data_needed; } /** From 388deb5d0ec2b3030ba8f9a330e5fb3c960560ff Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 6 May 2024 15:06:36 +0200 Subject: [PATCH 026/142] Defining list into space --- .../TrilinosApplication/trilinos_space.h | 22 +++++++++++++++++++ kratos/spaces/ublas_space.h | 16 ++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/applications/TrilinosApplication/trilinos_space.h b/applications/TrilinosApplication/trilinos_space.h index 983284afb8ce..cfc3120c13fc 100644 --- a/applications/TrilinosApplication/trilinos_space.h +++ b/applications/TrilinosApplication/trilinos_space.h @@ -862,6 +862,28 @@ class TrilinosSpace return true; } + /** + * @brief Returns a list of the fastest direct solvers. + * @details This function returns a vector of strings representing the names of the fastest direct solvers. The order of the solvers in the list may need to be updated and reordered depending on the size of the equation system. + * @return A vector of strings containing the names of the fastest direct solvers. + */ + inline static std::vector FastestDirectSolverList() + { + // May need to be updated and reordered. In fact I think it depends of the size of the equation system + std::vector faster_direct_solvers({ + "mumps2", // Amesos2 (if compiled with MUMPS-support) + "mumps", // Amesos (if compiled with MUMPS-support) + "super_lu_dist2", // Amesos2 SuperLUDist (if compiled with MPI-support) + "super_lu_dist", // Amesos SuperLUDist (if compiled with MPI-support) + "amesos2", // Amesos2 + "amesos", // Amesos + "klu2", // Amesos2 KLU + "klu", // Amesos KLU + "basker" // Amesos2 Basker + }); + return faster_direct_solvers; + } + /** * @brief This function returns a value from a given vector according to a given index * @param rX The vector from which values are to be gathered diff --git a/kratos/spaces/ublas_space.h b/kratos/spaces/ublas_space.h index 558681879d1e..3a95c15054ad 100644 --- a/kratos/spaces/ublas_space.h +++ b/kratos/spaces/ublas_space.h @@ -891,6 +891,22 @@ class UblasSpace return false; } + /** + * @brief Returns a list of the fastest direct solvers. + * @details This function returns a vector of strings representing the names of the fastest direct solvers. The order of the solvers in the list may need to be updated and reordered depending on the size of the equation system. + * @return A vector of strings containing the names of the fastest direct solvers. + */ + inline static std::vector FastestDirectSolverList() + { + std::vector faster_direct_solvers({ + "pardiso_lu", // LinearSolversApplication (if compiled with Intel-support) + "pardiso_ldlt", // LinearSolversApplication (if compiled with Intel-support) + "sparse_lu", // LinearSolversApplication + "skyline_lu_factorization" // In Core, always available, but slow + }); + return faster_direct_solvers; + } + //*********************************************************************** inline static TDataType GetValue(const VectorType& x, std::size_t I) From 5bde144dc6a8af7e9407fe30ff8b271c045e0245 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 6 May 2024 15:06:52 +0200 Subject: [PATCH 027/142] Update solver --- .../linear_solvers/fallback_linear_solver.h | 22 +------------------ 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index 65ae5b355f38..a456472ccdc1 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -679,27 +679,7 @@ class FallbackLinearSolver const std::string linear_solver_type = linear_solver_settings["solver_type"].GetString(); // If the solver type is a faster direct solver, try to use it if (linear_solver_type == "faster_direct_solver") { - std::vector faster_direct_solvers; - if constexpr (TSparseSpaceType::IsDistributed()) { - faster_direct_solvers = std::vector({ // May need to be updated and reordered. In fact I think it depends of the size of the equation system - "mumps2", // Amesos2 (if compiled with MUMPS-support) - "mumps", // Amesos (if compiled with MUMPS-support) - "super_lu_dist2", // Amesos2 SuperLUDist (if compiled with MPI-support) - "super_lu_dist", // Amesos SuperLUDist (if compiled with MPI-support) - "amesos2", // Amesos2 - "amesos", // Amesos - "klu2", // Amesos2 KLU - "klu", // Amesos KLU - "basker" // Amesos2 Basker - }); - } else { - faster_direct_solvers = std::vector({ - "pardiso_lu", // LinearSolversApplication (if compiled with Intel-support) - "pardiso_ldlt", // LinearSolversApplication (if compiled with Intel-support) - "sparse_lu", // LinearSolversApplication - "skyline_lu_factorization" // In Core, always available, but slow - }); - } + const std::vector faster_direct_solvers = TSparseSpaceType::FastestDirectSolverList(); for (const std::string& r_solver_name : faster_direct_solvers) { if (linear_solver_factory.Has(r_solver_name)) { linear_solver_settings["solver_type"].SetString(r_solver_name); From a6ed943715177bfcbca4d8f20668a4075c3b1b7e Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 6 May 2024 15:13:47 +0200 Subject: [PATCH 028/142] Cleaning --- kratos/linear_solvers/fallback_linear_solver.h | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index a456472ccdc1..e265b1ee7363 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -214,12 +214,10 @@ class FallbackLinearSolver VectorType& rB ) override { - // TODO: Decide if call all solvers or just the current one // NOTE: We assume that initializes internal data of solvers, not system of equations for (auto& p_solver : mSolvers) { p_solver->Initialize(rA, rX, rB); } - // GetCurrentSolver()->Initialize(rA, rX, rB); } /** @@ -236,11 +234,6 @@ class FallbackLinearSolver VectorType& rB ) override { - // TODO: Decide if call all solvers or just the current one - // NOTE: We assume it may modify the system of equations, therefore we call just in the current solver - // for (auto& p_solver : mSolvers) { - // p_solver->InitializeSolutionStep(rA, rX, rB); - // } GetCurrentSolver()->InitializeSolutionStep(rA, rX, rB); } @@ -257,11 +250,6 @@ class FallbackLinearSolver VectorType& rB ) override { - // TODO: Decide if call all solvers or just the current one - // NOTE: We assume it may modify the system of equations, therefore we call just in the current solver - // for (auto& p_solver : mSolvers) { - // p_solver->FinalizeSolutionStep(rA, rX, rB); - // } GetCurrentSolver()->FinalizeSolutionStep(rA, rX, rB); } From fae7f7d29feaf03b61cd76fbb5e722e1734e4db0 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 27 May 2024 11:10:59 +0200 Subject: [PATCH 029/142] Update fallback_linear_solver.h to include additional data provision in solver iterations --- .../linear_solvers/fallback_linear_solver.h | 44 ++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index e265b1ee7363..a74332559280 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -125,6 +125,7 @@ class FallbackLinearSolver mSolvers.reserve(number_of_solver_parameters); for (IndexType i = 0; i < number_of_solver_parameters; ++i) { mSolvers.push_back(ConstructLinearSolverFromSettings(mParameters["solvers"][i])); + mRequiresAdditionalData.push_back(mSolvers.back()->AdditionalPhysicalDataIsNeeded()); } // Set some member variables from the parameters @@ -279,6 +280,9 @@ class FallbackLinearSolver p_solver->Clear(); } + // Clear the flags + mRequiresAdditionalData.clear(); + // Clear the data mCurrentSolverIndex = 0; } @@ -309,8 +313,16 @@ class FallbackLinearSolver // Call initialize methods InitializeSolutionStep(rA, rX, rB); + + // Provide additional data if needed + if (mRequiresAdditionalData[mCurrentSolverIndex] && mpDoFSet != nullptr && mpModelPart != nullptr) { + ProvideAdditionalData(rA, rX, rB, *mpDoFSet, *mpModelPart); + } } } + // Reset pointers (to ensure is called only when needed) + mpDoFSet = nullptr; + mpModelPart = nullptr; return success; } @@ -339,8 +351,16 @@ class FallbackLinearSolver // // Call initialize methods (NOTE: does not exist the method for dense matrices) // InitializeSolutionStep(rA, rX, rB); + + // // Provide additional data if needed (NOTE: does not exist the method for dense matrices) + // if (mRequiresAdditionalData[mCurrentSolverIndex] && mpDoFSet != nullptr && mpModelPart != nullptr) { + // ProvideAdditionalData(rA, rX, rB, *mpDoFSet, *mpModelPart); + // } } } + // // Reset pointers (to ensure is called only when needed) + // mpDoFSet = nullptr; + // mpModelPart = nullptr; return success; } @@ -371,11 +391,7 @@ class FallbackLinearSolver */ bool AdditionalPhysicalDataIsNeeded() override { - bool additional_data_needed = false; - for (auto& p_solver : mSolvers) { - additional_data_needed = additional_data_needed || p_solver->AdditionalPhysicalDataIsNeeded(); - } - return additional_data_needed; + return GetCurrentSolver()->AdditionalPhysicalDataIsNeeded(); } /** @@ -400,6 +416,12 @@ class FallbackLinearSolver ) override { GetCurrentSolver()->ProvideAdditionalData(rA, rX, rB, rDoFSet, rModelPart); + + // Prepare to provide additional data if needed in the next solver iteration + if (mpDoFSet == nullptr && mpModelPart == nullptr) { + mpDoFSet = &rDoFSet; + mpModelPart = &rModelPart; + } } /** @@ -632,6 +654,15 @@ class FallbackLinearSolver /// The list of solvers to try std::vector mSolvers; + /// The list of flags to know if additional data is required + std::vector mRequiresAdditionalData; + + /// The DoF set (for providing additional data if needed) + ModelPart::DofsArrayType* mpDoFSet = nullptr; + + /// The model part (for providing additional data if needed) + ModelPart* mpModelPart = nullptr; + /// Flag to reset the solver index each try bool mResetSolverEachTry = false; @@ -699,6 +730,9 @@ class FallbackLinearSolver // Add the new solver parameters to the collection mParameters["solvers"].Append(dummy_parameters); + + // Append the boolean flag to the mRequiresAdditionalData vector + mRequiresAdditionalData.push_back(pSolver->AdditionalPhysicalDataIsNeeded()); } /** From b669de04c74180d1716797fe847dbf11b211c23a Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 10:59:22 +0100 Subject: [PATCH 030/142] upgrading base truss 2D element to be derived in 3D --- .../linear_truss_element_2D.cpp | 19 ++++++++++++ .../truss_elements/linear_truss_element_2D.h | 30 +++++++++++-------- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp index 9ac65a72ac9e..6fd8af2b4061 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp @@ -704,6 +704,25 @@ void LinearTrussElement2D::load(Serializer& rSerializer) /***********************************************************************************/ /***********************************************************************************/ +template +array_1d LinearTrussElement2DGetBaseShapeFunctions() +{ + array_1d N; + + if constexpr (NNodes == 2) { + N[0] = 0.5 * (1.0 - xi); + N[1] = 0.5 * (1.0 + xi); + } else { + N[0] = 0.5 * xi * (xi - 1.0); + N[1] = 0.5 * xi * (xi + 1.0); + N[2] = (1.0 - std::pow(xi, 2)); + } + return N; +} + +/***********************************************************************************/ +/***********************************************************************************/ + template class LinearTrussElement2D<2>; template class LinearTrussElement2D<3>; diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h index 40b7503e1119..8dde97303bbd 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h @@ -47,7 +47,7 @@ using SizeType = std::size_t; /** * @class LinearTrussElement2D * @ingroup StructuralMechanicsApplication - * @brief This is the Linear TRUSS element of 2 and 3 nodes. + * @brief This is the Linear 2D TRUSS element of 2 and 3 nodes. * @author Alejandro Cornejo */ template @@ -140,16 +140,21 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D } } + /** + * @brief This method returns the base shape functions in a reduced size vector (2 or 3 entries) + */ + array_1d GetBaseShapeFunctions() const; + /** * @brief Returns a n component vector including the values of the DoFs * in LOCAL beam axes */ - void GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValue) const; + virtual void GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValue) const; /** * @brief Computes the length of the FE and returns it */ - double CalculateLength() const + virtual double CalculateLength() const { // Same implementation for 2N and 3N return StructuralMechanicsElementUtilities::CalculateReferenceLength2D2N(*this); @@ -229,23 +234,24 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D } /** - * @brief This function returns the 4 shape functions used for interpolating the transverse displacement v. (denoted as N) - * Also its derivatives + * @brief This function returns the 2/3 shape functions used for interpolating the displacements in x,y,z + * Also the derivatives of u to compute the longitudinal strain * @param rN reference to the shape functions (or derivatives) * @param Length The size of the beam element * @param Phi The shear slenderness parameter * @param xi The coordinate in the natural axes */ - void GetShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; - void GetShapeFunctionsValuesY(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; - void GetFirstDerivativesShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; + virtual void GetShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; + virtual void GetShapeFunctionsValuesY(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; + virtual void GetShapeFunctionsValuesZ(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const {}; + virtual void GetFirstDerivativesShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; /** * @brief This function rotates the LHS from local to global coordinates * @param rLHS the left hand side * @param rGeometry the geometry of the FE */ - void RotateLHS( + virtual void RotateLHS( MatrixType &rLHS); /** @@ -253,7 +259,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D * @param rRHS the right hand side * @param rGeometry the geometry of the FE */ - void RotateRHS( + virtual void RotateRHS( VectorType &rRHS); /** @@ -262,7 +268,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D * @param rRHS the right hand side * @param rGeometry the geometry of the FE */ - void RotateAll( + virtual void RotateAll( MatrixType &rLHS, VectorType &rRHS); @@ -272,7 +278,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D * @param rIntegrationPoints array of IP * @param PointNumber tthe IP to be evaluated */ - array_1d GetLocalAxesBodyForce( + virtual array_1d GetLocalAxesBodyForce( const Element &rElement, const GeometryType::IntegrationPointsArrayType &rIntegrationPoints, const IndexType PointNumber) const; From 6bd1058e876449c7f6c8cd7f5bbe05235483fe3a Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 11:02:09 +0100 Subject: [PATCH 031/142] avoid repetition --- .../linear_truss_element_2D.cpp | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp index 6fd8af2b4061..075bb9ec6575 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp @@ -162,13 +162,16 @@ void LinearTrussElement2D::GetShapeFunctionsValues( rN.resize(SystemSize, false); rN.clear(); + array_1d base_N; + noalias(base_N) = GetBaseShapeFunctions(); + if constexpr (NNodes == 2) { - rN[0] = 0.5 * (1.0 - xi); - rN[2] = 0.5 * (1.0 + xi); + rN[0] = base_N[0]; + rN[2] = base_N[1]; } else { // 3N - rN[0] = 0.5 * xi * (xi - 1.0); - rN[2] = 0.5 * xi * (xi + 1.0); - rN[4] = (1.0 - std::pow(xi, 2)); + rN[0] = base_N[0]; + rN[2] = base_N[1]; + rN[4] = base_N[2]; } } @@ -186,13 +189,16 @@ void LinearTrussElement2D::GetShapeFunctionsValuesY( rN.resize(SystemSize, false); rN.clear(); + array_1d base_N; + noalias(base_N) = GetBaseShapeFunctions(); + if constexpr (NNodes == 2) { - rN[1] = 0.5 * (1.0 - xi); - rN[3] = 0.5 * (1.0 + xi); + rN[1] = base_N[0]; + rN[3] = base_N[1]; } else { // 3N - rN[1] = 0.5 * xi * (xi - 1.0); - rN[3] = 0.5 * xi * (xi + 1.0); - rN[5] = (1.0 - std::pow(xi, 2)); + rN[1] = base_N[0]; + rN[3] = base_N[1]; + rN[5] = base_N[2]; } } From 3f9f8af540ba60a6cd3667389754f845c6b8f015 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 11:09:06 +0100 Subject: [PATCH 032/142] adding the 3D elements --- .../linear_truss_element_3D.cpp | 572 ++++++++++++++++++ .../truss_elements/linear_truss_element_3D.h | 342 +++++++++++ 2 files changed, 914 insertions(+) create mode 100644 applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp create mode 100644 applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp new file mode 100644 index 000000000000..73892a809832 --- /dev/null +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp @@ -0,0 +1,572 @@ +// KRATOS ___| | | | +// \___ \ __| __| | | __| __| | | __| _` | | +// | | | | | ( | | | | ( | | +// _____/ \__|_| \__,_|\___|\__|\__,_|_| \__,_|_| MECHANICS +// +// License: BSD License +// license: StructuralMechanicsApplication/license.txt +// +// Main authors: Alejandro Cornejo +// +// + +// System includes + +// External includes + +// Project includes + +// Application includes +#include "linear_truss_element_3D.h" +#include "custom_utilities/constitutive_law_utilities.h" +#include "structural_mechanics_application_variables.h" + +namespace Kratos +{ + +/***********************************************************************************/ +/***********************************************************************************/ + +template +Element::Pointer LinearTrussElement3D::Clone( + IndexType NewId, + NodesArrayType const& rThisNodes + ) const +{ + KRATOS_TRY + + LinearTrussElement3D::Pointer p_new_elem = Kratos::make_intrusive>(NewId, GetGeometry().Create(rThisNodes), pGetProperties()); + p_new_elem->SetData(this->GetData()); + p_new_elem->Set(Flags(*this)); + + // Currently selected integration methods + p_new_elem->SetIntegrationMethod(mThisIntegrationMethod); + + // The vector containing the constitutive laws + p_new_elem->SetConstitutiveLawVector(mConstitutiveLawVector); + + return p_new_elem; + + KRATOS_CATCH(""); +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::EquationIdVector( + EquationIdVectorType& rResult, + const ProcessInfo& rCurrentProcessInfo + ) const +{ + const auto& r_geometry = this->GetGeometry(); + const SizeType number_of_nodes = r_geometry.size(); + IndexType local_index = 0; + + if (rResult.size() != SystemSize) + rResult.resize(SystemSize, false); + + const IndexType xpos = this->GetGeometry()[0].GetDofPosition(DISPLACEMENT_X); + + for (IndexType i = 0; i < number_of_nodes; ++i) { + rResult[local_index++] = r_geometry[i].GetDof(DISPLACEMENT_X, xpos ).EquationId(); + rResult[local_index++] = r_geometry[i].GetDof(DISPLACEMENT_Y, xpos + 1).EquationId(); + rResult[local_index++] = r_geometry[i].GetDof(DISPLACEMENT_Z, xpos + 2).EquationId(); + } +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::GetDofList( + DofsVectorType& rElementalDofList, + const ProcessInfo& rCurrentProcessInfo + ) const +{ + KRATOS_TRY; + + const auto& r_geom = GetGeometry(); + const SizeType number_of_nodes = r_geom.size(); + rElementalDofList.resize(SystemSize); + + for (IndexType i = 0; i < number_of_nodes; ++i) { + const SizeType index = i * DofsPerNode; + rElementalDofList[index] = r_geom[i].pGetDof(DISPLACEMENT_X); + rElementalDofList[index + 1] = r_geom[i].pGetDof(DISPLACEMENT_Y); + rElementalDofList[index + 2] = r_geom[i].pGetDof(DISPLACEMENT_Z); + } + + KRATOS_CATCH("") +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::GetShapeFunctionsValues( + SystemSizeBoundedArrayType& rN, + const double Length, + const double xi + ) const +{ + if (rN.size() != SystemSize) + rN.resize(SystemSize, false); + + rN.clear(); + if constexpr (NNodes == 2) { + rN[0] = base_N[0]; + rN[3] = base_N[1]; + } else { // 3N + rN[0] = base_N[0]; + rN[3] = base_N[1]; + rN[6] = base_N[2]; + } +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::GetShapeFunctionsValuesY( + SystemSizeBoundedArrayType& rN, + const double Length, + const double xi + ) const +{ + if (rN.size() != SystemSize) + rN.resize(SystemSize, false); + + rN.clear(); + array_1d base_N; + noalias(base_N) = GetBaseShapeFunctions(); + + if constexpr (NNodes == 2) { + rN[1] = base_N[0]; + rN[4] = base_N[1]; + } else { // 3N + rN[1] = base_N[0]; + rN[4] = base_N[1]; + rN[7] = base_N[2]; + } +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::GetShapeFunctionsValuesZ( + SystemSizeBoundedArrayType& rN, + const double Length, + const double xi + ) const +{ + if (rN.size() != SystemSize) + rN.resize(SystemSize, false); + + rN.clear(); + array_1d base_N; + noalias(base_N) = GetBaseShapeFunctions(); + + if constexpr (NNodes == 2) { + rN[2] = base_N[0]; + rN[5] = base_N[1]; + } else { // 3N + rN[2] = base_N[0]; + rN[5] = base_N[1]; + rN[8] = base_N[2]; + } +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::GetFirstDerivativesShapeFunctionsValues( + SystemSizeBoundedArrayType& rdN_dX, + const double Length, + const double xi + ) const +{ + if (rdN_dX.size() != SystemSize) + rdN_dX.resize(SystemSize, false); + + rdN_dX.clear(); + + if constexpr (NNodes == 2) { + const double inverse_l = 1.0 / Length; + rdN_dX[0] = -inverse_l; + rdN_dX[3] = inverse_l; + } else { // 3N + rdN_dX[0] = xi - 0.5; + rdN_dX[3] = xi + 0.5; + rdN_dX[6] = -2.0 * xi; + rdN_dX *= 2.0 / Length; // The Jacobian + } +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const +{ + // if (rNodalValues.size() != SystemSize) + // rNodalValues.resize(SystemSize, false); + // const auto &r_geom = GetGeometry(); + + // const double angle = GetAngle(); + + // BoundedVector global_values; + + // // We fill the vector with global values + // for (SizeType i = 0; i < NNodes; ++i) { + // const auto& r_displ = r_geom[i].FastGetSolutionStepValue(DISPLACEMENT); + // global_values[i * DofsPerNode] = r_displ[0]; + // global_values[i * DofsPerNode + 1] = r_displ[1]; + // } + + // if (std::abs(angle) > std::numeric_limits::epsilon()) { + // BoundedMatrix T; + // BoundedMatrix global_size_T; + // StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); + // if constexpr (NNodes == 2) { + // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); + // } else { + // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + // } + // // We rotate to local axes + // noalias(rNodalValues) = prod(trans(global_size_T), global_values); + // } else { + // noalias(rNodalValues) = global_values; + // } +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +array_1d LinearTrussElement3D::GetLocalAxesBodyForce( + const Element &rElement, + const GeometryType::IntegrationPointsArrayType &rIntegrationPoints, + const IndexType PointNumber + ) const +{ + // const double angle = GetAngle(); + // const auto body_force = StructuralMechanicsElementUtilities::GetBodyForce(*this, rIntegrationPoints, PointNumber); + + // const double c = std::cos(angle); + // const double s = std::sin(angle); + array_1d local_body_force = ZeroVector(3); + // local_body_force[0] = c * body_force[0] + s * body_force[1]; + // local_body_force[1] = -s * body_force[0] + c * body_force[1]; + return local_body_force; +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::CalculateLocalSystem( + MatrixType& rLHS, + VectorType& rRHS, + const ProcessInfo& rProcessInfo + ) +{ + KRATOS_TRY; + + const auto &r_props = GetProperties(); + const auto &r_geometry = GetGeometry(); + + if (rLHS.size1() != SystemSize || rLHS.size2() != SystemSize) { + rLHS.resize(SystemSize, SystemSize, false); + } + noalias(rLHS) = ZeroMatrix(SystemSize, SystemSize); + + if (rRHS.size() != SystemSize) { + rRHS.resize(SystemSize, false); + } + noalias(rRHS) = ZeroVector(SystemSize); + + const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); + + ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); + auto &r_cl_options = cl_values.GetOptions(); + r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); + r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); + + const double length = CalculateLength(); + const double J = 0.5 * length; + const double area = r_props[CROSS_AREA]; + + // Let's initialize the cl values + VectorType strain_vector(1), stress_vector(1); + MatrixType constitutive_matrix(1, 1); // Young modulus + + strain_vector.clear(); + cl_values.SetStrainVector(strain_vector); + cl_values.SetStressVector(stress_vector); + cl_values.SetConstitutiveMatrix(constitutive_matrix); + SystemSizeBoundedArrayType nodal_values(SystemSize); + GetNodalValuesVector(nodal_values); // In local axes + + SystemSizeBoundedArrayType B, N_shape, N_shapeY; + + // Loop over the integration points + for (SizeType IP = 0; IP < integration_points.size(); ++IP) { + const auto local_body_forces = GetLocalAxesBodyForce(*this, integration_points, IP); + + const double xi = integration_points[IP].X(); + const double weight = integration_points[IP].Weight(); + const double jacobian_weight = weight * J * area; + GetShapeFunctionsValues(N_shape, length, xi); + GetShapeFunctionsValuesY(N_shapeY, length, xi); + GetFirstDerivativesShapeFunctionsValues(B, length, xi); + + + strain_vector[0] = inner_prod(B, nodal_values); + mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix + + noalias(rLHS) += outer_prod(B, B) * constitutive_matrix(0, 0) * jacobian_weight; + noalias(rRHS) -= B * stress_vector[0] * jacobian_weight; + + noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; + noalias(rRHS) += N_shapeY * local_body_forces[1] * jacobian_weight; + } + RotateAll(rLHS, rRHS); // rotate to global + + KRATOS_CATCH("") +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::CalculateLeftHandSide( + MatrixType& rLHS, + const ProcessInfo& rProcessInfo + ) +{ + KRATOS_TRY; + const auto &r_props = GetProperties(); + const auto &r_geometry = GetGeometry(); + + if (rLHS.size1() != SystemSize || rLHS.size2() != SystemSize) { + rLHS.resize(SystemSize, SystemSize, false); + } + noalias(rLHS) = ZeroMatrix(SystemSize, SystemSize); + + const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); + + ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); + auto &r_cl_options = cl_values.GetOptions(); + r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); + r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); + + const double length = CalculateLength(); + const double J = 0.5 * length; + const double area = r_props[CROSS_AREA]; + + // Let's initialize the cl values + VectorType strain_vector(1), stress_vector(1); + MatrixType constitutive_matrix(1, 1); // Young modulus + + strain_vector.clear(); + cl_values.SetStrainVector(strain_vector); + cl_values.SetStressVector(stress_vector); + cl_values.SetConstitutiveMatrix(constitutive_matrix); + SystemSizeBoundedArrayType nodal_values(SystemSize); + GetNodalValuesVector(nodal_values); // In local axes + + SystemSizeBoundedArrayType B; + + // Loop over the integration points + for (SizeType IP = 0; IP < integration_points.size(); ++IP) { + const auto local_body_forces = GetLocalAxesBodyForce(*this, integration_points, IP); + + const double xi = integration_points[IP].X(); + const double weight = integration_points[IP].Weight(); + const double jacobian_weight = weight * J * area; + GetFirstDerivativesShapeFunctionsValues(B, length, xi); + + strain_vector[0] = inner_prod(B, nodal_values); + mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix + + noalias(rLHS) += outer_prod(B, B) * constitutive_matrix(0, 0) * jacobian_weight; + } + RotateLHS(rLHS); // rotate to global + + KRATOS_CATCH("") +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::CalculateRightHandSide( + VectorType& rRHS, + const ProcessInfo& rProcessInfo + ) +{ + KRATOS_TRY; + const auto &r_props = GetProperties(); + const auto &r_geometry = GetGeometry(); + + if (rRHS.size() != SystemSize) { + rRHS.resize(SystemSize, false); + } + noalias(rRHS) = ZeroVector(SystemSize); + + const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); + + ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); + auto &r_cl_options = cl_values.GetOptions(); + r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); + r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); + + const double length = CalculateLength(); + const double J = 0.5 * length; + const double area = r_props[CROSS_AREA]; + + // Let's initialize the cl values + VectorType strain_vector(1), stress_vector(1); + MatrixType constitutive_matrix(1, 1); // Young modulus + + strain_vector.clear(); + cl_values.SetStrainVector(strain_vector); + cl_values.SetStressVector(stress_vector); + cl_values.SetConstitutiveMatrix(constitutive_matrix); + SystemSizeBoundedArrayType nodal_values(SystemSize); + GetNodalValuesVector(nodal_values); // In local axes + + SystemSizeBoundedArrayType B, N_shape, N_shapeY; + + // Loop over the integration points + for (SizeType IP = 0; IP < integration_points.size(); ++IP) { + const auto local_body_forces = GetLocalAxesBodyForce(*this, integration_points, IP); + + const double xi = integration_points[IP].X(); + const double weight = integration_points[IP].Weight(); + const double jacobian_weight = weight * J * area; + GetShapeFunctionsValues(N_shape, length, xi); + GetShapeFunctionsValuesY(N_shapeY, length, xi); + GetFirstDerivativesShapeFunctionsValues(B, length, xi); + + strain_vector[0] = inner_prod(B, nodal_values); + mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix + + noalias(rRHS) -= B * stress_vector[0] * jacobian_weight; + + noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; + noalias(rRHS) += N_shapeY * local_body_forces[1] * jacobian_weight; + } + RotateRHS(rRHS); // rotate to global + + KRATOS_CATCH("") +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::RotateLHS( + MatrixType& rLHS +) +{ + // const double angle = GetAngle(); + + // if (std::abs(angle) > std::numeric_limits::epsilon()) { + // BoundedMatrix T, Tt; + // BoundedMatrix global_size_T, aux_product; + // StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); + // if constexpr (NNodes == 2) { + // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); + // } else { + // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + // } + + // noalias(aux_product) = prod(rLHS, trans(global_size_T)); + // noalias(rLHS) = prod(global_size_T, aux_product); + // } +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::RotateRHS( + VectorType& rRHS +) +{ + // const double angle = GetAngle(); + // if (std::abs(angle) > std::numeric_limits::epsilon()) { + // BoundedMatrix T; + // BoundedMatrix global_size_T; + // BoundedVector local_rhs; + // noalias(local_rhs) = rRHS; + // StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); + // if constexpr (NNodes == 2) { + // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); + // } else { + // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + // } + + // noalias(rRHS) = prod(global_size_T, local_rhs); + // } +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::RotateAll( + MatrixType& rLHS, + VectorType& rRHS +) +{ + // const double angle = GetAngle(); + // if (std::abs(angle) > std::numeric_limits::epsilon()) { + // BoundedMatrix T; + // BoundedMatrix global_size_T, aux_product; + // BoundedVector local_rhs; + // StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); + + // if constexpr (NNodes == 2) { + // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); + // } else { + // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + // } + + // noalias(local_rhs) = rRHS; + // noalias(rRHS) = prod(global_size_T, local_rhs); + + // noalias(aux_product) = prod(rLHS, trans(global_size_T)); + // noalias(rLHS) = prod(global_size_T, aux_product); + // } +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::save(Serializer& rSerializer) const +{ + KRATOS_SERIALIZE_SAVE_BASE_CLASS(rSerializer, BaseType); +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement3D::load(Serializer& rSerializer) +{ + KRATOS_SERIALIZE_LOAD_BASE_CLASS(rSerializer, BaseType); +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template class LinearTrussElement3D<2>; +template class LinearTrussElement3D<3>; + +} // Namespace Kratos diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h new file mode 100644 index 000000000000..4506b858d3bf --- /dev/null +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h @@ -0,0 +1,342 @@ +// KRATOS ___| | | | +// \___ \ __| __| | | __| __| | | __| _` | | +// | | | | | ( | | | | ( | | +// _____/ \__|_| \__,_|\___|\__|\__,_|_| \__,_|_| MECHANICS +// +// License: BSD License +// license: StructuralMechanicsApplication/license.txt +// +// Main authors: Alejandro Cornejo +// +// + +#pragma once + +// System includes + +// External includes + +// Project includes +#include "linear_truss_element_2D.h" + +namespace Kratos +{ + +///@name Kratos Globals +///@{ + +///@} +///@name Type Definitions +///@{ + +using SizeType = std::size_t; + +///@} +///@name Enum's +///@{ + +///@} +///@name Functions +///@{ + +///@} +///@name Kratos Classes +///@{ + +/** + * @class LinearTrussElement3D + * @ingroup StructuralMechanicsApplication + * @brief This is the Linear 3D TRUSS element of 2 and 3 nodes. + * @author Alejandro Cornejo + */ +template +class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement3D + : public LinearTrussElement2D +{ + +public: + + ///@name Type Definitions + ///@{ + + /// The base element type + using BaseType = LinearTrussElement2D; + // static constexpr SizeType NNodes = TNNodes; + static constexpr SizeType DofsPerNode = 3; + // static constexpr SizeType SystemSize = DofsPerNode * NNodes; + // using SystemSizeBoundedArrayType = array_1d; + + // Counted pointer of BaseSolidElement + KRATOS_CLASS_INTRUSIVE_POINTER_DEFINITION(LinearTrussElement3D); + + ///@} + ///@name Life Cycle + ///@{ + + // Constructor void + LinearTrussElement3D() + { + } + + // Create method + Element::Pointer Create(IndexType NewId, NodesArrayType const& ThisNodes, PropertiesType::Pointer pProperties) const override + { + return Kratos::make_intrusive(NewId, GetGeometry().Create(ThisNodes), pProperties); + } + + // Create method + Element::Pointer Create( IndexType NewId, GeometryType::Pointer pGeom, PropertiesType::Pointer pProperties ) const override + { + return Kratos::make_intrusive(NewId, pGeom, pProperties); + } + + ///@} + ///@name Operators + ///@{ + + ///@} + ///@name Operations + ///@{ + + /** + * @brief Returns a n component vector including the values of the DoFs + * in LOCAL beam axes + */ + void GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValue) const override; + + /** + * @brief Computes the length of the FE and returns it + */ + double CalculateLength() const override + { + // Same implementation for 2N and 3N + return StructuralMechanicsElementUtilities::CalculateReferenceLength3D2N(*this); + } + + /** + * @brief Called to initialize the element. + * @warning Must be called before any calculation is done + */ + void Initialize(const ProcessInfo& rCurrentProcessInfo) override; + + /** + * @brief It creates a new element pointer and clones the previous element data + * @param NewId the ID of the new element + * @param ThisNodes the nodes of the new element + * @param pProperties the properties assigned to the new element + * @return a Pointer to the new element + */ + Element::Pointer Clone( + IndexType NewId, + NodesArrayType const& rThisNodes + ) const override; + + /** + * @brief Sets on rResult the ID's of the element degrees of freedom + * @param rResult The vector containing the equation id + * @param rCurrentProcessInfo The current process info instance + */ + void EquationIdVector( + EquationIdVectorType& rResult, + const ProcessInfo& rCurrentProcessInfo + ) const override; + + /** + * @brief Sets on rElementalDofList the degrees of freedom of the considered element geometry + * @param rElementalDofList The vector containing the dof of the element + * @param rCurrentProcessInfo The current process info instance + */ + void GetDofList( + DofsVectorType& rElementalDofList, + const ProcessInfo& rCurrentProcessInfo + ) const override; + + /** + * @brief This function returns the 2/3 shape functions used for interpolating the displacements in x,y,z + * Also the derivatives of u to compute the longitudinal strain + * @param rN reference to the shape functions (or derivatives) + * @param Length The size of the beam element + * @param Phi The shear slenderness parameter + * @param xi The coordinate in the natural axes + */ + void GetShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const override; + void GetShapeFunctionsValuesY(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const override; + void GetShapeFunctionsValuesZ(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const override; + void GetFirstDerivativesShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const override; + + /** + * @brief This function rotates the LHS from local to global coordinates + * @param rLHS the left hand side + * @param rGeometry the geometry of the FE + */ + void RotateLHS( + MatrixType &rLHS) override; + + /** + * @brief This function rotates the RHS from local to global coordinates + * @param rRHS the right hand side + * @param rGeometry the geometry of the FE + */ + void RotateRHS( + VectorType &rRHS) override; + + /** + * @brief This function rotates the LHS and RHS from local to global coordinates + * @param rLHS the left hand side + * @param rRHS the right hand side + * @param rGeometry the geometry of the FE + */ + void RotateAll( + MatrixType &rLHS, + VectorType &rRHS) override; + + /** + * @brief This function retrieves the body forces in local axes + * @param rElement the element reference + * @param rIntegrationPoints array of IP + * @param PointNumber tthe IP to be evaluated + */ + array_1d GetLocalAxesBodyForce( + const Element &rElement, + const GeometryType::IntegrationPointsArrayType &rIntegrationPoints, + const IndexType PointNumber) const override; + + /** + * @brief This function provides a more general interface to the element. + * @details It is designed so that rLHSvariables and rRHSvariables are passed to the element thus telling what is the desired output + * @param rLeftHandSideMatrix container with the output Left Hand Side matrix + * @param rRightHandSideVector container for the desired RHS output + * @param rCurrentProcessInfo the current process info instance + */ + void CalculateLocalSystem( + MatrixType& rLeftHandSideMatrix, + VectorType& rRightHandSideVector, + const ProcessInfo& rCurrentProcessInfo + ) override; + + /** + * @brief This is called during the assembling process in order to calculate the elemental left hand side matrix only + * @param rLeftHandSideMatrix the elemental left hand side matrix + * @param rCurrentProcessInfo the current process info instance + */ + void CalculateLeftHandSide( + MatrixType& rLeftHandSideMatrix, + const ProcessInfo& rCurrentProcessInfo + ) override; + + /** + * @brief This is called during the assembling process in order to calculate the elemental right hand side vector only + * @param rRightHandSideVector the elemental right hand side vector + * @param rCurrentProcessInfo the current process info instance + */ + void CalculateRightHandSide( + VectorType& rRightHandSideVector, + const ProcessInfo& rCurrentProcessInfo + ) override; + + ///@} + ///@name Access + ///@{ + + + ///@} + ///@name Inquiry + ///@{ + + + ///@} + ///@name Input and output + ///@{ + + /// Print information about this object. + void PrintInfo(std::ostream& rOStream) const override + { + rOStream << "Truss 3D Element #" << Id() << "\nConstitutive law: " << mConstitutiveLawVector[0]->Info(); + } + + /// Print object's data. + void PrintData(std::ostream& rOStream) const override + { + pGetGeometry()->PrintData(rOStream); + } + + ///@} + ///@name Friends + ///@{ + +protected: + + ///@name Protected static Member Variables + ///@{ + + ///@} + ///@name Protected member Variables + ///@{ + + ///@} + ///@name Protected Operators + ///@{ + + ///@} + ///@name Protected Operations + ///@{ + + ///@} + ///@name Protected Access + ///@{ + + ///@} + ///@name Protected Inquiry + ///@{ + + ///@} + ///@name Protected LifeCycle + ///@{ + +private: + ///@name Static Member Variables + ///@{ + + ///@} + ///@name Member Variables + ///@{ + + ///@} + ///@name Private Operators + ///@{ + + ///@} + ///@name Private Operations + ///@{ + + + ///@} + ///@name Private Access + ///@{ + + ///@} + ///@name Private Inquiry + ///@{ + + ///@} + ///@name Serialization + ///@{ + + friend class Serializer; + + void save(Serializer &rSerializer) const override; + + void load(Serializer &rSerializer) override; + +}; // class LinearTrussElement3D. + +///@} +///@name Type Definitions +///@{ + + +///@} +///@name Input and output +///@{ + +} // namespace Kratos. From 2e92fcbc42724940839a33db451b46dbad7e6eab Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 11:14:13 +0100 Subject: [PATCH 033/142] missing xi --- .../truss_elements/linear_truss_element_2D.cpp | 6 +++--- .../truss_elements/linear_truss_element_2D.h | 2 +- .../truss_elements/linear_truss_element_3D.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp index 075bb9ec6575..330cee4373d8 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp @@ -163,7 +163,7 @@ void LinearTrussElement2D::GetShapeFunctionsValues( rN.clear(); array_1d base_N; - noalias(base_N) = GetBaseShapeFunctions(); + noalias(base_N) = GetBaseShapeFunctions(xi); if constexpr (NNodes == 2) { rN[0] = base_N[0]; @@ -190,7 +190,7 @@ void LinearTrussElement2D::GetShapeFunctionsValuesY( rN.clear(); array_1d base_N; - noalias(base_N) = GetBaseShapeFunctions(); + noalias(base_N) = GetBaseShapeFunctions(xi); if constexpr (NNodes == 2) { rN[1] = base_N[0]; @@ -711,7 +711,7 @@ void LinearTrussElement2D::load(Serializer& rSerializer) /***********************************************************************************/ template -array_1d LinearTrussElement2DGetBaseShapeFunctions() +array_1d LinearTrussElement2D::GetBaseShapeFunctions(const double xi) const { array_1d N; diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h index 8dde97303bbd..324c0b34de25 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h @@ -143,7 +143,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D /** * @brief This method returns the base shape functions in a reduced size vector (2 or 3 entries) */ - array_1d GetBaseShapeFunctions() const; + array_1d GetBaseShapeFunctions(const double xi) const; /** * @brief Returns a n component vector including the values of the DoFs diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp index 73892a809832..85b45cb928b0 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp @@ -139,7 +139,7 @@ void LinearTrussElement3D::GetShapeFunctionsValuesY( rN.clear(); array_1d base_N; - noalias(base_N) = GetBaseShapeFunctions(); + noalias(base_N) = GetBaseShapeFunctions(xi); if constexpr (NNodes == 2) { rN[1] = base_N[0]; From a0e38fe420b4e41e6bffd2ae4c2be00643548cbb Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 11:18:27 +0100 Subject: [PATCH 034/142] more xi --- .../truss_elements/linear_truss_element_3D.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp index 85b45cb928b0..ad6a35f6fc98 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp @@ -114,6 +114,9 @@ void LinearTrussElement3D::GetShapeFunctionsValues( rN.resize(SystemSize, false); rN.clear(); + array_1d base_N; + noalias(base_N) = GetBaseShapeFunctions(xi); + if constexpr (NNodes == 2) { rN[0] = base_N[0]; rN[3] = base_N[1]; @@ -166,7 +169,7 @@ void LinearTrussElement3D::GetShapeFunctionsValuesZ( rN.clear(); array_1d base_N; - noalias(base_N) = GetBaseShapeFunctions(); + noalias(base_N) = GetBaseShapeFunctions(xi); if constexpr (NNodes == 2) { rN[2] = base_N[0]; From c01de1acd2b5ecd97bda01aa0f9404fa8d63cd2b Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 11:30:10 +0100 Subject: [PATCH 035/142] compiling --- .../truss_elements/linear_truss_element_3D.h | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h index 4506b858d3bf..be00c23849d1 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h @@ -74,9 +74,16 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement3D ///@{ // Constructor void - LinearTrussElement3D() - { - } + LinearTrussElement3D() {} + + // Constructor using an array of nodes + LinearTrussElement3D(IndexType NewId, GeometryType::Pointer pGeometry) : BaseType(NewId, pGeometry) {} + + // Constructor using an array of nodes with properties + LinearTrussElement3D(IndexType NewId, GeometryType::Pointer pGeometry, PropertiesType::Pointer pProperties) : BaseType(NewId,pGeometry,pProperties) {} + + // Copy constructor + LinearTrussElement3D(LinearTrussElement2D const& rOther) : BaseType(rOther) {} // Create method Element::Pointer Create(IndexType NewId, NodesArrayType const& ThisNodes, PropertiesType::Pointer pProperties) const override @@ -85,7 +92,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement3D } // Create method - Element::Pointer Create( IndexType NewId, GeometryType::Pointer pGeom, PropertiesType::Pointer pProperties ) const override + Element::Pointer Create(IndexType NewId, GeometryType::Pointer pGeom, PropertiesType::Pointer pProperties) const override { return Kratos::make_intrusive(NewId, pGeom, pProperties); } @@ -113,12 +120,6 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement3D return StructuralMechanicsElementUtilities::CalculateReferenceLength3D2N(*this); } - /** - * @brief Called to initialize the element. - * @warning Must be called before any calculation is done - */ - void Initialize(const ProcessInfo& rCurrentProcessInfo) override; - /** * @brief It creates a new element pointer and clones the previous element data * @param NewId the ID of the new element From 97177536a9e6df41b5acc405cff8b2e6b1bb85e2 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 11:52:52 +0100 Subject: [PATCH 036/142] registering elements --- .../structural_mechanics_application.cpp | 4 ++++ .../structural_mechanics_application.h | 3 +++ 2 files changed, 7 insertions(+) diff --git a/applications/StructuralMechanicsApplication/structural_mechanics_application.cpp b/applications/StructuralMechanicsApplication/structural_mechanics_application.cpp index e5d2772a256b..19030d6cce1a 100644 --- a/applications/StructuralMechanicsApplication/structural_mechanics_application.cpp +++ b/applications/StructuralMechanicsApplication/structural_mechanics_application.cpp @@ -67,6 +67,8 @@ KratosStructuralMechanicsApplication::KratosStructuralMechanicsApplication() mCableElement3D2N(0, Element::GeometryType::Pointer(new Line3D2(Element::GeometryType::PointsArrayType(2)))), mLinearTrussElement2D2N(0, Element::GeometryType::Pointer(new Line2D2(Element::GeometryType::PointsArrayType(2)))), mLinearTrussElement2D3N(0, Element::GeometryType::Pointer(new Line2D3(Element::GeometryType::PointsArrayType(3)))), + mLinearTrussElement3D2N(0, Element::GeometryType::Pointer(new Line2D2(Element::GeometryType::PointsArrayType(2)))), + mLinearTrussElement3D3N(0, Element::GeometryType::Pointer(new Line2D3(Element::GeometryType::PointsArrayType(3)))), // Adding the beam elements mCrBeamElement3D2N(0, Element::GeometryType::Pointer(new Line3D2(Element::GeometryType::PointsArrayType(2)))), mCrLinearBeamElement3D2N(0, Element::GeometryType::Pointer(new Line3D2(Element::GeometryType::PointsArrayType(2)))), @@ -533,6 +535,8 @@ void KratosStructuralMechanicsApplication::Register() { KRATOS_REGISTER_ELEMENT("CableElement3D2N", mCableElement3D2N) KRATOS_REGISTER_ELEMENT("LinearTrussElement2D2N", mLinearTrussElement2D2N) KRATOS_REGISTER_ELEMENT("LinearTrussElement2D3N", mLinearTrussElement2D3N) + KRATOS_REGISTER_ELEMENT("LinearTrussElement3D2N", mLinearTrussElement3D2N) + KRATOS_REGISTER_ELEMENT("LinearTrussElement3D3N", mLinearTrussElement3D3N) // Register the beam element KRATOS_REGISTER_ELEMENT("CrBeamElement3D2N", mCrBeamElement3D2N) diff --git a/applications/StructuralMechanicsApplication/structural_mechanics_application.h b/applications/StructuralMechanicsApplication/structural_mechanics_application.h index ff17c6688238..65351dd5beef 100644 --- a/applications/StructuralMechanicsApplication/structural_mechanics_application.h +++ b/applications/StructuralMechanicsApplication/structural_mechanics_application.h @@ -35,6 +35,7 @@ #include "custom_elements/truss_elements/truss_element_linear_3D2N.hpp" #include "custom_elements/truss_elements/cable_element_3D2N.hpp" #include "custom_elements/truss_elements/linear_truss_element_2D.h" +#include "custom_elements/truss_elements/linear_truss_element_3D.h" /* Adding beam element */ #include "custom_elements/beam_elements/cr_beam_element_3D2N.hpp" @@ -274,6 +275,8 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) KratosStructuralMechanicsAppl const CableElement3D2N mCableElement3D2N; const LinearTrussElement2D<2> mLinearTrussElement2D2N; const LinearTrussElement2D<3> mLinearTrussElement2D3N; + const LinearTrussElement3D<2> mLinearTrussElement3D2N; + const LinearTrussElement3D<3> mLinearTrussElement3D3N; // Adding the beam element const CrBeamElement3D2N mCrBeamElement3D2N; From 3f35f3042e8852002d4ab370babea00b30b18dc5 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 14:10:09 +0100 Subject: [PATCH 037/142] better description of the elements --- .../truss_elements/linear_truss_element_2D.h | 2 ++ .../truss_elements/linear_truss_element_3D.h | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h index 324c0b34de25..64fb867a666a 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h @@ -48,6 +48,8 @@ using SizeType = std::size_t; * @class LinearTrussElement2D * @ingroup StructuralMechanicsApplication * @brief This is the Linear 2D TRUSS element of 2 and 3 nodes. + * O---------O -> x' O-----O-----O -> x' + * 0 1 0 2 1 * @author Alejandro Cornejo */ template diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h index be00c23849d1..5f1570102ea2 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h @@ -47,6 +47,8 @@ using SizeType = std::size_t; * @class LinearTrussElement3D * @ingroup StructuralMechanicsApplication * @brief This is the Linear 3D TRUSS element of 2 and 3 nodes. + * O---------O -> x' O-----O-----O -> x' + * 0 1 0 2 1 * @author Alejandro Cornejo */ template @@ -105,6 +107,14 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement3D ///@name Operations ///@{ + /** + * @brief This function builds the Frenet Serret matrix that rotates from global to local axes + * T = | <- t -> | x, local + * | <- n -> | y, local + * | <- m -> | z, local + */ + BoundedMatrix GetFrenetSerretMatrix() const; + /** * @brief Returns a n component vector including the values of the DoFs * in LOCAL beam axes From cf017bf3d739f0a186d9b2b5be403ee03483602f Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 14:10:26 +0100 Subject: [PATCH 038/142] building a robust Frenet Serret matrix --- .../linear_truss_element_3D.cpp | 55 +++++++++++++++++-- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp index ad6a35f6fc98..bdccd56e281a 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp @@ -211,16 +211,63 @@ void LinearTrussElement3D::GetFirstDerivativesShapeFunctionsValues( /***********************************************************************************/ /***********************************************************************************/ +template +BoundedMatrix LinearTrussElement3D::GetFrenetSerretMatrix() const +{ + const auto &r_geom = GetGeometry(); + BoundedMatrix T; + T.clear(); + + array_1d t; + array_1d n; + array_1d m; + + // t is the axis of the truss + noalias(t) = r_geom[1].GetInitialPosition() - r_geom[0].GetInitialPosition(); + t /= norm_2(t); + + n.clear(); + n[1] = 1.0; + + if (norm_2(t-n) <= 1.0e-8) { // colineal, hence we use another aux vector + n.clear(); + n[2] = 1.0; + } + + // Gram-Schmidt ortogonalization + n = n - inner_prod(t, n) / inner_prod(t, t) * t; + n /= norm_2(n); + + noalias(m) = MathUtils::CrossProduct(t, n); + + T(0, 0) = t[0]; + T(0, 1) = t[1]; + T(0, 2) = t[2]; + + T(1, 0) = n[0]; + T(1, 1) = n[1]; + T(1, 2) = n[2]; + + T(2, 0) = m[0]; + T(2, 1) = m[1]; + T(2, 2) = m[2]; + + return T; +} + +/***********************************************************************************/ +/***********************************************************************************/ + template void LinearTrussElement3D::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const { - // if (rNodalValues.size() != SystemSize) - // rNodalValues.resize(SystemSize, false); - // const auto &r_geom = GetGeometry(); + if (rNodalValues.size() != SystemSize) + rNodalValues.resize(SystemSize, false); + const auto &r_geom = GetGeometry(); // const double angle = GetAngle(); - // BoundedVector global_values; + BoundedVector global_values; // // We fill the vector with global values // for (SizeType i = 0; i < NNodes; ++i) { From b5f3d375e9639b9712270d1466a4b45868cc3fc1 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 14:34:11 +0100 Subject: [PATCH 039/142] update comments --- .../structural_mechanics_element_utilities.h | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_utilities/structural_mechanics_element_utilities.h b/applications/StructuralMechanicsApplication/custom_utilities/structural_mechanics_element_utilities.h index 349d69682d2b..f0881c14e552 100644 --- a/applications/StructuralMechanicsApplication/custom_utilities/structural_mechanics_element_utilities.h +++ b/applications/StructuralMechanicsApplication/custom_utilities/structural_mechanics_element_utilities.h @@ -286,6 +286,10 @@ void BuildElementSizeRotationMatrixFor2D3NBeam( const BoundedMatrix& rRotationMatrix, BoundedMatrix& rElementSizeRotationMatrix); +/** + * @param rRotationMatrix The rotation matrix from local to global axes + * It assumes 2 dofs per node: u,v + */ void BuildRotationMatrixForTruss( BoundedMatrix& rRotationMatrix, const double AlphaAngle); @@ -293,7 +297,7 @@ void BuildRotationMatrixForTruss( /** * @brief This function fills an element size rotation matrix a local rotation matrix * @param rRotationMatrix The rotation matrix from local to global axes - * It assumes 3 dofs per node: u,v,theta + * It assumes 2 dofs per node: u,v */ void BuildElementSizeRotationMatrixFor2D2NTruss( const BoundedMatrix& rRotationMatrix, @@ -302,12 +306,21 @@ void BuildElementSizeRotationMatrixFor2D2NTruss( /** * @brief This function fills an element size rotation matrix a local rotation matrix * @param rRotationMatrix The rotation matrix from local to global axes - * It assumes 3 dofs per node: u,v,theta + * It assumes 2 dofs per node: u,v */ void BuildElementSizeRotationMatrixFor2D3NTruss( const BoundedMatrix& rRotationMatrix, BoundedMatrix& rElementSizeRotationMatrix); +/** + * @brief This function fills an element size rotation matrix a local rotation matrix + * @param rRotationMatrix The rotation matrix from local to global axes + * It assumes 2 dofs per node: u,v + */ +void BuildElementSizeRotationMatrixFor3D2NTruss( + const BoundedMatrix& rRotationMatrix, + BoundedMatrix& rElementSizeRotationMatrix); + /** * @brief This function computes the inclination angle of a 2 noded beam * @param rGeometry The geometry of the beam From 3e8a3030a1a071b0f9381569baa68427f1d6f502 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 14:48:37 +0100 Subject: [PATCH 040/142] transformation matrices ok --- ...structural_mechanics_element_utilities.cpp | 80 +++++++++++++++++++ .../structural_mechanics_element_utilities.h | 9 +++ 2 files changed, 89 insertions(+) diff --git a/applications/StructuralMechanicsApplication/custom_utilities/structural_mechanics_element_utilities.cpp b/applications/StructuralMechanicsApplication/custom_utilities/structural_mechanics_element_utilities.cpp index 68a30f72edb2..e4e6937c2ca1 100644 --- a/applications/StructuralMechanicsApplication/custom_utilities/structural_mechanics_element_utilities.cpp +++ b/applications/StructuralMechanicsApplication/custom_utilities/structural_mechanics_element_utilities.cpp @@ -429,6 +429,86 @@ void BuildElementSizeRotationMatrixFor2D3NTruss( /***********************************************************************************/ /***********************************************************************************/ +void BuildElementSizeRotationMatrixFor3D2NTruss( + const BoundedMatrix& rRotationMatrix, + BoundedMatrix& rElementSizeRotationMatrix) +{ + rElementSizeRotationMatrix.clear(); + + rElementSizeRotationMatrix(0, 0) = rRotationMatrix(0, 0); + rElementSizeRotationMatrix(0, 1) = rRotationMatrix(0, 1); + rElementSizeRotationMatrix(0, 2) = rRotationMatrix(0, 2); + + rElementSizeRotationMatrix(1, 0) = rRotationMatrix(1, 0); + rElementSizeRotationMatrix(1, 1) = rRotationMatrix(1, 1); + rElementSizeRotationMatrix(1, 2) = rRotationMatrix(1, 2); + + rElementSizeRotationMatrix(2, 0) = rRotationMatrix(2, 0); + rElementSizeRotationMatrix(2, 1) = rRotationMatrix(2, 1); + rElementSizeRotationMatrix(2, 2) = rRotationMatrix(2, 2); + + rElementSizeRotationMatrix(3, 3) = rRotationMatrix(0, 0); + rElementSizeRotationMatrix(3, 4) = rRotationMatrix(0, 1); + rElementSizeRotationMatrix(3, 5) = rRotationMatrix(0, 2); + + rElementSizeRotationMatrix(4, 3) = rRotationMatrix(1, 0); + rElementSizeRotationMatrix(4, 4) = rRotationMatrix(1, 1); + rElementSizeRotationMatrix(4, 5) = rRotationMatrix(1, 2); + + rElementSizeRotationMatrix(5, 3) = rRotationMatrix(2, 0); + rElementSizeRotationMatrix(5, 4) = rRotationMatrix(2, 1); + rElementSizeRotationMatrix(5, 5) = rRotationMatrix(2, 2); +} + +/***********************************************************************************/ +/***********************************************************************************/ + +void BuildElementSizeRotationMatrixFor3D3NTruss( + const BoundedMatrix& rRotationMatrix, + BoundedMatrix& rElementSizeRotationMatrix) +{ + rElementSizeRotationMatrix.clear(); + + rElementSizeRotationMatrix(0, 0) = rRotationMatrix(0, 0); + rElementSizeRotationMatrix(0, 1) = rRotationMatrix(0, 1); + rElementSizeRotationMatrix(0, 2) = rRotationMatrix(0, 2); + + rElementSizeRotationMatrix(1, 0) = rRotationMatrix(1, 0); + rElementSizeRotationMatrix(1, 1) = rRotationMatrix(1, 1); + rElementSizeRotationMatrix(1, 2) = rRotationMatrix(1, 2); + + rElementSizeRotationMatrix(2, 0) = rRotationMatrix(2, 0); + rElementSizeRotationMatrix(2, 1) = rRotationMatrix(2, 1); + rElementSizeRotationMatrix(2, 2) = rRotationMatrix(2, 2); + + rElementSizeRotationMatrix(3, 3) = rRotationMatrix(0, 0); + rElementSizeRotationMatrix(3, 4) = rRotationMatrix(0, 1); + rElementSizeRotationMatrix(3, 5) = rRotationMatrix(0, 2); + + rElementSizeRotationMatrix(4, 3) = rRotationMatrix(1, 0); + rElementSizeRotationMatrix(4, 4) = rRotationMatrix(1, 1); + rElementSizeRotationMatrix(4, 5) = rRotationMatrix(1, 2); + + rElementSizeRotationMatrix(5, 3) = rRotationMatrix(2, 0); + rElementSizeRotationMatrix(5, 4) = rRotationMatrix(2, 1); + rElementSizeRotationMatrix(5, 5) = rRotationMatrix(2, 2); + + rElementSizeRotationMatrix(6, 6) = rRotationMatrix(0, 0); + rElementSizeRotationMatrix(6, 7) = rRotationMatrix(0, 1); + rElementSizeRotationMatrix(6, 8) = rRotationMatrix(0, 2); + + rElementSizeRotationMatrix(7, 6) = rRotationMatrix(1, 0); + rElementSizeRotationMatrix(7, 7) = rRotationMatrix(1, 1); + rElementSizeRotationMatrix(7, 8) = rRotationMatrix(1, 2); + + rElementSizeRotationMatrix(8, 6) = rRotationMatrix(2, 0); + rElementSizeRotationMatrix(8, 7) = rRotationMatrix(2, 1); + rElementSizeRotationMatrix(8, 8) = rRotationMatrix(2, 2); +} + +/***********************************************************************************/ +/***********************************************************************************/ + double GetReferenceRotationAngle2D2NBeam(const GeometryType& rGeometry) { const auto &r_node_1 = rGeometry[0]; diff --git a/applications/StructuralMechanicsApplication/custom_utilities/structural_mechanics_element_utilities.h b/applications/StructuralMechanicsApplication/custom_utilities/structural_mechanics_element_utilities.h index f0881c14e552..0705076958bf 100644 --- a/applications/StructuralMechanicsApplication/custom_utilities/structural_mechanics_element_utilities.h +++ b/applications/StructuralMechanicsApplication/custom_utilities/structural_mechanics_element_utilities.h @@ -321,6 +321,15 @@ void BuildElementSizeRotationMatrixFor3D2NTruss( const BoundedMatrix& rRotationMatrix, BoundedMatrix& rElementSizeRotationMatrix); +/** + * @brief This function fills an element size rotation matrix a local rotation matrix + * @param rRotationMatrix The rotation matrix from local to global axes + * It assumes 2 dofs per node: u,v + */ +void BuildElementSizeRotationMatrixFor3D3NTruss( + const BoundedMatrix& rRotationMatrix, + BoundedMatrix& rElementSizeRotationMatrix); + /** * @brief This function computes the inclination angle of a 2 noded beam * @param rGeometry The geometry of the beam From c6b0376abe7d9421dfd4b7fe2021f2019e5a9a97 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 15:18:01 +0100 Subject: [PATCH 041/142] more --- .../linear_truss_element_3D.cpp | 42 +++++++++---------- .../truss_elements/linear_truss_element_3D.h | 4 +- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp index bdccd56e281a..68de03390f9d 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp @@ -216,7 +216,7 @@ BoundedMatrix LinearTrussElement3D::GetFrenetSerretMatrix { const auto &r_geom = GetGeometry(); BoundedMatrix T; - T.clear(); + T.clear(); // global to local array_1d t; array_1d n; @@ -265,31 +265,27 @@ void LinearTrussElement3D::GetNodalValuesVector(SystemSizeBoundedArrayT rNodalValues.resize(SystemSize, false); const auto &r_geom = GetGeometry(); - // const double angle = GetAngle(); - BoundedVector global_values; - // // We fill the vector with global values - // for (SizeType i = 0; i < NNodes; ++i) { - // const auto& r_displ = r_geom[i].FastGetSolutionStepValue(DISPLACEMENT); - // global_values[i * DofsPerNode] = r_displ[0]; - // global_values[i * DofsPerNode + 1] = r_displ[1]; - // } + // We fill the vector with global values + for (SizeType i = 0; i < NNodes; ++i) { + const auto& r_displ = r_geom[i].FastGetSolutionStepValue(DISPLACEMENT); + global_values[i * DofsPerNode] = r_displ[0]; + global_values[i * DofsPerNode + 1] = r_displ[1]; + global_values[i * DofsPerNode + 2] = r_displ[2]; + } - // if (std::abs(angle) > std::numeric_limits::epsilon()) { - // BoundedMatrix T; - // BoundedMatrix global_size_T; - // StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); - // if constexpr (NNodes == 2) { - // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); - // } else { - // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); - // } - // // We rotate to local axes - // noalias(rNodalValues) = prod(trans(global_size_T), global_values); - // } else { - // noalias(rNodalValues) = global_values; - // } + BoundedMatrix T; + noalias(T) = GetFrenetSerretMatrix(); // global to local + BoundedMatrix global_size_T; + + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); + } + + noalias(rNodalValues) = prod(global_size_T, global_values); } /***********************************************************************************/ diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h index 5f1570102ea2..5238ca9744c4 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h @@ -63,9 +63,9 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement3D /// The base element type using BaseType = LinearTrussElement2D; - // static constexpr SizeType NNodes = TNNodes; + static constexpr SizeType NNodes = TNNodes; static constexpr SizeType DofsPerNode = 3; - // static constexpr SizeType SystemSize = DofsPerNode * NNodes; + static constexpr SizeType SystemSize = DofsPerNode * NNodes; // using SystemSizeBoundedArrayType = array_1d; // Counted pointer of BaseSolidElement From c2d0546ae664793ef93bcba568fd36a3ba1ebf5c Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 18:48:18 +0100 Subject: [PATCH 042/142] adding another template entry --- .../linear_truss_element_2D.cpp | 98 +++++++++---------- .../truss_elements/linear_truss_element_2D.h | 7 +- .../linear_truss_element_3D.cpp | 78 +++++++-------- .../truss_elements/linear_truss_element_3D.h | 12 +-- .../structural_mechanics_application.h | 8 +- 5 files changed, 100 insertions(+), 103 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp index 330cee4373d8..feaf5214a667 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp @@ -27,8 +27,8 @@ namespace Kratos /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::Initialize(const ProcessInfo& rCurrentProcessInfo) +template +void LinearTrussElement2D::Initialize(const ProcessInfo& rCurrentProcessInfo) { KRATOS_TRY @@ -56,8 +56,8 @@ void LinearTrussElement2D::Initialize(const ProcessInfo& rCurrentProces /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::InitializeMaterial() +template +void LinearTrussElement2D::InitializeMaterial() { KRATOS_TRY const auto &r_props = GetProperties(); @@ -78,15 +78,15 @@ void LinearTrussElement2D::InitializeMaterial() /***********************************************************************************/ /***********************************************************************************/ -template -Element::Pointer LinearTrussElement2D::Clone( +template +Element::Pointer LinearTrussElement2D::Clone( IndexType NewId, NodesArrayType const& rThisNodes ) const { KRATOS_TRY - LinearTrussElement2D::Pointer p_new_elem = Kratos::make_intrusive>(NewId, GetGeometry().Create(rThisNodes), pGetProperties()); + LinearTrussElement2D::Pointer p_new_elem = Kratos::make_intrusive>(NewId, GetGeometry().Create(rThisNodes), pGetProperties()); p_new_elem->SetData(this->GetData()); p_new_elem->Set(Flags(*this)); @@ -104,8 +104,8 @@ Element::Pointer LinearTrussElement2D::Clone( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::EquationIdVector( +template +void LinearTrussElement2D::EquationIdVector( EquationIdVectorType& rResult, const ProcessInfo& rCurrentProcessInfo ) const @@ -128,8 +128,8 @@ void LinearTrussElement2D::EquationIdVector( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::GetDofList( +template +void LinearTrussElement2D::GetDofList( DofsVectorType& rElementalDofList, const ProcessInfo& rCurrentProcessInfo ) const @@ -151,8 +151,8 @@ void LinearTrussElement2D::GetDofList( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::GetShapeFunctionsValues( +template +void LinearTrussElement2D::GetShapeFunctionsValues( SystemSizeBoundedArrayType& rN, const double Length, const double xi @@ -163,7 +163,7 @@ void LinearTrussElement2D::GetShapeFunctionsValues( rN.clear(); array_1d base_N; - noalias(base_N) = GetBaseShapeFunctions(xi); + noalias(base_N) = this->GetBaseShapeFunctions(xi); if constexpr (NNodes == 2) { rN[0] = base_N[0]; @@ -178,8 +178,8 @@ void LinearTrussElement2D::GetShapeFunctionsValues( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::GetShapeFunctionsValuesY( +template +void LinearTrussElement2D::GetShapeFunctionsValuesY( SystemSizeBoundedArrayType& rN, const double Length, const double xi @@ -205,8 +205,8 @@ void LinearTrussElement2D::GetShapeFunctionsValuesY( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::GetFirstDerivativesShapeFunctionsValues( +template +void LinearTrussElement2D::GetFirstDerivativesShapeFunctionsValues( SystemSizeBoundedArrayType& rdN_dX, const double Length, const double xi @@ -231,8 +231,8 @@ void LinearTrussElement2D::GetFirstDerivativesShapeFunctionsValues( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const +template +void LinearTrussElement2D::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const { if (rNodalValues.size() != SystemSize) rNodalValues.resize(SystemSize, false); @@ -268,8 +268,8 @@ void LinearTrussElement2D::GetNodalValuesVector(SystemSizeBoundedArrayT /***********************************************************************************/ /***********************************************************************************/ -template -array_1d LinearTrussElement2D::GetLocalAxesBodyForce( +template +array_1d LinearTrussElement2D::GetLocalAxesBodyForce( const Element &rElement, const GeometryType::IntegrationPointsArrayType &rIntegrationPoints, const IndexType PointNumber @@ -289,8 +289,8 @@ array_1d LinearTrussElement2D::GetLocalAxesBodyForce( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::CalculateLocalSystem( +template +void LinearTrussElement2D::CalculateLocalSystem( MatrixType& rLHS, VectorType& rRHS, const ProcessInfo& rProcessInfo @@ -364,8 +364,8 @@ void LinearTrussElement2D::CalculateLocalSystem( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::CalculateLeftHandSide( +template +void LinearTrussElement2D::CalculateLeftHandSide( MatrixType& rLHS, const ProcessInfo& rProcessInfo ) @@ -425,8 +425,8 @@ void LinearTrussElement2D::CalculateLeftHandSide( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::CalculateRightHandSide( +template +void LinearTrussElement2D::CalculateRightHandSide( VectorType& rRHS, const ProcessInfo& rProcessInfo ) @@ -491,8 +491,8 @@ void LinearTrussElement2D::CalculateRightHandSide( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::RotateLHS( +template +void LinearTrussElement2D::RotateLHS( MatrixType& rLHS ) { @@ -516,8 +516,8 @@ void LinearTrussElement2D::RotateLHS( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::RotateRHS( +template +void LinearTrussElement2D::RotateRHS( VectorType& rRHS ) { @@ -541,8 +541,8 @@ void LinearTrussElement2D::RotateRHS( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::RotateAll( +template +void LinearTrussElement2D::RotateAll( MatrixType& rLHS, VectorType& rRHS ) @@ -571,8 +571,8 @@ void LinearTrussElement2D::RotateAll( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::CalculateOnIntegrationPoints( +template +void LinearTrussElement2D::CalculateOnIntegrationPoints( const Variable& rVariable, std::vector& rOutput, const ProcessInfo& rProcessInfo @@ -650,8 +650,8 @@ void LinearTrussElement2D::CalculateOnIntegrationPoints( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::CalculateOnIntegrationPoints( +template +void LinearTrussElement2D::CalculateOnIntegrationPoints( const Variable& rVariable, std::vector& rValues, const ProcessInfo& rCurrentProcessInfo @@ -671,8 +671,8 @@ void LinearTrussElement2D::CalculateOnIntegrationPoints( /***********************************************************************************/ /***********************************************************************************/ -template -int LinearTrussElement2D::Check(const ProcessInfo& rCurrentProcessInfo) const +template +int LinearTrussElement2D::Check(const ProcessInfo& rCurrentProcessInfo) const { KRATOS_TRY; @@ -685,8 +685,8 @@ int LinearTrussElement2D::Check(const ProcessInfo& rCurrentProcessInfo) /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::save(Serializer& rSerializer) const +template +void LinearTrussElement2D::save(Serializer& rSerializer) const { KRATOS_SERIALIZE_SAVE_BASE_CLASS(rSerializer, Element); int IntMethod = int(this->GetIntegrationMethod()); @@ -697,8 +697,8 @@ void LinearTrussElement2D::save(Serializer& rSerializer) const /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement2D::load(Serializer& rSerializer) +template +void LinearTrussElement2D::load(Serializer& rSerializer) { KRATOS_SERIALIZE_LOAD_BASE_CLASS(rSerializer, Element); int IntMethod; @@ -710,10 +710,10 @@ void LinearTrussElement2D::load(Serializer& rSerializer) /***********************************************************************************/ /***********************************************************************************/ -template -array_1d LinearTrussElement2D::GetBaseShapeFunctions(const double xi) const +template +array_1d LinearTrussElement2D::GetBaseShapeFunctions(const double xi) const { - array_1d N; + array_1d N; if constexpr (NNodes == 2) { N[0] = 0.5 * (1.0 - xi); @@ -729,7 +729,7 @@ array_1d LinearTrussElement2D::GetBaseShapeFunctions(c /***********************************************************************************/ /***********************************************************************************/ -template class LinearTrussElement2D<2>; -template class LinearTrussElement2D<3>; +template class LinearTrussElement2D<2, 2>; +template class LinearTrussElement2D<3, 2>; } // Namespace Kratos diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h index 64fb867a666a..711f72086b6d 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h @@ -52,7 +52,7 @@ using SizeType = std::size_t; * 0 1 0 2 1 * @author Alejandro Cornejo */ -template +template class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D : public Element { @@ -65,8 +65,9 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D /// The base element type using BaseType = Element; static constexpr SizeType NNodes = TNNodes; - static constexpr SizeType DofsPerNode = 2; - static constexpr SizeType SystemSize = DofsPerNode * NNodes; + static constexpr SizeType Dimension = TDimension; + static constexpr SizeType DofsPerNode = TDimension; + static constexpr SizeType SystemSize = TDimension * TNNodes; using SystemSizeBoundedArrayType = array_1d; // Counted pointer of BaseSolidElement diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp index 68de03390f9d..7873fc16c3f6 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp @@ -27,15 +27,15 @@ namespace Kratos /***********************************************************************************/ /***********************************************************************************/ -template -Element::Pointer LinearTrussElement3D::Clone( +template +Element::Pointer LinearTrussElement3D::Clone( IndexType NewId, NodesArrayType const& rThisNodes ) const { KRATOS_TRY - LinearTrussElement3D::Pointer p_new_elem = Kratos::make_intrusive>(NewId, GetGeometry().Create(rThisNodes), pGetProperties()); + LinearTrussElement3D::Pointer p_new_elem = Kratos::make_intrusive>(NewId, GetGeometry().Create(rThisNodes), pGetProperties()); p_new_elem->SetData(this->GetData()); p_new_elem->Set(Flags(*this)); @@ -53,8 +53,8 @@ Element::Pointer LinearTrussElement3D::Clone( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::EquationIdVector( +template +void LinearTrussElement3D::EquationIdVector( EquationIdVectorType& rResult, const ProcessInfo& rCurrentProcessInfo ) const @@ -78,8 +78,8 @@ void LinearTrussElement3D::EquationIdVector( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::GetDofList( +template +void LinearTrussElement3D::GetDofList( DofsVectorType& rElementalDofList, const ProcessInfo& rCurrentProcessInfo ) const @@ -103,8 +103,8 @@ void LinearTrussElement3D::GetDofList( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::GetShapeFunctionsValues( +template +void LinearTrussElement3D::GetShapeFunctionsValues( SystemSizeBoundedArrayType& rN, const double Length, const double xi @@ -130,8 +130,8 @@ void LinearTrussElement3D::GetShapeFunctionsValues( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::GetShapeFunctionsValuesY( +template +void LinearTrussElement3D::GetShapeFunctionsValuesY( SystemSizeBoundedArrayType& rN, const double Length, const double xi @@ -157,8 +157,8 @@ void LinearTrussElement3D::GetShapeFunctionsValuesY( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::GetShapeFunctionsValuesZ( +template +void LinearTrussElement3D::GetShapeFunctionsValuesZ( SystemSizeBoundedArrayType& rN, const double Length, const double xi @@ -184,8 +184,8 @@ void LinearTrussElement3D::GetShapeFunctionsValuesZ( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::GetFirstDerivativesShapeFunctionsValues( +template +void LinearTrussElement3D::GetFirstDerivativesShapeFunctionsValues( SystemSizeBoundedArrayType& rdN_dX, const double Length, const double xi @@ -211,8 +211,8 @@ void LinearTrussElement3D::GetFirstDerivativesShapeFunctionsValues( /***********************************************************************************/ /***********************************************************************************/ -template -BoundedMatrix LinearTrussElement3D::GetFrenetSerretMatrix() const +template +BoundedMatrix LinearTrussElement3D::GetFrenetSerretMatrix() const { const auto &r_geom = GetGeometry(); BoundedMatrix T; @@ -258,8 +258,8 @@ BoundedMatrix LinearTrussElement3D::GetFrenetSerretMatrix /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const +template +void LinearTrussElement3D::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const { if (rNodalValues.size() != SystemSize) rNodalValues.resize(SystemSize, false); @@ -291,8 +291,8 @@ void LinearTrussElement3D::GetNodalValuesVector(SystemSizeBoundedArrayT /***********************************************************************************/ /***********************************************************************************/ -template -array_1d LinearTrussElement3D::GetLocalAxesBodyForce( +template +array_1d LinearTrussElement3D::GetLocalAxesBodyForce( const Element &rElement, const GeometryType::IntegrationPointsArrayType &rIntegrationPoints, const IndexType PointNumber @@ -312,8 +312,8 @@ array_1d LinearTrussElement3D::GetLocalAxesBodyForce( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::CalculateLocalSystem( +template +void LinearTrussElement3D::CalculateLocalSystem( MatrixType& rLHS, VectorType& rRHS, const ProcessInfo& rProcessInfo @@ -387,8 +387,8 @@ void LinearTrussElement3D::CalculateLocalSystem( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::CalculateLeftHandSide( +template +void LinearTrussElement3D::CalculateLeftHandSide( MatrixType& rLHS, const ProcessInfo& rProcessInfo ) @@ -448,8 +448,8 @@ void LinearTrussElement3D::CalculateLeftHandSide( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::CalculateRightHandSide( +template +void LinearTrussElement3D::CalculateRightHandSide( VectorType& rRHS, const ProcessInfo& rProcessInfo ) @@ -514,8 +514,8 @@ void LinearTrussElement3D::CalculateRightHandSide( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::RotateLHS( +template +void LinearTrussElement3D::RotateLHS( MatrixType& rLHS ) { @@ -539,8 +539,8 @@ void LinearTrussElement3D::RotateLHS( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::RotateRHS( +template +void LinearTrussElement3D::RotateRHS( VectorType& rRHS ) { @@ -564,8 +564,8 @@ void LinearTrussElement3D::RotateRHS( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::RotateAll( +template +void LinearTrussElement3D::RotateAll( MatrixType& rLHS, VectorType& rRHS ) @@ -594,8 +594,8 @@ void LinearTrussElement3D::RotateAll( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::save(Serializer& rSerializer) const +template +void LinearTrussElement3D::save(Serializer& rSerializer) const { KRATOS_SERIALIZE_SAVE_BASE_CLASS(rSerializer, BaseType); } @@ -603,8 +603,8 @@ void LinearTrussElement3D::save(Serializer& rSerializer) const /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::load(Serializer& rSerializer) +template +void LinearTrussElement3D::load(Serializer& rSerializer) { KRATOS_SERIALIZE_LOAD_BASE_CLASS(rSerializer, BaseType); } @@ -612,7 +612,7 @@ void LinearTrussElement3D::load(Serializer& rSerializer) /***********************************************************************************/ /***********************************************************************************/ -template class LinearTrussElement3D<2>; -template class LinearTrussElement3D<3>; +template class LinearTrussElement3D<2, 3>; +template class LinearTrussElement3D<3, 3>; } // Namespace Kratos diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h index 5238ca9744c4..3ee73514b21f 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h @@ -51,9 +51,9 @@ using SizeType = std::size_t; * 0 1 0 2 1 * @author Alejandro Cornejo */ -template +template class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement3D - : public LinearTrussElement2D + : public LinearTrussElement2D { public: @@ -62,11 +62,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement3D ///@{ /// The base element type - using BaseType = LinearTrussElement2D; - static constexpr SizeType NNodes = TNNodes; - static constexpr SizeType DofsPerNode = 3; - static constexpr SizeType SystemSize = DofsPerNode * NNodes; - // using SystemSizeBoundedArrayType = array_1d; + using BaseType = LinearTrussElement2D; // Counted pointer of BaseSolidElement KRATOS_CLASS_INTRUSIVE_POINTER_DEFINITION(LinearTrussElement3D); @@ -85,7 +81,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement3D LinearTrussElement3D(IndexType NewId, GeometryType::Pointer pGeometry, PropertiesType::Pointer pProperties) : BaseType(NewId,pGeometry,pProperties) {} // Copy constructor - LinearTrussElement3D(LinearTrussElement2D const& rOther) : BaseType(rOther) {} + LinearTrussElement3D(LinearTrussElement3D const& rOther) : BaseType(rOther) {} // Create method Element::Pointer Create(IndexType NewId, NodesArrayType const& ThisNodes, PropertiesType::Pointer pProperties) const override diff --git a/applications/StructuralMechanicsApplication/structural_mechanics_application.h b/applications/StructuralMechanicsApplication/structural_mechanics_application.h index 65351dd5beef..9c53e9dea9f7 100644 --- a/applications/StructuralMechanicsApplication/structural_mechanics_application.h +++ b/applications/StructuralMechanicsApplication/structural_mechanics_application.h @@ -273,10 +273,10 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) KratosStructuralMechanicsAppl const TrussElement3D2N mTrussElement3D2N; const TrussElementLinear3D2N mTrussLinearElement3D2N; const CableElement3D2N mCableElement3D2N; - const LinearTrussElement2D<2> mLinearTrussElement2D2N; - const LinearTrussElement2D<3> mLinearTrussElement2D3N; - const LinearTrussElement3D<2> mLinearTrussElement3D2N; - const LinearTrussElement3D<3> mLinearTrussElement3D3N; + const LinearTrussElement2D<2, 2> mLinearTrussElement2D2N; + const LinearTrussElement2D<3, 2> mLinearTrussElement2D3N; + const LinearTrussElement3D<2, 3> mLinearTrussElement3D2N; + const LinearTrussElement3D<3, 3> mLinearTrussElement3D3N; // Adding the beam element const CrBeamElement3D2N mCrBeamElement3D2N; From 2fba54a3e327f3c00cf732958d291a6e3bd2bccb Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 27 Nov 2024 18:58:06 +0100 Subject: [PATCH 043/142] to link --- .../truss_elements/linear_truss_element_2D.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp index feaf5214a667..4944dde871b7 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp @@ -679,7 +679,7 @@ int LinearTrussElement2D::Check(const ProcessInfo& rCurrent return mConstitutiveLawVector[0]->Check(GetProperties(), GetGeometry(), rCurrentProcessInfo); KRATOS_ERROR_IF_NOT(GetProperties().Has(CROSS_AREA)) << "CROSS_AREA not defined in the properties" << std::endl; - KRATOS_CATCH( "" ); + KRATOS_CATCH(""); } /***********************************************************************************/ @@ -732,4 +732,8 @@ array_1d LinearTrussElement2D::GetBaseShap template class LinearTrussElement2D<2, 2>; template class LinearTrussElement2D<3, 2>; +// In order to link +template class LinearTrussElement2D<2, 3>; +template class LinearTrussElement2D<3, 3>; + } // Namespace Kratos From 1a2cd3a1fe632e23f4f9dde2c6581131ba7cd221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 28 Nov 2024 13:01:17 +0100 Subject: [PATCH 044/142] Adding benchmarks to CL app --- .../ConstitutiveLawsApplication/CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/applications/ConstitutiveLawsApplication/CMakeLists.txt b/applications/ConstitutiveLawsApplication/CMakeLists.txt index 120237503ee6..bc7fdab74b3b 100644 --- a/applications/ConstitutiveLawsApplication/CMakeLists.txt +++ b/applications/ConstitutiveLawsApplication/CMakeLists.txt @@ -39,6 +39,21 @@ add_library(KratosConstitutiveLawsCore SHARED ${KRATOS_CONSTITUTIVE_LAWS_APPLICA target_link_libraries(KratosConstitutiveLawsCore PUBLIC KratosCore KratosStructuralMechanicsCore) set_target_properties(KratosConstitutiveLawsCore PROPERTIES COMPILE_DEFINITIONS "CONSTITUTIVE_LAWS_APPLICATION=EXPORT,API") +## ConstitutiveLaws benchmark sources. Disabled by default +if(${KRATOS_BUILD_BENCHMARK} MATCHES ON) + file(GLOB_RECURSE KRATOS_BENCHMARK_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/*.cpp + ) + + foreach(file ${KRATOS_BENCHMARK_SOURCES}) + get_filename_component(filename ${file} NAME_WE) + add_executable(${filename} ${file}) + target_link_libraries(${filename} PUBLIC KratosConstitutiveLawsCore benchmark::benchmark) + set_target_properties(${filename} PROPERTIES COMPILE_DEFINITIONS "KRATOS_BENCHMARK=IMPORT,API") + install(TARGETS ${filename} DESTINATION benchmark) + endforeach(file ${KRATOS_BENCHMARK_SOURCES}) +endif(${KRATOS_BUILD_BENCHMARK} MATCHES ON) + ############################################################### ## define library Kratos which defines the basic python interface pybind11_add_module(KratosConstitutiveLawsApplication MODULE THIN_LTO ${KRATOS_CONSTITUTIVE_LAWS_APPLICATION_PYTHON_INTERFACE}) From 0898512c43925eb8f93b9b4aedb84bd7834b7228 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 28 Nov 2024 13:01:30 +0100 Subject: [PATCH 045/142] Adding benchmark to contact app --- .../CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/applications/ContactStructuralMechanicsApplication/CMakeLists.txt b/applications/ContactStructuralMechanicsApplication/CMakeLists.txt index 55bc11547004..b49e189af757 100644 --- a/applications/ContactStructuralMechanicsApplication/CMakeLists.txt +++ b/applications/ContactStructuralMechanicsApplication/CMakeLists.txt @@ -41,6 +41,21 @@ add_library(KratosContactStructuralMechanicsCore SHARED ${KRATOS_CONTACT_STRUCTU target_link_libraries(KratosContactStructuralMechanicsCore PUBLIC KratosCore KratosStructuralMechanicsCore) set_target_properties(KratosContactStructuralMechanicsCore PROPERTIES COMPILE_DEFINITIONS "CONTACT_STRUCTURAL_MECHANICS_APPLICATION=EXPORT,API") +## ContactStructuralMechanics benchmark sources. Disabled by default +if(${KRATOS_BUILD_BENCHMARK} MATCHES ON) + file(GLOB_RECURSE KRATOS_BENCHMARK_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/*.cpp + ) + + foreach(file ${KRATOS_BENCHMARK_SOURCES}) + get_filename_component(filename ${file} NAME_WE) + add_executable(${filename} ${file}) + target_link_libraries(${filename} PUBLIC KratosContactStructuralMechanicsCore benchmark::benchmark) + set_target_properties(${filename} PROPERTIES COMPILE_DEFINITIONS "KRATOS_BENCHMARK=IMPORT,API") + install(TARGETS ${filename} DESTINATION benchmark) + endforeach(file ${KRATOS_BENCHMARK_SOURCES}) +endif(${KRATOS_BUILD_BENCHMARK} MATCHES ON) + ############################################################### ## define library Kratos which defines the basic python interface pybind11_add_module(KratosContactStructuralMechanicsApplication MODULE THIN_LTO ${KRATOS_CONTACT_STRUCTURAL_MECHANICS_APPLICATION_PYTHON_INTERFACE}) From 94490006be296607026838bf143fc305c78120f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 28 Nov 2024 13:01:56 +0100 Subject: [PATCH 046/142] Adding benchmark for fluid app --- .../FluidDynamicsApplication/CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/applications/FluidDynamicsApplication/CMakeLists.txt b/applications/FluidDynamicsApplication/CMakeLists.txt index 3edc46170aba..ef6082a17f4a 100644 --- a/applications/FluidDynamicsApplication/CMakeLists.txt +++ b/applications/FluidDynamicsApplication/CMakeLists.txt @@ -42,6 +42,21 @@ add_library( KratosFluidDynamicsCore SHARED ${KRATOS_FLUID_DYNAMICS_APPLICATION_ target_link_libraries( KratosFluidDynamicsCore PUBLIC KratosCore) set_target_properties( KratosFluidDynamicsCore PROPERTIES COMPILE_DEFINITIONS "FLUID_DYNAMICS_APPLICATION=EXPORT,API") +## FluidDynamicsApplication benchmark sources. Disabled by default +if(${KRATOS_BUILD_BENCHMARK} MATCHES ON) + file(GLOB_RECURSE KRATOS_BENCHMARK_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/*.cpp + ) + + foreach(file ${KRATOS_BENCHMARK_SOURCES}) + get_filename_component(filename ${file} NAME_WE) + add_executable(${filename} ${file}) + target_link_libraries(${filename} PUBLIC KratosFluidDynamicsCore benchmark::benchmark) + set_target_properties(${filename} PROPERTIES COMPILE_DEFINITIONS "KRATOS_BENCHMARK=IMPORT,API") + install(TARGETS ${filename} DESTINATION benchmark) + endforeach(file ${KRATOS_BENCHMARK_SOURCES}) +endif(${KRATOS_BUILD_BENCHMARK} MATCHES ON) + ## FluidDynamicsApplication python module pybind11_add_module( KratosFluidDynamicsApplication MODULE THIN_LTO ${KRATOS_FLUID_DYNAMICS_PYTHON_INTERFACE_SOURCES} ) target_link_libraries( KratosFluidDynamicsApplication PRIVATE KratosFluidDynamicsCore) From 8730ca6278e2a6aba3be1dea67aa5a517652b68a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 28 Nov 2024 13:02:17 +0100 Subject: [PATCH 047/142] Adding benchmarks in structural app --- .../StructuralMechanicsApplication/CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/applications/StructuralMechanicsApplication/CMakeLists.txt b/applications/StructuralMechanicsApplication/CMakeLists.txt index ba076a61c050..e905d6b51fa6 100644 --- a/applications/StructuralMechanicsApplication/CMakeLists.txt +++ b/applications/StructuralMechanicsApplication/CMakeLists.txt @@ -37,6 +37,21 @@ add_library(KratosStructuralMechanicsCore SHARED ${KRATOS_STRUCTURAL_MECHANICS_A target_link_libraries(KratosStructuralMechanicsCore PUBLIC KratosCore) set_target_properties(KratosStructuralMechanicsCore PROPERTIES COMPILE_DEFINITIONS "STRUCTURAL_MECHANICS_APPLICATION=EXPORT,API") +## StructuralMechanics benchmark sources. Disabled by default +if(${KRATOS_BUILD_BENCHMARK} MATCHES ON) + file(GLOB_RECURSE KRATOS_BENCHMARK_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/*.cpp + ) + + foreach(file ${KRATOS_BENCHMARK_SOURCES}) + get_filename_component(filename ${file} NAME_WE) + add_executable(${filename} ${file}) + target_link_libraries(${filename} PUBLIC KratosStructuralMechanicsCore benchmark::benchmark) + set_target_properties(${filename} PROPERTIES COMPILE_DEFINITIONS "KRATOS_BENCHMARK=IMPORT,API") + install(TARGETS ${filename} DESTINATION benchmark) + endforeach(file ${KRATOS_BENCHMARK_SOURCES}) +endif(${KRATOS_BUILD_BENCHMARK} MATCHES ON) + # Define library Kratos which defines the basic python interface pybind11_add_module(KratosStructuralMechanicsApplication MODULE THIN_LTO ${KRATOS_STRUCTURAL_MECHANICS_APPLICATION_PYTHON_INTERFACE}) target_link_libraries(KratosStructuralMechanicsApplication PUBLIC KratosStructuralMechanicsCore) From 1151662da52d7b23b9d4fc08d4e6e61c6e341085 Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Thu, 28 Nov 2024 18:35:10 +0100 Subject: [PATCH 048/142] Variable and generator changes --- .../custom_python/fluid_dynamics_python_application.cpp | 1 + .../fluid_dynamics_application_variables.cpp | 1 + .../fluid_dynamics_application_variables.h | 1 + .../generate_weakly_compressible_navier_stokes_element.py | 6 ++++-- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/applications/FluidDynamicsApplication/custom_python/fluid_dynamics_python_application.cpp b/applications/FluidDynamicsApplication/custom_python/fluid_dynamics_python_application.cpp index e36f1120a1d1..9d5c0632d7c5 100644 --- a/applications/FluidDynamicsApplication/custom_python/fluid_dynamics_python_application.cpp +++ b/applications/FluidDynamicsApplication/custom_python/fluid_dynamics_python_application.cpp @@ -64,6 +64,7 @@ PYBIND11_MODULE(KratosFluidDynamicsApplication,m) // Darcy's flow variables KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, RESISTANCE); + KRATOS_REGISTER_IN_PYTHON_3D_VARIABLE_WITH_COMPONENTS(m,SOLID_FRACTION_VELOCITY); // Wall modelling KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, SLIP_TANGENTIAL_CORRECTION_SWITCH) diff --git a/applications/FluidDynamicsApplication/fluid_dynamics_application_variables.cpp b/applications/FluidDynamicsApplication/fluid_dynamics_application_variables.cpp index 194615721fd3..58ca441d9753 100644 --- a/applications/FluidDynamicsApplication/fluid_dynamics_application_variables.cpp +++ b/applications/FluidDynamicsApplication/fluid_dynamics_application_variables.cpp @@ -40,6 +40,7 @@ KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(AUXILIAR_VECTOR_VELOCITY) // Darcy's flow variables KRATOS_CREATE_VARIABLE(double, RESISTANCE) +KRATOS_CREATE_3D_VARIABLE_WITH_COMPONENTS(SOLID_FRACTION_VELOCITY) // Wall modelling KRATOS_CREATE_VARIABLE(bool, SLIP_TANGENTIAL_CORRECTION_SWITCH) diff --git a/applications/FluidDynamicsApplication/fluid_dynamics_application_variables.h b/applications/FluidDynamicsApplication/fluid_dynamics_application_variables.h index a723670b731c..5445bd47abc4 100644 --- a/applications/FluidDynamicsApplication/fluid_dynamics_application_variables.h +++ b/applications/FluidDynamicsApplication/fluid_dynamics_application_variables.h @@ -50,6 +50,7 @@ KRATOS_DEFINE_APPLICATION_VARIABLE( FLUID_DYNAMICS_APPLICATION, double, FS_PRESS // Darcy's flow variables KRATOS_DEFINE_APPLICATION_VARIABLE(FLUID_DYNAMICS_APPLICATION, double, RESISTANCE) +KRATOS_DEFINE_3D_APPLICATION_VARIABLE_WITH_COMPONENTS(FLUID_DYNAMICS_APPLICATION, SOLID_FRACTION_VELOCITY) // Wall modelling KRATOS_DEFINE_APPLICATION_VARIABLE(FLUID_DYNAMICS_APPLICATION, bool, SLIP_TANGENTIAL_CORRECTION_SWITCH) diff --git a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/generate_weakly_compressible_navier_stokes_element.py b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/generate_weakly_compressible_navier_stokes_element.py index ff419eca1f0e..e86e280d1324 100644 --- a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/generate_weakly_compressible_navier_stokes_element.py +++ b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/generate_weakly_compressible_navier_stokes_element.py @@ -118,6 +118,7 @@ ## Other data definitions f = DefineMatrix('f',nnodes,dim) # Forcing term + v_sol_frac = DefineMatrix('v_sol_frac',nnodes,dim) # Solid fraction velocity ## Constitutive matrix definition C = DefineSymmetricMatrix('C',strain_size,strain_size) @@ -146,6 +147,7 @@ ## Data interpolation to the Gauss points f_gauss = f.transpose()*N v_gauss = v.transpose()*N + v_sol_frac_gauss = v_sol_frac.transpose()*N ## Convective velocity definition if convective_term: @@ -205,7 +207,7 @@ ## Compute galerkin functional # Navier-Stokes functional if divide_by_rho: - rv_galerkin = rho*w_gauss.transpose()*f_gauss - rho*w_gauss.transpose()*accel_gauss - grad_w_voigt.transpose()*stress + div_w*p_gauss - sigma*w_gauss.transpose()*v_gauss - q_gauss*div_v + rv_galerkin = rho*w_gauss.transpose()*f_gauss - rho*w_gauss.transpose()*accel_gauss - grad_w_voigt.transpose()*stress + div_w*p_gauss - sigma*w_gauss.transpose()*(v_gauss-v_sol_frac_gauss) - q_gauss*div_v if artificial_compressibility: rv_galerkin -= (1/(rho*c*c))*q_gauss*pder_gauss if convective_term: @@ -224,7 +226,7 @@ ## Stabilization functional terms # Momentum conservation residual # Note that the viscous stress term is dropped since linear elements are used - vel_residual = rho*f_gauss - rho*accel_gauss - grad_p - sigma*v_gauss + vel_residual = rho*f_gauss - rho*accel_gauss - grad_p - sigma*(v_gauss-v_sol_frac_gauss) if convective_term: vel_residual -= rho*convective_term_gauss.transpose() From 92f5aa1d614662d94578dcf76629ee0eb63a2134 Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Fri, 29 Nov 2024 09:56:24 +0100 Subject: [PATCH 049/142] Implementation finished --- .../weakly_compressible_navier_stokes.cpp | 314 ++++++++++-------- .../weakly_compressible_navier_stokes_data.h | 3 + .../navier_stokes_embedded_solver.py | 27 +- .../navier_stokes_monolithic_solver.py | 27 +- ...akly_compressible_navier_stokes_element.py | 2 +- ...ompressible_navier_stokes_cpp_template.cpp | 2 + 6 files changed, 208 insertions(+), 167 deletions(-) diff --git a/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp b/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp index 7922cd83c628..5cb727547ef2 100644 --- a/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp @@ -271,21 +271,21 @@ void WeaklyCompressibleNavierStokes< WeaklyCompressibleNavierStokesData<2,3> >:: const double crLHS0 = C(0,0)*DN(0,0) + C(0,2)*DN(0,1); const double crLHS1 = C(0,2)*DN(0,0); const double crLHS2 = C(2,2)*DN(0,1) + crLHS1; -const double crLHS3 = pow(DN(0,0), 2); +const double crLHS3 = DN(0,0)*DN(0,0); const double crLHS4 = sigma*stab_c3; const double crLHS5 = N[0]*rho[0] + N[1]*rho[1] + N[2]*rho[2]; const double crLHS6 = N[0]*vconv(0,0) + N[1]*vconv(1,0) + N[2]*vconv(2,0); const double crLHS7 = N[0]*vconv(0,1) + N[1]*vconv(1,1) + N[2]*vconv(2,1); -const double crLHS8 = crLHS5*stab_c2*sqrt(pow(crLHS6, 2) + pow(crLHS7, 2)); -const double crLHS9 = mu + (crLHS4 + crLHS8*h)/stab_c1; -const double crLHS10 = pow(N[0], 2); +const double crLHS8 = crLHS5*stab_c2*sqrt(crLHS6*crLHS6 + crLHS7*crLHS7); +const double crLHS9 = mu + (crLHS4 + crLHS8*h)*1.0/stab_c1; +const double crLHS10 = N[0]*N[0]; const double crLHS11 = crLHS5*(DN(0,0)*crLHS6 + DN(0,1)*crLHS7); const double crLHS12 = bdf0*crLHS5; const double crLHS13 = N[0]*sigma; const double crLHS14 = N[0]*crLHS12; const double crLHS15 = crLHS11 + crLHS13 + crLHS14; -const double crLHS16 = pow(h, -2); -const double crLHS17 = 1.0/(crLHS16*crLHS4 + crLHS16*mu*stab_c1 + crLHS5*dyn_tau/dt + crLHS8/h); +const double crLHS16 = 1.0/(h*h); +const double crLHS17 = 1.0/(crLHS16*crLHS4 + crLHS16*mu*stab_c1 + crLHS5*dyn_tau*1.0/dt + crLHS8*1.0/h); const double crLHS18 = 1.0*crLHS11; const double crLHS19 = crLHS17*crLHS18; const double crLHS20 = 1.0*crLHS13; @@ -300,7 +300,7 @@ const double crLHS28 = C(1,2)*DN(0,1); const double crLHS29 = C(2,2)*DN(0,0) + crLHS28; const double crLHS30 = DN(0,0)*crLHS9; const double crLHS31 = DN(0,1)*crLHS30; -const double crLHS32 = bdf0/(crLHS5*pow(N[0]*c[0] + N[1]*c[1] + N[2]*c[2], 2)); +const double crLHS32 = bdf0*1.0/crLHS5/pow(N[0]*c[0] + N[1]*c[1] + N[2]*c[2], 2); const double crLHS33 = N[0]*crLHS32; const double crLHS34 = crLHS22*crLHS24; const double crLHS35 = gauss_weight*(N[0]*crLHS34 - N[0] + crLHS19 - crLHS21 + crLHS33*crLHS9); @@ -341,7 +341,7 @@ const double crLHS69 = DN(0,0)*N[2]; const double crLHS70 = DN(2,0)*N[0]; const double crLHS71 = C(0,1)*DN(0,0) + crLHS28; const double crLHS72 = C(1,1)*DN(0,1) + C(1,2)*DN(0,0); -const double crLHS73 = pow(DN(0,1), 2); +const double crLHS73 = DN(0,1)*DN(0,1); const double crLHS74 = C(0,1)*DN(1,0) + crLHS48; const double crLHS75 = DN(0,1)*crLHS9; const double crLHS76 = DN(1,0)*crLHS75; @@ -364,8 +364,8 @@ const double crLHS92 = crLHS22*crLHS41; const double crLHS93 = crLHS22*crLHS42; const double crLHS94 = N[1]*crLHS24; const double crLHS95 = N[1]*crLHS11 + crLHS15*crLHS92 - crLHS15*crLHS93 + crLHS23*crLHS94; -const double crLHS96 = pow(DN(1,0), 2); -const double crLHS97 = pow(N[1], 2); +const double crLHS96 = DN(1,0)*DN(1,0); +const double crLHS97 = N[1]*N[1]; const double crLHS98 = N[1]*crLHS41 + crLHS12*crLHS97 + crLHS41*crLHS45 - crLHS42*crLHS45 + crLHS45*crLHS94 + crLHS97*sigma; const double crLHS99 = DN(1,0)*crLHS9; const double crLHS100 = DN(1,1)*crLHS99; @@ -377,7 +377,7 @@ const double crLHS105 = N[1]*crLHS59 + crLHS62*crLHS92 - crLHS62*crLHS93 + crLHS const double crLHS106 = DN(2,1)*crLHS99; const double crLHS107 = DN(1,0)*N[2]; const double crLHS108 = DN(2,0)*N[1]; -const double crLHS109 = pow(DN(1,1), 2); +const double crLHS109 = DN(1,1)*DN(1,1); const double crLHS110 = DN(1,1)*crLHS9; const double crLHS111 = DN(2,0)*crLHS110; const double crLHS112 = DN(2,1)*crLHS110 + crLHS103; @@ -390,12 +390,12 @@ const double crLHS118 = gauss_weight*(DN(2,0)*crLHS116 + DN(2,1)*crLHS117 + N[2] const double crLHS119 = N[2]*crLHS24; const double crLHS120 = N[2]*crLHS11 + crLHS119*crLHS23 + crLHS23*crLHS59 - crLHS23*crLHS60; const double crLHS121 = N[2]*crLHS41 + crLHS119*crLHS45 + crLHS45*crLHS59 - crLHS45*crLHS60; -const double crLHS122 = pow(DN(2,0), 2); -const double crLHS123 = pow(N[2], 2); +const double crLHS122 = DN(2,0)*DN(2,0); +const double crLHS123 = N[2]*N[2]; const double crLHS124 = N[2]*crLHS59 + crLHS119*crLHS63 + crLHS12*crLHS123 + crLHS123*sigma + crLHS59*crLHS63 - crLHS60*crLHS63; const double crLHS125 = DN(2,0)*DN(2,1)*crLHS9; const double crLHS126 = gauss_weight*(N[2]*crLHS34 + N[2]*crLHS52 - N[2] + crLHS22*crLHS59 - crLHS22*crLHS60); -const double crLHS127 = pow(DN(2,1), 2); +const double crLHS127 = DN(2,1)*DN(2,1); const double crLHS128 = gauss_weight*(N[2] + crLHS17*(1.0*crLHS59 + 1.0*crLHS60 + 1.0*crLHS61)); rLHS(0,0)+=gauss_weight*(DN(0,0)*crLHS0 + DN(0,1)*crLHS2 + crLHS26 + crLHS3*crLHS9); rLHS(0,1)+=gauss_weight*(DN(0,0)*crLHS27 + DN(0,1)*crLHS29 + crLHS31); @@ -519,22 +519,22 @@ const double crLHS1 = C(0,3)*DN(0,0); const double crLHS2 = C(3,3)*DN(0,1) + C(3,5)*DN(0,2) + crLHS1; const double crLHS3 = C(0,5)*DN(0,0); const double crLHS4 = C(3,5)*DN(0,1) + C(5,5)*DN(0,2) + crLHS3; -const double crLHS5 = pow(DN(0,0), 2); +const double crLHS5 = DN(0,0)*DN(0,0); const double crLHS6 = sigma*stab_c3; const double crLHS7 = N[0]*rho[0] + N[1]*rho[1] + N[2]*rho[2] + N[3]*rho[3]; const double crLHS8 = N[0]*vconv(0,0) + N[1]*vconv(1,0) + N[2]*vconv(2,0) + N[3]*vconv(3,0); const double crLHS9 = N[0]*vconv(0,1) + N[1]*vconv(1,1) + N[2]*vconv(2,1) + N[3]*vconv(3,1); const double crLHS10 = N[0]*vconv(0,2) + N[1]*vconv(1,2) + N[2]*vconv(2,2) + N[3]*vconv(3,2); -const double crLHS11 = crLHS7*stab_c2*sqrt(pow(crLHS10, 2) + pow(crLHS8, 2) + pow(crLHS9, 2)); -const double crLHS12 = mu + (crLHS11*h + crLHS6)/stab_c1; -const double crLHS13 = pow(N[0], 2); +const double crLHS11 = crLHS7*stab_c2*sqrt(crLHS10*crLHS10 + crLHS8*crLHS8 + crLHS9*crLHS9); +const double crLHS12 = mu + (crLHS11*h + crLHS6)*1.0/stab_c1; +const double crLHS13 = N[0]*N[0]; const double crLHS14 = crLHS7*(DN(0,0)*crLHS8 + DN(0,1)*crLHS9 + DN(0,2)*crLHS10); const double crLHS15 = bdf0*crLHS7; const double crLHS16 = N[0]*sigma; const double crLHS17 = N[0]*crLHS15; const double crLHS18 = crLHS14 + crLHS16 + crLHS17; -const double crLHS19 = pow(h, -2); -const double crLHS20 = 1.0/(crLHS11/h + crLHS19*crLHS6 + crLHS19*mu*stab_c1 + crLHS7*dyn_tau/dt); +const double crLHS19 = 1.0/(h*h); +const double crLHS20 = 1.0/(crLHS11*1.0/h + crLHS19*crLHS6 + crLHS19*mu*stab_c1 + crLHS7*dyn_tau*1.0/dt); const double crLHS21 = 1.0*crLHS14; const double crLHS22 = crLHS20*crLHS21; const double crLHS23 = 1.0*crLHS16; @@ -558,7 +558,7 @@ const double crLHS40 = C(2,3)*DN(0,2) + crLHS33 + crLHS39; const double crLHS41 = C(2,5)*DN(0,2); const double crLHS42 = C(4,5)*DN(0,1) + C(5,5)*DN(0,0) + crLHS41; const double crLHS43 = DN(0,2)*crLHS36; -const double crLHS44 = bdf0/(crLHS7*pow(N[0]*c[0] + N[1]*c[1] + N[2]*c[2] + N[3]*c[3], 2)); +const double crLHS44 = bdf0*1.0/crLHS7/pow(N[0]*c[0] + N[1]*c[1] + N[2]*c[2] + N[3]*c[3], 2); const double crLHS45 = N[0]*crLHS44; const double crLHS46 = crLHS25*crLHS27; const double crLHS47 = gauss_weight*(N[0]*crLHS46 - N[0] + crLHS12*crLHS45 + crLHS22 - crLHS24); @@ -652,7 +652,7 @@ const double crLHS134 = C(0,4)*DN(0,0) + crLHS34 + crLHS39; const double crLHS135 = C(1,1)*DN(0,1) + C(1,3)*DN(0,0) + C(1,4)*DN(0,2); const double crLHS136 = C(1,4)*DN(0,1); const double crLHS137 = C(3,4)*DN(0,0) + C(4,4)*DN(0,2) + crLHS136; -const double crLHS138 = pow(DN(0,1), 2); +const double crLHS138 = DN(0,1)*DN(0,1); const double crLHS139 = C(1,2)*DN(0,2) + C(1,5)*DN(0,0) + crLHS136; const double crLHS140 = C(2,4)*DN(0,2); const double crLHS141 = C(4,4)*DN(0,1) + C(4,5)*DN(0,0) + crLHS140; @@ -703,7 +703,7 @@ const double crLHS185 = DN(3,1)*N[0]; const double crLHS186 = C(0,2)*DN(0,0) + C(2,3)*DN(0,1) + crLHS41; const double crLHS187 = C(1,2)*DN(0,1) + C(2,3)*DN(0,0) + crLHS140; const double crLHS188 = C(2,2)*DN(0,2) + C(2,4)*DN(0,1) + C(2,5)*DN(0,0); -const double crLHS189 = pow(DN(0,2), 2); +const double crLHS189 = DN(0,2)*DN(0,2); const double crLHS190 = C(0,2)*DN(1,0) + C(2,3)*DN(1,1) + crLHS71; const double crLHS191 = DN(0,2)*crLHS12; const double crLHS192 = DN(1,0)*crLHS191; @@ -740,8 +740,8 @@ const double crLHS222 = crLHS25*crLHS55; const double crLHS223 = crLHS25*crLHS56; const double crLHS224 = N[1]*crLHS27; const double crLHS225 = N[1]*crLHS14 + crLHS18*crLHS222 - crLHS18*crLHS223 + crLHS224*crLHS26; -const double crLHS226 = pow(DN(1,0), 2); -const double crLHS227 = pow(N[1], 2); +const double crLHS226 = DN(1,0)*DN(1,0); +const double crLHS227 = N[1]*N[1]; const double crLHS228 = N[1]*crLHS55 + crLHS15*crLHS227 + crLHS224*crLHS59 + crLHS227*sigma + crLHS55*crLHS59 - crLHS56*crLHS59; const double crLHS229 = DN(1,0)*crLHS12; const double crLHS230 = DN(1,1)*crLHS229; @@ -763,7 +763,7 @@ const double crLHS245 = DN(3,2)*crLHS229; const double crLHS246 = DN(1,0)*N[3]; const double crLHS247 = DN(3,0)*N[1]; const double crLHS248 = crLHS225 + crLHS53; -const double crLHS249 = pow(DN(1,1), 2); +const double crLHS249 = DN(1,1)*DN(1,1); const double crLHS250 = DN(1,1)*crLHS12; const double crLHS251 = DN(1,2)*crLHS250; const double crLHS252 = DN(2,0)*crLHS250; @@ -778,7 +778,7 @@ const double crLHS260 = crLHS241 + crLHS243; const double crLHS261 = DN(3,2)*crLHS250; const double crLHS262 = DN(1,1)*N[3]; const double crLHS263 = DN(3,1)*N[1]; -const double crLHS264 = pow(DN(1,2), 2); +const double crLHS264 = DN(1,2)*DN(1,2); const double crLHS265 = DN(1,2)*crLHS12; const double crLHS266 = DN(2,0)*crLHS265; const double crLHS267 = DN(2,1)*crLHS265; @@ -799,8 +799,8 @@ const double crLHS281 = gauss_weight*(DN(3,0)*crLHS277 + DN(3,1)*crLHS278 + DN(3 const double crLHS282 = N[2]*crLHS27; const double crLHS283 = N[2]*crLHS14 + crLHS26*crLHS282 + crLHS26*crLHS84 - crLHS26*crLHS85; const double crLHS284 = N[2]*crLHS55 + crLHS282*crLHS59 + crLHS59*crLHS84 - crLHS59*crLHS85; -const double crLHS285 = pow(DN(2,0), 2); -const double crLHS286 = pow(N[2], 2); +const double crLHS285 = DN(2,0)*DN(2,0); +const double crLHS286 = N[2]*N[2]; const double crLHS287 = N[2]*crLHS84 + crLHS15*crLHS286 + crLHS282*crLHS88 + crLHS286*sigma + crLHS84*crLHS88 - crLHS85*crLHS88; const double crLHS288 = DN(2,0)*crLHS12; const double crLHS289 = DN(2,1)*crLHS288; @@ -818,7 +818,7 @@ const double crLHS300 = DN(2,0)*N[3]; const double crLHS301 = DN(3,0)*N[2]; const double crLHS302 = crLHS283 + crLHS82; const double crLHS303 = crLHS234 + crLHS284; -const double crLHS304 = pow(DN(2,1), 2); +const double crLHS304 = DN(2,1)*DN(2,1); const double crLHS305 = DN(2,1)*crLHS12; const double crLHS306 = DN(2,2)*crLHS305; const double crLHS307 = DN(3,0)*crLHS305; @@ -827,7 +827,7 @@ const double crLHS309 = crLHS295 + crLHS297; const double crLHS310 = DN(3,2)*crLHS305; const double crLHS311 = DN(2,1)*N[3]; const double crLHS312 = DN(3,1)*N[2]; -const double crLHS313 = pow(DN(2,2), 2); +const double crLHS313 = DN(2,2)*DN(2,2); const double crLHS314 = DN(2,2)*crLHS12; const double crLHS315 = DN(3,0)*crLHS314; const double crLHS316 = DN(3,1)*crLHS314; @@ -843,8 +843,8 @@ const double crLHS325 = N[3]*crLHS27; const double crLHS326 = N[3]*crLHS14 + crLHS112*crLHS26 - crLHS113*crLHS26 + crLHS26*crLHS325; const double crLHS327 = N[3]*crLHS55 + crLHS112*crLHS59 - crLHS113*crLHS59 + crLHS325*crLHS59; const double crLHS328 = N[3]*crLHS84 + crLHS112*crLHS88 - crLHS113*crLHS88 + crLHS325*crLHS88; -const double crLHS329 = pow(DN(3,0), 2); -const double crLHS330 = pow(N[3], 2); +const double crLHS329 = DN(3,0)*DN(3,0); +const double crLHS330 = N[3]*N[3]; const double crLHS331 = N[3]*crLHS112 + crLHS112*crLHS116 - crLHS113*crLHS116 + crLHS116*crLHS325 + crLHS15*crLHS330 + crLHS330*sigma; const double crLHS332 = DN(3,0)*crLHS12; const double crLHS333 = DN(3,1)*crLHS332; @@ -853,9 +853,9 @@ const double crLHS335 = gauss_weight*(N[3]*crLHS46 + N[3]*crLHS75 - N[3] + crLHS const double crLHS336 = crLHS110 + crLHS326; const double crLHS337 = crLHS241 + crLHS327; const double crLHS338 = crLHS295 + crLHS328; -const double crLHS339 = pow(DN(3,1), 2); +const double crLHS339 = DN(3,1)*DN(3,1); const double crLHS340 = DN(3,1)*DN(3,2)*crLHS12; -const double crLHS341 = pow(DN(3,2), 2); +const double crLHS341 = DN(3,2)*DN(3,2); const double crLHS342 = gauss_weight*(N[3] + crLHS20*(1.0*crLHS112 + 1.0*crLHS113 + 1.0*crLHS114)); rLHS(0,0)+=gauss_weight*(DN(0,0)*crLHS0 + DN(0,1)*crLHS2 + DN(0,2)*crLHS4 + crLHS12*crLHS5 + crLHS29); rLHS(0,1)+=gauss_weight*(DN(0,0)*crLHS30 + DN(0,1)*crLHS32 + DN(0,2)*crLHS35 + crLHS37); @@ -1141,6 +1141,7 @@ void WeaklyCompressibleNavierStokes>::Co const BoundedMatrix& vmesh = rData.MeshVelocity; const BoundedMatrix vconv = v - vmesh; const BoundedMatrix& f = rData.BodyForce; + const BoundedMatrix& r_v_sol_frac = rData.SolidFractionVelocity; const array_1d& p = rData.Pressure; const array_1d& pn = rData.Pressure_OldStep1; const array_1d& pnn = rData.Pressure_OldStep2; @@ -1158,49 +1159,61 @@ void WeaklyCompressibleNavierStokes>::Co // Assemble RHS contribution const double gauss_weight = rData.Weight; const double crRHS0 = N[0]*p[0] + N[1]*p[1] + N[2]*p[2]; -const double crRHS1 = sigma*(N[0]*v(0,0) + N[1]*v(1,0) + N[2]*v(2,0)); -const double crRHS2 = N[0]*rho[0] + N[1]*rho[1] + N[2]*rho[2]; -const double crRHS3 = crRHS2*(N[0]*f(0,0) + N[1]*f(1,0) + N[2]*f(2,0)); -const double crRHS4 = crRHS2*(N[0]*(bdf0*v(0,0) + bdf1*vn(0,0) + bdf2*vnn(0,0)) + N[1]*(bdf0*v(1,0) + bdf1*vn(1,0) + bdf2*vnn(1,0)) + N[2]*(bdf0*v(2,0) + bdf1*vn(2,0) + bdf2*vnn(2,0))); -const double crRHS5 = DN(0,0)*v(0,0) + DN(1,0)*v(1,0) + DN(2,0)*v(2,0); -const double crRHS6 = N[0]*vconv(0,0) + N[1]*vconv(1,0) + N[2]*vconv(2,0); -const double crRHS7 = N[0]*vconv(0,1) + N[1]*vconv(1,1) + N[2]*vconv(2,1); -const double crRHS8 = crRHS2*(crRHS5*crRHS6 + crRHS7*(DN(0,1)*v(0,0) + DN(1,1)*v(1,0) + DN(2,1)*v(2,0))); -const double crRHS9 = sigma*stab_c3; -const double crRHS10 = crRHS2*stab_c2*sqrt(pow(crRHS6, 2) + pow(crRHS7, 2)); -const double crRHS11 = 1.0/crRHS2; -const double crRHS12 = crRHS11*(crRHS6*(DN(0,0)*rho[0] + DN(1,0)*rho[1] + DN(2,0)*rho[2]) + crRHS7*(DN(0,1)*rho[0] + DN(1,1)*rho[1] + DN(2,1)*rho[2])); -const double crRHS13 = crRHS11*(N[0]*(bdf0*p[0] + bdf1*pn[0] + bdf2*pnn[0]) + N[1]*(bdf0*p[1] + bdf1*pn[1] + bdf2*pnn[1]) + N[2]*(bdf0*p[2] + bdf1*pn[2] + bdf2*pnn[2]))/pow(N[0]*c[0] + N[1]*c[1] + N[2]*c[2], 2); -const double crRHS14 = DN(0,1)*v(0,1) + DN(1,1)*v(1,1) + DN(2,1)*v(2,1); -const double crRHS15 = crRHS14 + crRHS5; -const double crRHS16 = (mu + (crRHS10*h + crRHS9)/stab_c1)*(crRHS12 + crRHS13 + crRHS15); -const double crRHS17 = pow(h, -2); -const double crRHS18 = 1.0/(crRHS10/h + crRHS17*crRHS9 + crRHS17*mu*stab_c1 + crRHS2*dyn_tau/dt); -const double crRHS19 = crRHS18*(DN(0,0)*p[0] + DN(1,0)*p[1] + DN(2,0)*p[2] + crRHS1 - crRHS3 + crRHS4 + crRHS8); -const double crRHS20 = N[0]*sigma; -const double crRHS21 = crRHS2*(DN(0,0)*vconv(0,0) + DN(0,1)*vconv(0,1) + DN(1,0)*vconv(1,0) + DN(1,1)*vconv(1,1) + DN(2,0)*vconv(2,0) + DN(2,1)*vconv(2,1)); -const double crRHS22 = N[0]*crRHS21; -const double crRHS23 = crRHS2*(DN(0,0)*crRHS6 + DN(0,1)*crRHS7); -const double crRHS24 = sigma*(N[0]*v(0,1) + N[1]*v(1,1) + N[2]*v(2,1)); -const double crRHS25 = crRHS2*(N[0]*f(0,1) + N[1]*f(1,1) + N[2]*f(2,1)); -const double crRHS26 = crRHS2*(N[0]*(bdf0*v(0,1) + bdf1*vn(0,1) + bdf2*vnn(0,1)) + N[1]*(bdf0*v(1,1) + bdf1*vn(1,1) + bdf2*vnn(1,1)) + N[2]*(bdf0*v(2,1) + bdf1*vn(2,1) + bdf2*vnn(2,1))); -const double crRHS27 = crRHS2*(crRHS14*crRHS7 + crRHS6*(DN(0,0)*v(0,1) + DN(1,0)*v(1,1) + DN(2,0)*v(2,1))); -const double crRHS28 = crRHS18*(DN(0,1)*p[0] + DN(1,1)*p[1] + DN(2,1)*p[2] + crRHS24 - crRHS25 + crRHS26 + crRHS27); -const double crRHS29 = N[1]*sigma; -const double crRHS30 = N[1]*crRHS21; -const double crRHS31 = crRHS2*(DN(1,0)*crRHS6 + DN(1,1)*crRHS7); -const double crRHS32 = N[2]*sigma; -const double crRHS33 = N[2]*crRHS21; -const double crRHS34 = crRHS2*(DN(2,0)*crRHS6 + DN(2,1)*crRHS7); -rRHS[0]+=-gauss_weight*(-DN(0,0)*crRHS0 + DN(0,0)*crRHS16 + DN(0,0)*stress[0] + DN(0,1)*stress[2] + N[0]*crRHS1 - N[0]*crRHS3 + N[0]*crRHS4 + N[0]*crRHS8 - crRHS19*crRHS20 + crRHS19*crRHS22 + crRHS19*crRHS23); -rRHS[1]+=-gauss_weight*(DN(0,0)*stress[2] - DN(0,1)*crRHS0 + DN(0,1)*crRHS16 + DN(0,1)*stress[1] + N[0]*crRHS24 - N[0]*crRHS25 + N[0]*crRHS26 + N[0]*crRHS27 - crRHS20*crRHS28 + crRHS22*crRHS28 + crRHS23*crRHS28); -rRHS[2]+=-gauss_weight*(DN(0,0)*crRHS19 + DN(0,1)*crRHS28 + N[0]*crRHS12 + N[0]*crRHS13 + N[0]*crRHS15); -rRHS[3]+=-gauss_weight*(-DN(1,0)*crRHS0 + DN(1,0)*crRHS16 + DN(1,0)*stress[0] + DN(1,1)*stress[2] + N[1]*crRHS1 - N[1]*crRHS3 + N[1]*crRHS4 + N[1]*crRHS8 - crRHS19*crRHS29 + crRHS19*crRHS30 + crRHS19*crRHS31); -rRHS[4]+=-gauss_weight*(DN(1,0)*stress[2] - DN(1,1)*crRHS0 + DN(1,1)*crRHS16 + DN(1,1)*stress[1] + N[1]*crRHS24 - N[1]*crRHS25 + N[1]*crRHS26 + N[1]*crRHS27 - crRHS28*crRHS29 + crRHS28*crRHS30 + crRHS28*crRHS31); -rRHS[5]+=-gauss_weight*(DN(1,0)*crRHS19 + DN(1,1)*crRHS28 + N[1]*crRHS12 + N[1]*crRHS13 + N[1]*crRHS15); -rRHS[6]+=-gauss_weight*(-DN(2,0)*crRHS0 + DN(2,0)*crRHS16 + DN(2,0)*stress[0] + DN(2,1)*stress[2] + N[2]*crRHS1 - N[2]*crRHS3 + N[2]*crRHS4 + N[2]*crRHS8 - crRHS19*crRHS32 + crRHS19*crRHS33 + crRHS19*crRHS34); -rRHS[7]+=-gauss_weight*(DN(2,0)*stress[2] - DN(2,1)*crRHS0 + DN(2,1)*crRHS16 + DN(2,1)*stress[1] + N[2]*crRHS24 - N[2]*crRHS25 + N[2]*crRHS26 + N[2]*crRHS27 - crRHS28*crRHS32 + crRHS28*crRHS33 + crRHS28*crRHS34); -rRHS[8]+=-gauss_weight*(DN(2,0)*crRHS19 + DN(2,1)*crRHS28 + N[2]*crRHS12 + N[2]*crRHS13 + N[2]*crRHS15); +const double crRHS1 = N[0]*rho[0] + N[1]*rho[1] + N[2]*rho[2]; +const double crRHS2 = crRHS1*(N[0]*f(0,0) + N[1]*f(1,0) + N[2]*f(2,0)); +const double crRHS3 = N[0]*r_v_sol_frac(0,0); +const double crRHS4 = N[1]*r_v_sol_frac(1,0); +const double crRHS5 = N[2]*r_v_sol_frac(2,0); +const double crRHS6 = N[0]*v(0,0); +const double crRHS7 = N[1]*v(1,0); +const double crRHS8 = N[2]*v(2,0); +const double crRHS9 = crRHS3 + crRHS4 + crRHS5 - crRHS6 - crRHS7 - crRHS8; +const double crRHS10 = N[0]*sigma; +const double crRHS11 = crRHS1*(N[0]*(bdf0*v(0,0) + bdf1*vn(0,0) + bdf2*vnn(0,0)) + N[1]*(bdf0*v(1,0) + bdf1*vn(1,0) + bdf2*vnn(1,0)) + N[2]*(bdf0*v(2,0) + bdf1*vn(2,0) + bdf2*vnn(2,0))); +const double crRHS12 = DN(0,0)*v(0,0) + DN(1,0)*v(1,0) + DN(2,0)*v(2,0); +const double crRHS13 = N[0]*vconv(0,0) + N[1]*vconv(1,0) + N[2]*vconv(2,0); +const double crRHS14 = N[0]*vconv(0,1) + N[1]*vconv(1,1) + N[2]*vconv(2,1); +const double crRHS15 = crRHS1*(crRHS12*crRHS13 + crRHS14*(DN(0,1)*v(0,0) + DN(1,1)*v(1,0) + DN(2,1)*v(2,0))); +const double crRHS16 = sigma*stab_c3; +const double crRHS17 = crRHS1*stab_c2*sqrt(crRHS13*crRHS13 + crRHS14*crRHS14); +const double crRHS18 = 1.0/crRHS1; +const double crRHS19 = crRHS18*(crRHS13*(DN(0,0)*rho[0] + DN(1,0)*rho[1] + DN(2,0)*rho[2]) + crRHS14*(DN(0,1)*rho[0] + DN(1,1)*rho[1] + DN(2,1)*rho[2])); +const double crRHS20 = crRHS18*(N[0]*(bdf0*p[0] + bdf1*pn[0] + bdf2*pnn[0]) + N[1]*(bdf0*p[1] + bdf1*pn[1] + bdf2*pnn[1]) + N[2]*(bdf0*p[2] + bdf1*pn[2] + bdf2*pnn[2]))/pow(N[0]*c[0] + N[1]*c[1] + N[2]*c[2], 2); +const double crRHS21 = DN(0,1)*v(0,1) + DN(1,1)*v(1,1) + DN(2,1)*v(2,1); +const double crRHS22 = crRHS12 + crRHS21; +const double crRHS23 = (crRHS19 + crRHS20 + crRHS22)*(mu + (crRHS16 + crRHS17*h)*1.0/stab_c1); +const double crRHS24 = 1.0/(h*h); +const double crRHS25 = 1.0*1.0/(crRHS1*dyn_tau*1.0/dt + crRHS16*crRHS24 + crRHS17*1.0/h + crRHS24*mu*stab_c1); +const double crRHS26 = crRHS25*(DN(0,0)*p[0] + DN(1,0)*p[1] + DN(2,0)*p[2] + crRHS11 + crRHS15 - crRHS2 + sigma*(-crRHS3 - crRHS4 - crRHS5 + crRHS6 + crRHS7 + crRHS8)); +const double crRHS27 = crRHS1*(DN(0,0)*vconv(0,0) + DN(0,1)*vconv(0,1) + DN(1,0)*vconv(1,0) + DN(1,1)*vconv(1,1) + DN(2,0)*vconv(2,0) + DN(2,1)*vconv(2,1)); +const double crRHS28 = N[0]*crRHS27; +const double crRHS29 = crRHS1*(DN(0,0)*crRHS13 + DN(0,1)*crRHS14); +const double crRHS30 = crRHS1*(N[0]*f(0,1) + N[1]*f(1,1) + N[2]*f(2,1)); +const double crRHS31 = N[0]*r_v_sol_frac(0,1); +const double crRHS32 = N[1]*r_v_sol_frac(1,1); +const double crRHS33 = N[2]*r_v_sol_frac(2,1); +const double crRHS34 = N[0]*v(0,1); +const double crRHS35 = N[1]*v(1,1); +const double crRHS36 = N[2]*v(2,1); +const double crRHS37 = crRHS31 + crRHS32 + crRHS33 - crRHS34 - crRHS35 - crRHS36; +const double crRHS38 = crRHS1*(N[0]*(bdf0*v(0,1) + bdf1*vn(0,1) + bdf2*vnn(0,1)) + N[1]*(bdf0*v(1,1) + bdf1*vn(1,1) + bdf2*vnn(1,1)) + N[2]*(bdf0*v(2,1) + bdf1*vn(2,1) + bdf2*vnn(2,1))); +const double crRHS39 = crRHS1*(crRHS13*(DN(0,0)*v(0,1) + DN(1,0)*v(1,1) + DN(2,0)*v(2,1)) + crRHS14*crRHS21); +const double crRHS40 = crRHS25*(DN(0,1)*p[0] + DN(1,1)*p[1] + DN(2,1)*p[2] - crRHS30 + crRHS38 + crRHS39 + sigma*(-crRHS31 - crRHS32 - crRHS33 + crRHS34 + crRHS35 + crRHS36)); +const double crRHS41 = N[1]*sigma; +const double crRHS42 = N[1]*crRHS27; +const double crRHS43 = crRHS1*(DN(1,0)*crRHS13 + DN(1,1)*crRHS14); +const double crRHS44 = N[2]*sigma; +const double crRHS45 = N[2]*crRHS27; +const double crRHS46 = crRHS1*(DN(2,0)*crRHS13 + DN(2,1)*crRHS14); +rRHS[0]+=-gauss_weight*(-DN(0,0)*crRHS0 + DN(0,0)*crRHS23 + DN(0,0)*stress[0] + DN(0,1)*stress[2] + N[0]*crRHS11 + N[0]*crRHS15 - N[0]*crRHS2 - crRHS10*crRHS26 - crRHS10*crRHS9 + crRHS26*crRHS28 + crRHS26*crRHS29); +rRHS[1]+=-gauss_weight*(DN(0,0)*stress[2] - DN(0,1)*crRHS0 + DN(0,1)*crRHS23 + DN(0,1)*stress[1] - N[0]*crRHS30 + N[0]*crRHS38 + N[0]*crRHS39 - crRHS10*crRHS37 - crRHS10*crRHS40 + crRHS28*crRHS40 + crRHS29*crRHS40); +rRHS[2]+=-gauss_weight*(DN(0,0)*crRHS26 + DN(0,1)*crRHS40 + N[0]*crRHS19 + N[0]*crRHS20 + N[0]*crRHS22); +rRHS[3]+=-gauss_weight*(-DN(1,0)*crRHS0 + DN(1,0)*crRHS23 + DN(1,0)*stress[0] + DN(1,1)*stress[2] + N[1]*crRHS11 + N[1]*crRHS15 - N[1]*crRHS2 - crRHS26*crRHS41 + crRHS26*crRHS42 + crRHS26*crRHS43 - crRHS41*crRHS9); +rRHS[4]+=-gauss_weight*(DN(1,0)*stress[2] - DN(1,1)*crRHS0 + DN(1,1)*crRHS23 + DN(1,1)*stress[1] - N[1]*crRHS30 + N[1]*crRHS38 + N[1]*crRHS39 - crRHS37*crRHS41 - crRHS40*crRHS41 + crRHS40*crRHS42 + crRHS40*crRHS43); +rRHS[5]+=-gauss_weight*(DN(1,0)*crRHS26 + DN(1,1)*crRHS40 + N[1]*crRHS19 + N[1]*crRHS20 + N[1]*crRHS22); +rRHS[6]+=-gauss_weight*(-DN(2,0)*crRHS0 + DN(2,0)*crRHS23 + DN(2,0)*stress[0] + DN(2,1)*stress[2] + N[2]*crRHS11 + N[2]*crRHS15 - N[2]*crRHS2 - crRHS26*crRHS44 + crRHS26*crRHS45 + crRHS26*crRHS46 - crRHS44*crRHS9); +rRHS[7]+=-gauss_weight*(DN(2,0)*stress[2] - DN(2,1)*crRHS0 + DN(2,1)*crRHS23 + DN(2,1)*stress[1] - N[2]*crRHS30 + N[2]*crRHS38 + N[2]*crRHS39 - crRHS37*crRHS44 - crRHS40*crRHS44 + crRHS40*crRHS45 + crRHS40*crRHS46); +rRHS[8]+=-gauss_weight*(DN(2,0)*crRHS26 + DN(2,1)*crRHS40 + N[2]*crRHS19 + N[2]*crRHS20 + N[2]*crRHS22); } @@ -1229,6 +1242,7 @@ void WeaklyCompressibleNavierStokes>::Co const BoundedMatrix& vmesh = rData.MeshVelocity; const BoundedMatrix vconv = v - vmesh; const BoundedMatrix& f = rData.BodyForce; + const BoundedMatrix& r_v_sol_frac = rData.SolidFractionVelocity; const array_1d& p = rData.Pressure; const array_1d& pn = rData.Pressure_OldStep1; const array_1d& pnn = rData.Pressure_OldStep2; @@ -1246,66 +1260,90 @@ void WeaklyCompressibleNavierStokes>::Co // Assemble RHS contribution const double gauss_weight = rData.Weight; const double crRHS0 = N[0]*p[0] + N[1]*p[1] + N[2]*p[2] + N[3]*p[3]; -const double crRHS1 = sigma*(N[0]*v(0,0) + N[1]*v(1,0) + N[2]*v(2,0) + N[3]*v(3,0)); -const double crRHS2 = N[0]*rho[0] + N[1]*rho[1] + N[2]*rho[2] + N[3]*rho[3]; -const double crRHS3 = crRHS2*(N[0]*f(0,0) + N[1]*f(1,0) + N[2]*f(2,0) + N[3]*f(3,0)); -const double crRHS4 = crRHS2*(N[0]*(bdf0*v(0,0) + bdf1*vn(0,0) + bdf2*vnn(0,0)) + N[1]*(bdf0*v(1,0) + bdf1*vn(1,0) + bdf2*vnn(1,0)) + N[2]*(bdf0*v(2,0) + bdf1*vn(2,0) + bdf2*vnn(2,0)) + N[3]*(bdf0*v(3,0) + bdf1*vn(3,0) + bdf2*vnn(3,0))); -const double crRHS5 = DN(0,0)*v(0,0) + DN(1,0)*v(1,0) + DN(2,0)*v(2,0) + DN(3,0)*v(3,0); -const double crRHS6 = N[0]*vconv(0,0) + N[1]*vconv(1,0) + N[2]*vconv(2,0) + N[3]*vconv(3,0); -const double crRHS7 = N[0]*vconv(0,1) + N[1]*vconv(1,1) + N[2]*vconv(2,1) + N[3]*vconv(3,1); -const double crRHS8 = N[0]*vconv(0,2) + N[1]*vconv(1,2) + N[2]*vconv(2,2) + N[3]*vconv(3,2); -const double crRHS9 = crRHS2*(crRHS5*crRHS6 + crRHS7*(DN(0,1)*v(0,0) + DN(1,1)*v(1,0) + DN(2,1)*v(2,0) + DN(3,1)*v(3,0)) + crRHS8*(DN(0,2)*v(0,0) + DN(1,2)*v(1,0) + DN(2,2)*v(2,0) + DN(3,2)*v(3,0))); -const double crRHS10 = sigma*stab_c3; -const double crRHS11 = crRHS2*stab_c2*sqrt(pow(crRHS6, 2) + pow(crRHS7, 2) + pow(crRHS8, 2)); -const double crRHS12 = 1.0/crRHS2; -const double crRHS13 = crRHS12*(crRHS6*(DN(0,0)*rho[0] + DN(1,0)*rho[1] + DN(2,0)*rho[2] + DN(3,0)*rho[3]) + crRHS7*(DN(0,1)*rho[0] + DN(1,1)*rho[1] + DN(2,1)*rho[2] + DN(3,1)*rho[3]) + crRHS8*(DN(0,2)*rho[0] + DN(1,2)*rho[1] + DN(2,2)*rho[2] + DN(3,2)*rho[3])); -const double crRHS14 = crRHS12*(N[0]*(bdf0*p[0] + bdf1*pn[0] + bdf2*pnn[0]) + N[1]*(bdf0*p[1] + bdf1*pn[1] + bdf2*pnn[1]) + N[2]*(bdf0*p[2] + bdf1*pn[2] + bdf2*pnn[2]) + N[3]*(bdf0*p[3] + bdf1*pn[3] + bdf2*pnn[3]))/pow(N[0]*c[0] + N[1]*c[1] + N[2]*c[2] + N[3]*c[3], 2); -const double crRHS15 = DN(0,1)*v(0,1) + DN(1,1)*v(1,1) + DN(2,1)*v(2,1) + DN(3,1)*v(3,1); -const double crRHS16 = DN(0,2)*v(0,2) + DN(1,2)*v(1,2) + DN(2,2)*v(2,2) + DN(3,2)*v(3,2); -const double crRHS17 = crRHS15 + crRHS16 + crRHS5; -const double crRHS18 = (mu + (crRHS10 + crRHS11*h)/stab_c1)*(crRHS13 + crRHS14 + crRHS17); -const double crRHS19 = pow(h, -2); -const double crRHS20 = 1.0/(crRHS10*crRHS19 + crRHS11/h + crRHS19*mu*stab_c1 + crRHS2*dyn_tau/dt); -const double crRHS21 = crRHS20*(DN(0,0)*p[0] + DN(1,0)*p[1] + DN(2,0)*p[2] + DN(3,0)*p[3] + crRHS1 - crRHS3 + crRHS4 + crRHS9); -const double crRHS22 = N[0]*sigma; -const double crRHS23 = crRHS2*(DN(0,0)*vconv(0,0) + DN(0,1)*vconv(0,1) + DN(0,2)*vconv(0,2) + DN(1,0)*vconv(1,0) + DN(1,1)*vconv(1,1) + DN(1,2)*vconv(1,2) + DN(2,0)*vconv(2,0) + DN(2,1)*vconv(2,1) + DN(2,2)*vconv(2,2) + DN(3,0)*vconv(3,0) + DN(3,1)*vconv(3,1) + DN(3,2)*vconv(3,2)); -const double crRHS24 = N[0]*crRHS23; -const double crRHS25 = crRHS2*(DN(0,0)*crRHS6 + DN(0,1)*crRHS7 + DN(0,2)*crRHS8); -const double crRHS26 = sigma*(N[0]*v(0,1) + N[1]*v(1,1) + N[2]*v(2,1) + N[3]*v(3,1)); -const double crRHS27 = crRHS2*(N[0]*f(0,1) + N[1]*f(1,1) + N[2]*f(2,1) + N[3]*f(3,1)); -const double crRHS28 = crRHS2*(N[0]*(bdf0*v(0,1) + bdf1*vn(0,1) + bdf2*vnn(0,1)) + N[1]*(bdf0*v(1,1) + bdf1*vn(1,1) + bdf2*vnn(1,1)) + N[2]*(bdf0*v(2,1) + bdf1*vn(2,1) + bdf2*vnn(2,1)) + N[3]*(bdf0*v(3,1) + bdf1*vn(3,1) + bdf2*vnn(3,1))); -const double crRHS29 = crRHS2*(crRHS15*crRHS7 + crRHS6*(DN(0,0)*v(0,1) + DN(1,0)*v(1,1) + DN(2,0)*v(2,1) + DN(3,0)*v(3,1)) + crRHS8*(DN(0,2)*v(0,1) + DN(1,2)*v(1,1) + DN(2,2)*v(2,1) + DN(3,2)*v(3,1))); -const double crRHS30 = crRHS20*(DN(0,1)*p[0] + DN(1,1)*p[1] + DN(2,1)*p[2] + DN(3,1)*p[3] + crRHS26 - crRHS27 + crRHS28 + crRHS29); -const double crRHS31 = sigma*(N[0]*v(0,2) + N[1]*v(1,2) + N[2]*v(2,2) + N[3]*v(3,2)); -const double crRHS32 = crRHS2*(N[0]*f(0,2) + N[1]*f(1,2) + N[2]*f(2,2) + N[3]*f(3,2)); -const double crRHS33 = crRHS2*(N[0]*(bdf0*v(0,2) + bdf1*vn(0,2) + bdf2*vnn(0,2)) + N[1]*(bdf0*v(1,2) + bdf1*vn(1,2) + bdf2*vnn(1,2)) + N[2]*(bdf0*v(2,2) + bdf1*vn(2,2) + bdf2*vnn(2,2)) + N[3]*(bdf0*v(3,2) + bdf1*vn(3,2) + bdf2*vnn(3,2))); -const double crRHS34 = crRHS2*(crRHS16*crRHS8 + crRHS6*(DN(0,0)*v(0,2) + DN(1,0)*v(1,2) + DN(2,0)*v(2,2) + DN(3,0)*v(3,2)) + crRHS7*(DN(0,1)*v(0,2) + DN(1,1)*v(1,2) + DN(2,1)*v(2,2) + DN(3,1)*v(3,2))); -const double crRHS35 = crRHS20*(DN(0,2)*p[0] + DN(1,2)*p[1] + DN(2,2)*p[2] + DN(3,2)*p[3] + crRHS31 - crRHS32 + crRHS33 + crRHS34); -const double crRHS36 = N[1]*sigma; -const double crRHS37 = N[1]*crRHS23; -const double crRHS38 = crRHS2*(DN(1,0)*crRHS6 + DN(1,1)*crRHS7 + DN(1,2)*crRHS8); -const double crRHS39 = N[2]*sigma; -const double crRHS40 = N[2]*crRHS23; -const double crRHS41 = crRHS2*(DN(2,0)*crRHS6 + DN(2,1)*crRHS7 + DN(2,2)*crRHS8); -const double crRHS42 = N[3]*sigma; -const double crRHS43 = N[3]*crRHS23; -const double crRHS44 = crRHS2*(DN(3,0)*crRHS6 + DN(3,1)*crRHS7 + DN(3,2)*crRHS8); -rRHS[0]+=-gauss_weight*(-DN(0,0)*crRHS0 + DN(0,0)*crRHS18 + DN(0,0)*stress[0] + DN(0,1)*stress[3] + DN(0,2)*stress[5] + N[0]*crRHS1 - N[0]*crRHS3 + N[0]*crRHS4 + N[0]*crRHS9 - crRHS21*crRHS22 + crRHS21*crRHS24 + crRHS21*crRHS25); -rRHS[1]+=-gauss_weight*(DN(0,0)*stress[3] - DN(0,1)*crRHS0 + DN(0,1)*crRHS18 + DN(0,1)*stress[1] + DN(0,2)*stress[4] + N[0]*crRHS26 - N[0]*crRHS27 + N[0]*crRHS28 + N[0]*crRHS29 - crRHS22*crRHS30 + crRHS24*crRHS30 + crRHS25*crRHS30); -rRHS[2]+=-gauss_weight*(DN(0,0)*stress[5] + DN(0,1)*stress[4] - DN(0,2)*crRHS0 + DN(0,2)*crRHS18 + DN(0,2)*stress[2] + N[0]*crRHS31 - N[0]*crRHS32 + N[0]*crRHS33 + N[0]*crRHS34 - crRHS22*crRHS35 + crRHS24*crRHS35 + crRHS25*crRHS35); -rRHS[3]+=-gauss_weight*(DN(0,0)*crRHS21 + DN(0,1)*crRHS30 + DN(0,2)*crRHS35 + N[0]*crRHS13 + N[0]*crRHS14 + N[0]*crRHS17); -rRHS[4]+=-gauss_weight*(-DN(1,0)*crRHS0 + DN(1,0)*crRHS18 + DN(1,0)*stress[0] + DN(1,1)*stress[3] + DN(1,2)*stress[5] + N[1]*crRHS1 - N[1]*crRHS3 + N[1]*crRHS4 + N[1]*crRHS9 - crRHS21*crRHS36 + crRHS21*crRHS37 + crRHS21*crRHS38); -rRHS[5]+=-gauss_weight*(DN(1,0)*stress[3] - DN(1,1)*crRHS0 + DN(1,1)*crRHS18 + DN(1,1)*stress[1] + DN(1,2)*stress[4] + N[1]*crRHS26 - N[1]*crRHS27 + N[1]*crRHS28 + N[1]*crRHS29 - crRHS30*crRHS36 + crRHS30*crRHS37 + crRHS30*crRHS38); -rRHS[6]+=-gauss_weight*(DN(1,0)*stress[5] + DN(1,1)*stress[4] - DN(1,2)*crRHS0 + DN(1,2)*crRHS18 + DN(1,2)*stress[2] + N[1]*crRHS31 - N[1]*crRHS32 + N[1]*crRHS33 + N[1]*crRHS34 - crRHS35*crRHS36 + crRHS35*crRHS37 + crRHS35*crRHS38); -rRHS[7]+=-gauss_weight*(DN(1,0)*crRHS21 + DN(1,1)*crRHS30 + DN(1,2)*crRHS35 + N[1]*crRHS13 + N[1]*crRHS14 + N[1]*crRHS17); -rRHS[8]+=-gauss_weight*(-DN(2,0)*crRHS0 + DN(2,0)*crRHS18 + DN(2,0)*stress[0] + DN(2,1)*stress[3] + DN(2,2)*stress[5] + N[2]*crRHS1 - N[2]*crRHS3 + N[2]*crRHS4 + N[2]*crRHS9 - crRHS21*crRHS39 + crRHS21*crRHS40 + crRHS21*crRHS41); -rRHS[9]+=-gauss_weight*(DN(2,0)*stress[3] - DN(2,1)*crRHS0 + DN(2,1)*crRHS18 + DN(2,1)*stress[1] + DN(2,2)*stress[4] + N[2]*crRHS26 - N[2]*crRHS27 + N[2]*crRHS28 + N[2]*crRHS29 - crRHS30*crRHS39 + crRHS30*crRHS40 + crRHS30*crRHS41); -rRHS[10]+=-gauss_weight*(DN(2,0)*stress[5] + DN(2,1)*stress[4] - DN(2,2)*crRHS0 + DN(2,2)*crRHS18 + DN(2,2)*stress[2] + N[2]*crRHS31 - N[2]*crRHS32 + N[2]*crRHS33 + N[2]*crRHS34 - crRHS35*crRHS39 + crRHS35*crRHS40 + crRHS35*crRHS41); -rRHS[11]+=-gauss_weight*(DN(2,0)*crRHS21 + DN(2,1)*crRHS30 + DN(2,2)*crRHS35 + N[2]*crRHS13 + N[2]*crRHS14 + N[2]*crRHS17); -rRHS[12]+=-gauss_weight*(-DN(3,0)*crRHS0 + DN(3,0)*crRHS18 + DN(3,0)*stress[0] + DN(3,1)*stress[3] + DN(3,2)*stress[5] + N[3]*crRHS1 - N[3]*crRHS3 + N[3]*crRHS4 + N[3]*crRHS9 - crRHS21*crRHS42 + crRHS21*crRHS43 + crRHS21*crRHS44); -rRHS[13]+=-gauss_weight*(DN(3,0)*stress[3] - DN(3,1)*crRHS0 + DN(3,1)*crRHS18 + DN(3,1)*stress[1] + DN(3,2)*stress[4] + N[3]*crRHS26 - N[3]*crRHS27 + N[3]*crRHS28 + N[3]*crRHS29 - crRHS30*crRHS42 + crRHS30*crRHS43 + crRHS30*crRHS44); -rRHS[14]+=-gauss_weight*(DN(3,0)*stress[5] + DN(3,1)*stress[4] - DN(3,2)*crRHS0 + DN(3,2)*crRHS18 + DN(3,2)*stress[2] + N[3]*crRHS31 - N[3]*crRHS32 + N[3]*crRHS33 + N[3]*crRHS34 - crRHS35*crRHS42 + crRHS35*crRHS43 + crRHS35*crRHS44); -rRHS[15]+=-gauss_weight*(DN(3,0)*crRHS21 + DN(3,1)*crRHS30 + DN(3,2)*crRHS35 + N[3]*crRHS13 + N[3]*crRHS14 + N[3]*crRHS17); +const double crRHS1 = N[0]*rho[0] + N[1]*rho[1] + N[2]*rho[2] + N[3]*rho[3]; +const double crRHS2 = crRHS1*(N[0]*f(0,0) + N[1]*f(1,0) + N[2]*f(2,0) + N[3]*f(3,0)); +const double crRHS3 = N[0]*r_v_sol_frac(0,0); +const double crRHS4 = N[1]*r_v_sol_frac(1,0); +const double crRHS5 = N[2]*r_v_sol_frac(2,0); +const double crRHS6 = N[3]*r_v_sol_frac(3,0); +const double crRHS7 = N[0]*v(0,0); +const double crRHS8 = N[1]*v(1,0); +const double crRHS9 = N[2]*v(2,0); +const double crRHS10 = N[3]*v(3,0); +const double crRHS11 = -crRHS10 + crRHS3 + crRHS4 + crRHS5 + crRHS6 - crRHS7 - crRHS8 - crRHS9; +const double crRHS12 = N[0]*sigma; +const double crRHS13 = crRHS1*(N[0]*(bdf0*v(0,0) + bdf1*vn(0,0) + bdf2*vnn(0,0)) + N[1]*(bdf0*v(1,0) + bdf1*vn(1,0) + bdf2*vnn(1,0)) + N[2]*(bdf0*v(2,0) + bdf1*vn(2,0) + bdf2*vnn(2,0)) + N[3]*(bdf0*v(3,0) + bdf1*vn(3,0) + bdf2*vnn(3,0))); +const double crRHS14 = DN(0,0)*v(0,0) + DN(1,0)*v(1,0) + DN(2,0)*v(2,0) + DN(3,0)*v(3,0); +const double crRHS15 = N[0]*vconv(0,0) + N[1]*vconv(1,0) + N[2]*vconv(2,0) + N[3]*vconv(3,0); +const double crRHS16 = N[0]*vconv(0,1) + N[1]*vconv(1,1) + N[2]*vconv(2,1) + N[3]*vconv(3,1); +const double crRHS17 = N[0]*vconv(0,2) + N[1]*vconv(1,2) + N[2]*vconv(2,2) + N[3]*vconv(3,2); +const double crRHS18 = crRHS1*(crRHS14*crRHS15 + crRHS16*(DN(0,1)*v(0,0) + DN(1,1)*v(1,0) + DN(2,1)*v(2,0) + DN(3,1)*v(3,0)) + crRHS17*(DN(0,2)*v(0,0) + DN(1,2)*v(1,0) + DN(2,2)*v(2,0) + DN(3,2)*v(3,0))); +const double crRHS19 = sigma*stab_c3; +const double crRHS20 = crRHS1*stab_c2*sqrt(crRHS15*crRHS15 + crRHS16*crRHS16 + crRHS17*crRHS17); +const double crRHS21 = 1.0/crRHS1; +const double crRHS22 = crRHS21*(crRHS15*(DN(0,0)*rho[0] + DN(1,0)*rho[1] + DN(2,0)*rho[2] + DN(3,0)*rho[3]) + crRHS16*(DN(0,1)*rho[0] + DN(1,1)*rho[1] + DN(2,1)*rho[2] + DN(3,1)*rho[3]) + crRHS17*(DN(0,2)*rho[0] + DN(1,2)*rho[1] + DN(2,2)*rho[2] + DN(3,2)*rho[3])); +const double crRHS23 = crRHS21*(N[0]*(bdf0*p[0] + bdf1*pn[0] + bdf2*pnn[0]) + N[1]*(bdf0*p[1] + bdf1*pn[1] + bdf2*pnn[1]) + N[2]*(bdf0*p[2] + bdf1*pn[2] + bdf2*pnn[2]) + N[3]*(bdf0*p[3] + bdf1*pn[3] + bdf2*pnn[3]))/pow(N[0]*c[0] + N[1]*c[1] + N[2]*c[2] + N[3]*c[3], 2); +const double crRHS24 = DN(0,1)*v(0,1) + DN(1,1)*v(1,1) + DN(2,1)*v(2,1) + DN(3,1)*v(3,1); +const double crRHS25 = DN(0,2)*v(0,2) + DN(1,2)*v(1,2) + DN(2,2)*v(2,2) + DN(3,2)*v(3,2); +const double crRHS26 = crRHS14 + crRHS24 + crRHS25; +const double crRHS27 = (crRHS22 + crRHS23 + crRHS26)*(mu + (crRHS19 + crRHS20*h)*1.0/stab_c1); +const double crRHS28 = 1.0/(h*h); +const double crRHS29 = 1.0*1.0/(crRHS1*dyn_tau*1.0/dt + crRHS19*crRHS28 + crRHS20*1.0/h + crRHS28*mu*stab_c1); +const double crRHS30 = crRHS29*(DN(0,0)*p[0] + DN(1,0)*p[1] + DN(2,0)*p[2] + DN(3,0)*p[3] + crRHS13 + crRHS18 - crRHS2 + sigma*(crRHS10 - crRHS3 - crRHS4 - crRHS5 - crRHS6 + crRHS7 + crRHS8 + crRHS9)); +const double crRHS31 = crRHS1*(DN(0,0)*vconv(0,0) + DN(0,1)*vconv(0,1) + DN(0,2)*vconv(0,2) + DN(1,0)*vconv(1,0) + DN(1,1)*vconv(1,1) + DN(1,2)*vconv(1,2) + DN(2,0)*vconv(2,0) + DN(2,1)*vconv(2,1) + DN(2,2)*vconv(2,2) + DN(3,0)*vconv(3,0) + DN(3,1)*vconv(3,1) + DN(3,2)*vconv(3,2)); +const double crRHS32 = N[0]*crRHS31; +const double crRHS33 = crRHS1*(DN(0,0)*crRHS15 + DN(0,1)*crRHS16 + DN(0,2)*crRHS17); +const double crRHS34 = crRHS1*(N[0]*f(0,1) + N[1]*f(1,1) + N[2]*f(2,1) + N[3]*f(3,1)); +const double crRHS35 = N[0]*r_v_sol_frac(0,1); +const double crRHS36 = N[1]*r_v_sol_frac(1,1); +const double crRHS37 = N[2]*r_v_sol_frac(2,1); +const double crRHS38 = N[3]*r_v_sol_frac(3,1); +const double crRHS39 = N[0]*v(0,1); +const double crRHS40 = N[1]*v(1,1); +const double crRHS41 = N[2]*v(2,1); +const double crRHS42 = N[3]*v(3,1); +const double crRHS43 = crRHS35 + crRHS36 + crRHS37 + crRHS38 - crRHS39 - crRHS40 - crRHS41 - crRHS42; +const double crRHS44 = crRHS1*(N[0]*(bdf0*v(0,1) + bdf1*vn(0,1) + bdf2*vnn(0,1)) + N[1]*(bdf0*v(1,1) + bdf1*vn(1,1) + bdf2*vnn(1,1)) + N[2]*(bdf0*v(2,1) + bdf1*vn(2,1) + bdf2*vnn(2,1)) + N[3]*(bdf0*v(3,1) + bdf1*vn(3,1) + bdf2*vnn(3,1))); +const double crRHS45 = crRHS1*(crRHS15*(DN(0,0)*v(0,1) + DN(1,0)*v(1,1) + DN(2,0)*v(2,1) + DN(3,0)*v(3,1)) + crRHS16*crRHS24 + crRHS17*(DN(0,2)*v(0,1) + DN(1,2)*v(1,1) + DN(2,2)*v(2,1) + DN(3,2)*v(3,1))); +const double crRHS46 = crRHS29*(DN(0,1)*p[0] + DN(1,1)*p[1] + DN(2,1)*p[2] + DN(3,1)*p[3] - crRHS34 + crRHS44 + crRHS45 + sigma*(-crRHS35 - crRHS36 - crRHS37 - crRHS38 + crRHS39 + crRHS40 + crRHS41 + crRHS42)); +const double crRHS47 = crRHS1*(N[0]*f(0,2) + N[1]*f(1,2) + N[2]*f(2,2) + N[3]*f(3,2)); +const double crRHS48 = N[0]*r_v_sol_frac(0,2); +const double crRHS49 = N[1]*r_v_sol_frac(1,2); +const double crRHS50 = N[2]*r_v_sol_frac(2,2); +const double crRHS51 = N[3]*r_v_sol_frac(3,2); +const double crRHS52 = N[0]*v(0,2); +const double crRHS53 = N[1]*v(1,2); +const double crRHS54 = N[2]*v(2,2); +const double crRHS55 = N[3]*v(3,2); +const double crRHS56 = crRHS48 + crRHS49 + crRHS50 + crRHS51 - crRHS52 - crRHS53 - crRHS54 - crRHS55; +const double crRHS57 = crRHS1*(N[0]*(bdf0*v(0,2) + bdf1*vn(0,2) + bdf2*vnn(0,2)) + N[1]*(bdf0*v(1,2) + bdf1*vn(1,2) + bdf2*vnn(1,2)) + N[2]*(bdf0*v(2,2) + bdf1*vn(2,2) + bdf2*vnn(2,2)) + N[3]*(bdf0*v(3,2) + bdf1*vn(3,2) + bdf2*vnn(3,2))); +const double crRHS58 = crRHS1*(crRHS15*(DN(0,0)*v(0,2) + DN(1,0)*v(1,2) + DN(2,0)*v(2,2) + DN(3,0)*v(3,2)) + crRHS16*(DN(0,1)*v(0,2) + DN(1,1)*v(1,2) + DN(2,1)*v(2,2) + DN(3,1)*v(3,2)) + crRHS17*crRHS25); +const double crRHS59 = crRHS29*(DN(0,2)*p[0] + DN(1,2)*p[1] + DN(2,2)*p[2] + DN(3,2)*p[3] - crRHS47 + crRHS57 + crRHS58 + sigma*(-crRHS48 - crRHS49 - crRHS50 - crRHS51 + crRHS52 + crRHS53 + crRHS54 + crRHS55)); +const double crRHS60 = N[1]*sigma; +const double crRHS61 = N[1]*crRHS31; +const double crRHS62 = crRHS1*(DN(1,0)*crRHS15 + DN(1,1)*crRHS16 + DN(1,2)*crRHS17); +const double crRHS63 = N[2]*sigma; +const double crRHS64 = N[2]*crRHS31; +const double crRHS65 = crRHS1*(DN(2,0)*crRHS15 + DN(2,1)*crRHS16 + DN(2,2)*crRHS17); +const double crRHS66 = N[3]*sigma; +const double crRHS67 = N[3]*crRHS31; +const double crRHS68 = crRHS1*(DN(3,0)*crRHS15 + DN(3,1)*crRHS16 + DN(3,2)*crRHS17); +rRHS[0]+=-gauss_weight*(-DN(0,0)*crRHS0 + DN(0,0)*crRHS27 + DN(0,0)*stress[0] + DN(0,1)*stress[3] + DN(0,2)*stress[5] + N[0]*crRHS13 + N[0]*crRHS18 - N[0]*crRHS2 - crRHS11*crRHS12 - crRHS12*crRHS30 + crRHS30*crRHS32 + crRHS30*crRHS33); +rRHS[1]+=-gauss_weight*(DN(0,0)*stress[3] - DN(0,1)*crRHS0 + DN(0,1)*crRHS27 + DN(0,1)*stress[1] + DN(0,2)*stress[4] - N[0]*crRHS34 + N[0]*crRHS44 + N[0]*crRHS45 - crRHS12*crRHS43 - crRHS12*crRHS46 + crRHS32*crRHS46 + crRHS33*crRHS46); +rRHS[2]+=-gauss_weight*(DN(0,0)*stress[5] + DN(0,1)*stress[4] - DN(0,2)*crRHS0 + DN(0,2)*crRHS27 + DN(0,2)*stress[2] - N[0]*crRHS47 + N[0]*crRHS57 + N[0]*crRHS58 - crRHS12*crRHS56 - crRHS12*crRHS59 + crRHS32*crRHS59 + crRHS33*crRHS59); +rRHS[3]+=-gauss_weight*(DN(0,0)*crRHS30 + DN(0,1)*crRHS46 + DN(0,2)*crRHS59 + N[0]*crRHS22 + N[0]*crRHS23 + N[0]*crRHS26); +rRHS[4]+=-gauss_weight*(-DN(1,0)*crRHS0 + DN(1,0)*crRHS27 + DN(1,0)*stress[0] + DN(1,1)*stress[3] + DN(1,2)*stress[5] + N[1]*crRHS13 + N[1]*crRHS18 - N[1]*crRHS2 - crRHS11*crRHS60 - crRHS30*crRHS60 + crRHS30*crRHS61 + crRHS30*crRHS62); +rRHS[5]+=-gauss_weight*(DN(1,0)*stress[3] - DN(1,1)*crRHS0 + DN(1,1)*crRHS27 + DN(1,1)*stress[1] + DN(1,2)*stress[4] - N[1]*crRHS34 + N[1]*crRHS44 + N[1]*crRHS45 - crRHS43*crRHS60 - crRHS46*crRHS60 + crRHS46*crRHS61 + crRHS46*crRHS62); +rRHS[6]+=-gauss_weight*(DN(1,0)*stress[5] + DN(1,1)*stress[4] - DN(1,2)*crRHS0 + DN(1,2)*crRHS27 + DN(1,2)*stress[2] - N[1]*crRHS47 + N[1]*crRHS57 + N[1]*crRHS58 - crRHS56*crRHS60 - crRHS59*crRHS60 + crRHS59*crRHS61 + crRHS59*crRHS62); +rRHS[7]+=-gauss_weight*(DN(1,0)*crRHS30 + DN(1,1)*crRHS46 + DN(1,2)*crRHS59 + N[1]*crRHS22 + N[1]*crRHS23 + N[1]*crRHS26); +rRHS[8]+=-gauss_weight*(-DN(2,0)*crRHS0 + DN(2,0)*crRHS27 + DN(2,0)*stress[0] + DN(2,1)*stress[3] + DN(2,2)*stress[5] + N[2]*crRHS13 + N[2]*crRHS18 - N[2]*crRHS2 - crRHS11*crRHS63 - crRHS30*crRHS63 + crRHS30*crRHS64 + crRHS30*crRHS65); +rRHS[9]+=-gauss_weight*(DN(2,0)*stress[3] - DN(2,1)*crRHS0 + DN(2,1)*crRHS27 + DN(2,1)*stress[1] + DN(2,2)*stress[4] - N[2]*crRHS34 + N[2]*crRHS44 + N[2]*crRHS45 - crRHS43*crRHS63 - crRHS46*crRHS63 + crRHS46*crRHS64 + crRHS46*crRHS65); +rRHS[10]+=-gauss_weight*(DN(2,0)*stress[5] + DN(2,1)*stress[4] - DN(2,2)*crRHS0 + DN(2,2)*crRHS27 + DN(2,2)*stress[2] - N[2]*crRHS47 + N[2]*crRHS57 + N[2]*crRHS58 - crRHS56*crRHS63 - crRHS59*crRHS63 + crRHS59*crRHS64 + crRHS59*crRHS65); +rRHS[11]+=-gauss_weight*(DN(2,0)*crRHS30 + DN(2,1)*crRHS46 + DN(2,2)*crRHS59 + N[2]*crRHS22 + N[2]*crRHS23 + N[2]*crRHS26); +rRHS[12]+=-gauss_weight*(-DN(3,0)*crRHS0 + DN(3,0)*crRHS27 + DN(3,0)*stress[0] + DN(3,1)*stress[3] + DN(3,2)*stress[5] + N[3]*crRHS13 + N[3]*crRHS18 - N[3]*crRHS2 - crRHS11*crRHS66 - crRHS30*crRHS66 + crRHS30*crRHS67 + crRHS30*crRHS68); +rRHS[13]+=-gauss_weight*(DN(3,0)*stress[3] - DN(3,1)*crRHS0 + DN(3,1)*crRHS27 + DN(3,1)*stress[1] + DN(3,2)*stress[4] - N[3]*crRHS34 + N[3]*crRHS44 + N[3]*crRHS45 - crRHS43*crRHS66 - crRHS46*crRHS66 + crRHS46*crRHS67 + crRHS46*crRHS68); +rRHS[14]+=-gauss_weight*(DN(3,0)*stress[5] + DN(3,1)*stress[4] - DN(3,2)*crRHS0 + DN(3,2)*crRHS27 + DN(3,2)*stress[2] - N[3]*crRHS47 + N[3]*crRHS57 + N[3]*crRHS58 - crRHS56*crRHS66 - crRHS59*crRHS66 + crRHS59*crRHS67 + crRHS59*crRHS68); +rRHS[15]+=-gauss_weight*(DN(3,0)*crRHS30 + DN(3,1)*crRHS46 + DN(3,2)*crRHS59 + N[3]*crRHS22 + N[3]*crRHS23 + N[3]*crRHS26); } diff --git a/applications/FluidDynamicsApplication/custom_utilities/weakly_compressible_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_utilities/weakly_compressible_navier_stokes_data.h index 723a6688ebc5..3bda59252f45 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/weakly_compressible_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_utilities/weakly_compressible_navier_stokes_data.h @@ -58,6 +58,7 @@ NodalVectorData Velocity_OldStep1; NodalVectorData Velocity_OldStep2; NodalVectorData MeshVelocity; NodalVectorData BodyForce; +NodalVectorData SolidFractionVelocity; NodalScalarData Pressure; NodalScalarData Pressure_OldStep1; @@ -101,6 +102,7 @@ void Initialize(const Element& rElement, const ProcessInfo& rProcessInfo) overri this->FillFromHistoricalNodalData(Pressure_OldStep1,PRESSURE,r_geometry,1); this->FillFromHistoricalNodalData(Pressure_OldStep2,PRESSURE,r_geometry,2); this->FillFromNonHistoricalNodalData(SoundVelocity, SOUND_VELOCITY, r_geometry); + this->FillFromNonHistoricalNodalData(SolidFractionVelocity, SOLID_FRACTION_VELOCITY, r_geometry); this->FillFromProperties(DynamicViscosity,DYNAMIC_VISCOSITY,r_properties); //TODO: This needs to be retrieved from the EffectiveViscosity of the constitutive law this->FillFromProcessInfo(DeltaTime,DELTA_TIME,rProcessInfo); this->FillFromProcessInfo(DynamicTau,DYNAMIC_TAU,rProcessInfo); @@ -136,6 +138,7 @@ static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) KRATOS_CHECK_VARIABLE_IN_NODAL_DATA(MESH_VELOCITY,r_geometry[i]); KRATOS_CHECK_VARIABLE_IN_NODAL_DATA(BODY_FORCE,r_geometry[i]); KRATOS_CHECK_VARIABLE_IN_NODAL_DATA(PRESSURE,r_geometry[i]); + KRATOS_CHECK_VARIABLE_IN_NODAL_DATA(DENSITY,r_geometry[i]); } return 0; diff --git a/applications/FluidDynamicsApplication/python_scripts/navier_stokes_embedded_solver.py b/applications/FluidDynamicsApplication/python_scripts/navier_stokes_embedded_solver.py index d203cf105fa8..278b0869b0a7 100755 --- a/applications/FluidDynamicsApplication/python_scripts/navier_stokes_embedded_solver.py +++ b/applications/FluidDynamicsApplication/python_scripts/navier_stokes_embedded_solver.py @@ -26,8 +26,8 @@ def __init__(self, formulation_settings): self.condition_name = None self.process_info_data = {} self.element_has_nodal_properties = False - self.historical_nodal_properties_variables_list = [] - self.non_historical_nodal_properties_variables_list = [] + self.historical_nodal_variables_list = [] + self.non_historical_nodal_variables_list = [] if formulation_settings.Has("element_type"): element_type = formulation_settings["element_type"].GetString() @@ -96,8 +96,8 @@ def _SetUpEmbeddedWeaklyCompressibleNavierStokes(self, formulation_settings): self.level_set_type = formulation_settings["level_set_type"].GetString() self.element_integrates_in_time = True self.element_has_nodal_properties = True - self.historical_nodal_properties_variables_list = [KratosMultiphysics.DENSITY] - self.non_historical_nodal_properties_variables_list = [KratosMultiphysics.SOUND_VELOCITY] + self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY] + self.non_historical_nodal_variables_list = [KratosMultiphysics.SOUND_VELOCITY] self.process_info_data[KratosMultiphysics.DYNAMIC_TAU] = formulation_settings["dynamic_tau"].GetDouble() self.process_info_data[KratosMultiphysics.PENALTY_COEFFICIENT] = formulation_settings["penalty_coefficient"].GetDouble() @@ -143,8 +143,8 @@ def _SetUpEmbeddedWeaklyCompressibleNavierStokesDiscontinuous(self, formulation_ self.level_set_type = formulation_settings["level_set_type"].GetString() self.element_integrates_in_time = True self.element_has_nodal_properties = True - self.historical_nodal_properties_variables_list = [KratosMultiphysics.DENSITY] - self.non_historical_nodal_properties_variables_list = [KratosMultiphysics.SOUND_VELOCITY] + self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY] + self.non_historical_nodal_variables_list = [KratosMultiphysics.SOUND_VELOCITY] self.process_info_data[KratosMultiphysics.DYNAMIC_TAU] = formulation_settings["dynamic_tau"].GetDouble() self.process_info_data[KratosMultiphysics.PENALTY_COEFFICIENT] = formulation_settings["penalty_coefficient"].GetDouble() @@ -323,8 +323,8 @@ def __init__(self, model, custom_settings): self.level_set_type = self.embedded_formulation.level_set_type self.element_integrates_in_time = self.embedded_formulation.element_integrates_in_time self.element_has_nodal_properties = self.embedded_formulation.element_has_nodal_properties - self.historical_nodal_properties_variables_list = self.embedded_formulation.historical_nodal_properties_variables_list - self.non_historical_nodal_properties_variables_list = self.embedded_formulation.non_historical_nodal_properties_variables_list + self.historical_nodal_variables_list = self.embedded_formulation.historical_nodal_variables_list + self.non_historical_nodal_variables_list = self.embedded_formulation.non_historical_nodal_variables_list ## Set the distance reading filename # TODO: remove the manual "distance_file_name" set as soon as the problem type one has been tested. @@ -359,10 +359,9 @@ def AddVariables(self): self.main_model_part.AddNodalSolutionStepVariable(KratosMultiphysics.MESH_DISPLACEMENT) self.main_model_part.AddNodalSolutionStepVariable(KratosMultiphysics.MESH_REACTION) - # Adding variables required for the nodal material properties - if self.element_has_nodal_properties: - for variable in self.historical_nodal_properties_variables_list: - self.main_model_part.AddNodalSolutionStepVariable(variable) + # Adding variables required by the formulation (this includes the nodal material properties) + for variable in self.historical_nodal_variables_list: + self.main_model_part.AddNodalSolutionStepVariable(variable) KratosMultiphysics.Logger.PrintInfo(self.__class__.__name__, "Fluid solver variables added correctly.") @@ -498,8 +497,8 @@ def _SetPhysicalProperties(self): return materials_imported def _SetNodalProperties(self): - set_density = KratosMultiphysics.DENSITY in self.historical_nodal_properties_variables_list - set_sound_velocity = KratosMultiphysics.SOUND_VELOCITY in self.non_historical_nodal_properties_variables_list + set_density = KratosMultiphysics.DENSITY in self.historical_nodal_variables_list + set_sound_velocity = KratosMultiphysics.SOUND_VELOCITY in self.non_historical_nodal_variables_list # Get density and dynamic viscostity from the properties of the first element for el in self.main_model_part.Elements: diff --git a/applications/FluidDynamicsApplication/python_scripts/navier_stokes_monolithic_solver.py b/applications/FluidDynamicsApplication/python_scripts/navier_stokes_monolithic_solver.py index cad304333928..295362aa6959 100755 --- a/applications/FluidDynamicsApplication/python_scripts/navier_stokes_monolithic_solver.py +++ b/applications/FluidDynamicsApplication/python_scripts/navier_stokes_monolithic_solver.py @@ -13,8 +13,8 @@ def __init__(self,settings): self.element_name = None self.element_integrates_in_time = False self.element_has_nodal_properties = False - self.historical_nodal_properties_variables_list = [] - self.non_historical_nodal_properties_variables_list = [] + self.historical_nodal_variables_list = [] + self.non_historical_nodal_variables_list = [] self.process_data = {} #TODO: Keep this until the MonolithicWallCondition is removed to ensure backwards compatibility in solvers with no defined condition_name @@ -83,7 +83,7 @@ def _SetUpClassicVMS(self,settings): # set the nodal material properties flag self.element_has_nodal_properties = True - self.historical_nodal_properties_variables_list = [KratosMultiphysics.DENSITY, KratosMultiphysics.VISCOSITY] + self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY, KratosMultiphysics.VISCOSITY] # validate the non-newtonian parameters if necessary if self.non_newtonian_option: @@ -171,8 +171,8 @@ def _SetUpWeaklyCompressible(self,settings): # set the nodal material properties flag self.element_has_nodal_properties = True - self.historical_nodal_properties_variables_list = [KratosMultiphysics.DENSITY] - self.non_historical_nodal_properties_variables_list = [KratosMultiphysics.SOUND_VELOCITY] + self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY, KratosCFD.SOLID_FRACTION_VELOCITY] + self.non_historical_nodal_variables_list = [KratosMultiphysics.SOUND_VELOCITY] self.process_data[KratosMultiphysics.DYNAMIC_TAU] = settings["dynamic_tau"].GetDouble() #TODO: Remove SOUND_VELOCITY from ProcessInfo. Should be obtained from the properties. @@ -300,10 +300,9 @@ def AddVariables(self): self.main_model_part.AddNodalSolutionStepVariable(KratosMultiphysics.Y_WALL) self.main_model_part.AddNodalSolutionStepVariable(KratosCFD.Q_VALUE) - # Adding variables required for the nodal material properties - if self.element_has_nodal_properties: - for variable in self.historical_nodal_properties_variables_list: - self.main_model_part.AddNodalSolutionStepVariable(variable) + # Adding variables required by the formulation (this includes the nodal material properties) + for variable in self.historical_nodal_variables_list: + self.main_model_part.AddNodalSolutionStepVariable(variable) # Adding variables required for the periodic conditions if self.settings["consider_periodic_conditions"].GetBool() == True: @@ -348,8 +347,8 @@ def _SetFormulation(self): self.condition_name = self.formulation.condition_name self.element_integrates_in_time = self.formulation.element_integrates_in_time self.element_has_nodal_properties = self.formulation.element_has_nodal_properties - self.historical_nodal_properties_variables_list = self.formulation.historical_nodal_properties_variables_list - self.non_historical_nodal_properties_variables_list = self.formulation.non_historical_nodal_properties_variables_list + self.historical_nodal_variables_list = self.formulation.historical_nodal_variables_list + self.non_historical_nodal_variables_list = self.formulation.non_historical_nodal_variables_list def _SetTimeSchemeBufferSize(self): scheme_type = self.settings["time_scheme"].GetString() @@ -373,9 +372,9 @@ def _SetUpSteadySimulation(self): self.settings["formulation"]["dynamic_tau"].SetDouble(0.0) def _SetNodalProperties(self): - set_density = KratosMultiphysics.DENSITY in self.historical_nodal_properties_variables_list - set_viscosity = KratosMultiphysics.VISCOSITY in self.historical_nodal_properties_variables_list - set_sound_velocity = KratosMultiphysics.SOUND_VELOCITY in self.non_historical_nodal_properties_variables_list + set_density = KratosMultiphysics.DENSITY in self.historical_nodal_variables_list + set_viscosity = KratosMultiphysics.VISCOSITY in self.historical_nodal_variables_list + set_sound_velocity = KratosMultiphysics.SOUND_VELOCITY in self.non_historical_nodal_variables_list # Get density and dynamic viscostity from the properties of the first element for el in self.main_model_part.Elements: diff --git a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/generate_weakly_compressible_navier_stokes_element.py b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/generate_weakly_compressible_navier_stokes_element.py index e86e280d1324..f1473e9725f2 100644 --- a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/generate_weakly_compressible_navier_stokes_element.py +++ b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/generate_weakly_compressible_navier_stokes_element.py @@ -118,7 +118,7 @@ ## Other data definitions f = DefineMatrix('f',nnodes,dim) # Forcing term - v_sol_frac = DefineMatrix('v_sol_frac',nnodes,dim) # Solid fraction velocity + v_sol_frac = DefineMatrix('r_v_sol_frac',nnodes,dim) # Solid fraction velocity ## Constitutive matrix definition C = DefineSymmetricMatrix('C',strain_size,strain_size) diff --git a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp index 9849501a3825..56284066c345 100644 --- a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp +++ b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp @@ -332,6 +332,7 @@ void WeaklyCompressibleNavierStokes>::Co const BoundedMatrix& vmesh = rData.MeshVelocity; const BoundedMatrix vconv = v - vmesh; const BoundedMatrix& f = rData.BodyForce; + const BoundedMatrix& r_v_sol_frac = rData.SolidFractionVelocity; const array_1d& p = rData.Pressure; const array_1d& pn = rData.Pressure_OldStep1; const array_1d& pnn = rData.Pressure_OldStep2; @@ -376,6 +377,7 @@ void WeaklyCompressibleNavierStokes>::Co const BoundedMatrix& vmesh = rData.MeshVelocity; const BoundedMatrix vconv = v - vmesh; const BoundedMatrix& f = rData.BodyForce; + const BoundedMatrix& r_v_sol_frac = rData.SolidFractionVelocity; const array_1d& p = rData.Pressure; const array_1d& pn = rData.Pressure_OldStep1; const array_1d& pnn = rData.Pressure_OldStep2; From 22ab9e764e5ff7f84bdb1c2b1c2979ef96efbd65 Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Fri, 29 Nov 2024 09:59:41 +0100 Subject: [PATCH 050/142] Missing variable --- .../python_scripts/navier_stokes_embedded_solver.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/FluidDynamicsApplication/python_scripts/navier_stokes_embedded_solver.py b/applications/FluidDynamicsApplication/python_scripts/navier_stokes_embedded_solver.py index 278b0869b0a7..cd6ccaea182a 100755 --- a/applications/FluidDynamicsApplication/python_scripts/navier_stokes_embedded_solver.py +++ b/applications/FluidDynamicsApplication/python_scripts/navier_stokes_embedded_solver.py @@ -96,7 +96,7 @@ def _SetUpEmbeddedWeaklyCompressibleNavierStokes(self, formulation_settings): self.level_set_type = formulation_settings["level_set_type"].GetString() self.element_integrates_in_time = True self.element_has_nodal_properties = True - self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY] + self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY, KratosCFD.SOLID_FRACTION_VELOCITY] self.non_historical_nodal_variables_list = [KratosMultiphysics.SOUND_VELOCITY] self.process_info_data[KratosMultiphysics.DYNAMIC_TAU] = formulation_settings["dynamic_tau"].GetDouble() @@ -143,7 +143,7 @@ def _SetUpEmbeddedWeaklyCompressibleNavierStokesDiscontinuous(self, formulation_ self.level_set_type = formulation_settings["level_set_type"].GetString() self.element_integrates_in_time = True self.element_has_nodal_properties = True - self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY] + self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY, KratosCFD.SOLID_FRACTION_VELOCITY] self.non_historical_nodal_variables_list = [KratosMultiphysics.SOUND_VELOCITY] self.process_info_data[KratosMultiphysics.DYNAMIC_TAU] = formulation_settings["dynamic_tau"].GetDouble() From 2f775344dfa8ea1e1a7acc4439e4ffaca6dc6adf Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Fri, 29 Nov 2024 10:19:15 +0100 Subject: [PATCH 051/142] Correct database --- .../custom_utilities/weakly_compressible_navier_stokes_data.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/FluidDynamicsApplication/custom_utilities/weakly_compressible_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_utilities/weakly_compressible_navier_stokes_data.h index 3bda59252f45..83fb0705c168 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/weakly_compressible_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_utilities/weakly_compressible_navier_stokes_data.h @@ -101,8 +101,8 @@ void Initialize(const Element& rElement, const ProcessInfo& rProcessInfo) overri this->FillFromHistoricalNodalData(Density,DENSITY,r_geometry); this->FillFromHistoricalNodalData(Pressure_OldStep1,PRESSURE,r_geometry,1); this->FillFromHistoricalNodalData(Pressure_OldStep2,PRESSURE,r_geometry,2); + this->FillFromHistoricalNodalData(SolidFractionVelocity, SOLID_FRACTION_VELOCITY, r_geometry); this->FillFromNonHistoricalNodalData(SoundVelocity, SOUND_VELOCITY, r_geometry); - this->FillFromNonHistoricalNodalData(SolidFractionVelocity, SOLID_FRACTION_VELOCITY, r_geometry); this->FillFromProperties(DynamicViscosity,DYNAMIC_VISCOSITY,r_properties); //TODO: This needs to be retrieved from the EffectiveViscosity of the constitutive law this->FillFromProcessInfo(DeltaTime,DELTA_TIME,rProcessInfo); this->FillFromProcessInfo(DynamicTau,DYNAMIC_TAU,rProcessInfo); From 043ce9fdbea031ca86c6563abfe02354fec054de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Fri, 29 Nov 2024 10:48:09 +0100 Subject: [PATCH 052/142] [INSTALL] Update terminology and formatting for clarity in installation instructions.Adding OpenMP for Clang --- INSTALL.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 06f4891bd7f7..ccb6fe4d397e 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -6,11 +6,11 @@ - [Specific Application Dependencies](#specific-application-dependencies) - [Basic Configuration](#basic-configuration) - [Configuration scripts examples](#configuration-scripts-examples) - - [Linux/WSL](#gnulinux) + - [GNU/Linux](#gnulinux) - [Windows](#windows) - [Visual Studio](#visual-studio) - [Windows Visual Studio compilation configuration](#windows-visual-studio-compilation-configuration) - - [MinGW](#mingw) + - [MinGW](#mingw) - [MacOS](#macos) - [Adding Applications](#adding-applications) - [Post Compilation](#post-compilation) @@ -59,7 +59,7 @@ git clone https://github.com/KratosMultiphysics/Kratos Kratos Additionaly, Visual Studio is required to compile in *Windows*. -- #### Linux/WSL installation +- #### GNU/Linux-WSL installation The command below will install all the packages needed. @@ -106,13 +106,13 @@ Additionaly, Visual Studio is required to compile in *Windows*. Extract boost, and note the path as it will be needed in the configure stage to set the environmental variable `BOOST_ROOT`. - #### MinGW - MingGw compilation details are hidden by default to avoid confusion, please click the button below to show them. + *MingGw* compilation details are hidden by default to avoid confusion, please click the button below to show them.
Show MinGW compilation details *MinGW* means minimal GNU for *Windows*. There are different manners of installing, the simplest one using *MSYS2*. - - MSYS2 + - *MSYS2* First, we download *MSYS2* in the following [link](https://www.msys2.org/). This will install *MinGW*, which allows to easiy install packages *a la* Arch-Linux (Pacman package manager). We install it, and with it the first thing we do is to update as follows ([in the *MSYS2* bash](https://www.msys2.org/docs/terminals/)): ![](https://www.msys2.org/docs/mintty.png) ![](https://www.msys2.org/docs/launchers.png) @@ -141,7 +141,7 @@ Additionaly, Visual Studio is required to compile in *Windows*. You will need a series of packages with some *Kratos* dependencies. These include the compilers (*GCC*,*Clang/LLVM*), *CMake*, *Blas and Lapack* libraries and the *OpenMP* support. The command below will install all the packages needed. The command below will install all the packages needed. ```Shell - pacman -S mingw64/mingw-w64-x86_64-lapack mingw64/mingw-w64-x86_64-openblas mingw64/mingw-w64-x86_64-cmake mingw64/mingw-w64-x86_64-clang mingw64/mingw-w64-x86_64-gcc mingw64/mingw-w64-x86_64-gcc-fortran mingw-w64-x86_64-make mingw64/mingw-w64-x86_64-openmp mingw64/mingw-w64-x86_64-dlfcn + pacman -S mingw64/mingw-w64-x86_64-lapack mingw64/mingw-w64-x86_64-openblas mingw64/mingw-w64-x86_64-cmake mingw64/mingw-w64-x86_64-clang mingw64/mingw-w64-x86_64-gcc mingw64/mingw-w64-x86_64-gcc-fortran mingw-w64-x86_64-make mingw64/mingw-w64-x86_64-openmp mingw64/mingw-w64-x86_64-dlfcn mingw64/mingw-w64-x86_64-llvm-openmp ``` - Python @@ -162,15 +162,15 @@ Additionaly, Visual Studio is required to compile in *Windows*. ##### Using UCRT64 - UCRT (Universal C Runtime) is a newer version which is also used by Microsoft Visual Studio by default, see https://www.msys2.org/docs/environments/. It should work and behave as if the code was compiled with MSVC. + **UCRT** (Universal C Runtime) is a newer version which is also used by Microsoft Visual Studio by default, see https://www.msys2.org/docs/environments/. It should work and behave as if the code was compiled with MSVC. - - Better compatibility with MSVC, both at build time and at run time. - - It only ships by default on Windows 10 and for older versions you have to provide it yourself or depend on the user having it installed. + - Better compatibility with **MSVC**, both at build time and at run time. + - It only ships by default on *Windows 10* and for older versions you have to provide it yourself or depend on the user having it installed. - If using UCRT64 the dependencies will be like: + If using **UCRT64** the dependencies will be like: ```Shell - pacman -S ucrt64/mingw-w64-ucrt-x86_64-lapack ucrt64/mingw-w64-ucrt-x86_64-openblas ucrt64/mingw-w64-ucrt-x86_64-cmake ucrt64/mingw-w64-ucrt-x86_64-clang ucrt64/mingw-w64-ucrt-x86_64-gcc ucrt64/mingw-w64-ucrt-x86_64-gcc-fortran mingw-w64-ucrt-x86_64-make ucrt64/mingw-w64-ucrt-x86_64-openmp ucrt64/mingw-w64-ucrt-x86_64-dlfcn ucrt64/mingw-w64-ucrt-x86_64-boost + pacman -S ucrt64/mingw-w64-ucrt-x86_64-lapack ucrt64/mingw-w64-ucrt-x86_64-openblas ucrt64/mingw-w64-ucrt-x86_64-cmake ucrt64/mingw-w64-ucrt-x86_64-clang ucrt64/mingw-w64-ucrt-x86_64-gcc ucrt64/mingw-w64-ucrt-x86_64-gcc-fortran mingw-w64-ucrt-x86_64-make ucrt64/mingw-w64-ucrt-x86_64-openmp ucrt64/mingw-w64-ucrt-x86_64-dlfcn ucrt64/mingw-w64-ucrt-x86_64-boost ucrt64/mingw-w64-ucrt-x86_64-llvm-openmp ```
From 7f05137d7893716cef5fb7fc9195e5a5d68fbf8b Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Fri, 29 Nov 2024 11:15:47 +0100 Subject: [PATCH 053/142] Final fixes --- .../weakly_compressible_navier_stokes.cpp | 16 ++++++++-------- ..._weakly_compressible_navier_stokes_element.py | 4 ++-- .../tests/cpp_tests/test_drag_utils.cpp | 1 + .../cpp_tests/test_embedded_fluid_element.cpp | 1 + ...test_embedded_fluid_element_discontinuous.cpp | 1 + ...weakly_compressible_navier_stokes_element.cpp | 5 +++-- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp b/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp index 5cb727547ef2..73d806db63b5 100644 --- a/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp @@ -284,8 +284,8 @@ const double crLHS12 = bdf0*crLHS5; const double crLHS13 = N[0]*sigma; const double crLHS14 = N[0]*crLHS12; const double crLHS15 = crLHS11 + crLHS13 + crLHS14; -const double crLHS16 = 1.0/(h*h); -const double crLHS17 = 1.0/(crLHS16*crLHS4 + crLHS16*mu*stab_c1 + crLHS5*dyn_tau*1.0/dt + crLHS8*1.0/h); +const double crLHS16 = 1.0/h; +const double crLHS17 = 1.0/(crLHS16*crLHS4 + crLHS16*crLHS8 + crLHS5*dyn_tau*1.0/dt + mu*stab_c1*1.0/(h*h)); const double crLHS18 = 1.0*crLHS11; const double crLHS19 = crLHS17*crLHS18; const double crLHS20 = 1.0*crLHS13; @@ -533,8 +533,8 @@ const double crLHS15 = bdf0*crLHS7; const double crLHS16 = N[0]*sigma; const double crLHS17 = N[0]*crLHS15; const double crLHS18 = crLHS14 + crLHS16 + crLHS17; -const double crLHS19 = 1.0/(h*h); -const double crLHS20 = 1.0/(crLHS11*1.0/h + crLHS19*crLHS6 + crLHS19*mu*stab_c1 + crLHS7*dyn_tau*1.0/dt); +const double crLHS19 = 1.0/h; +const double crLHS20 = 1.0/(crLHS11*crLHS19 + crLHS19*crLHS6 + crLHS7*dyn_tau*1.0/dt + mu*stab_c1*1.0/(h*h)); const double crLHS21 = 1.0*crLHS14; const double crLHS22 = crLHS20*crLHS21; const double crLHS23 = 1.0*crLHS16; @@ -1182,8 +1182,8 @@ const double crRHS20 = crRHS18*(N[0]*(bdf0*p[0] + bdf1*pn[0] + bdf2*pnn[0]) + N[ const double crRHS21 = DN(0,1)*v(0,1) + DN(1,1)*v(1,1) + DN(2,1)*v(2,1); const double crRHS22 = crRHS12 + crRHS21; const double crRHS23 = (crRHS19 + crRHS20 + crRHS22)*(mu + (crRHS16 + crRHS17*h)*1.0/stab_c1); -const double crRHS24 = 1.0/(h*h); -const double crRHS25 = 1.0*1.0/(crRHS1*dyn_tau*1.0/dt + crRHS16*crRHS24 + crRHS17*1.0/h + crRHS24*mu*stab_c1); +const double crRHS24 = 1.0/h; +const double crRHS25 = 1.0*1.0/(crRHS1*dyn_tau*1.0/dt + crRHS16*crRHS24 + crRHS17*crRHS24 + mu*stab_c1*1.0/(h*h)); const double crRHS26 = crRHS25*(DN(0,0)*p[0] + DN(1,0)*p[1] + DN(2,0)*p[2] + crRHS11 + crRHS15 - crRHS2 + sigma*(-crRHS3 - crRHS4 - crRHS5 + crRHS6 + crRHS7 + crRHS8)); const double crRHS27 = crRHS1*(DN(0,0)*vconv(0,0) + DN(0,1)*vconv(0,1) + DN(1,0)*vconv(1,0) + DN(1,1)*vconv(1,1) + DN(2,0)*vconv(2,0) + DN(2,1)*vconv(2,1)); const double crRHS28 = N[0]*crRHS27; @@ -1287,8 +1287,8 @@ const double crRHS24 = DN(0,1)*v(0,1) + DN(1,1)*v(1,1) + DN(2,1)*v(2,1) + DN(3,1 const double crRHS25 = DN(0,2)*v(0,2) + DN(1,2)*v(1,2) + DN(2,2)*v(2,2) + DN(3,2)*v(3,2); const double crRHS26 = crRHS14 + crRHS24 + crRHS25; const double crRHS27 = (crRHS22 + crRHS23 + crRHS26)*(mu + (crRHS19 + crRHS20*h)*1.0/stab_c1); -const double crRHS28 = 1.0/(h*h); -const double crRHS29 = 1.0*1.0/(crRHS1*dyn_tau*1.0/dt + crRHS19*crRHS28 + crRHS20*1.0/h + crRHS28*mu*stab_c1); +const double crRHS28 = 1.0/h; +const double crRHS29 = 1.0*1.0/(crRHS1*dyn_tau*1.0/dt + crRHS19*crRHS28 + crRHS20*crRHS28 + mu*stab_c1*1.0/(h*h)); const double crRHS30 = crRHS29*(DN(0,0)*p[0] + DN(1,0)*p[1] + DN(2,0)*p[2] + DN(3,0)*p[3] + crRHS13 + crRHS18 - crRHS2 + sigma*(crRHS10 - crRHS3 - crRHS4 - crRHS5 - crRHS6 + crRHS7 + crRHS8 + crRHS9)); const double crRHS31 = crRHS1*(DN(0,0)*vconv(0,0) + DN(0,1)*vconv(0,1) + DN(0,2)*vconv(0,2) + DN(1,0)*vconv(1,0) + DN(1,1)*vconv(1,1) + DN(1,2)*vconv(1,2) + DN(2,0)*vconv(2,0) + DN(2,1)*vconv(2,1) + DN(2,2)*vconv(2,2) + DN(3,0)*vconv(3,0) + DN(3,1)*vconv(3,1) + DN(3,2)*vconv(3,2)); const double crRHS32 = N[0]*crRHS31; diff --git a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/generate_weakly_compressible_navier_stokes_element.py b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/generate_weakly_compressible_navier_stokes_element.py index f1473e9725f2..2e9cdd1e796c 100644 --- a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/generate_weakly_compressible_navier_stokes_element.py +++ b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/generate_weakly_compressible_navier_stokes_element.py @@ -166,10 +166,10 @@ for i in range(0, dim): stab_norm_a += vconv_gauss[i]**2 stab_norm_a = sympy.sqrt(stab_norm_a) - tau1 = 1.0/(rho*dyn_tau/dt + stab_c2*rho*stab_norm_a/h + stab_c1*mu/h**2 + stab_c3*sigma/h**2) # Stabilization parameter 1 + tau1 = 1.0/(rho*dyn_tau/dt + stab_c2*rho*stab_norm_a/h + stab_c1*mu/h**2 + stab_c3*sigma/h) # Stabilization parameter 1 tau2 = mu + (stab_c2*rho*stab_norm_a*h + stab_c3*sigma)/stab_c1 # Stabilization parameter 2 else: - tau1 = 1.0/(rho*dyn_tau/dt + stab_c1*mu/h**2 + stab_c3*sigma/h**2) # Stabilization parameter 1 + tau1 = 1.0/(rho*dyn_tau/dt + stab_c1*mu/h**2 + stab_c3*sigma/h) # Stabilization parameter 1 tau2 = mu + stab_c3*sigma/stab_c1 # Stabilization parameter 2 ## Compute the rest of magnitudes at the Gauss points diff --git a/applications/FluidDynamicsApplication/tests/cpp_tests/test_drag_utils.cpp b/applications/FluidDynamicsApplication/tests/cpp_tests/test_drag_utils.cpp index ed2a3ae42a53..3e13d5d73922 100644 --- a/applications/FluidDynamicsApplication/tests/cpp_tests/test_drag_utils.cpp +++ b/applications/FluidDynamicsApplication/tests/cpp_tests/test_drag_utils.cpp @@ -53,6 +53,7 @@ namespace Kratos { rModelPart.AddNodalSolutionStepVariable(SOUND_VELOCITY); rModelPart.AddNodalSolutionStepVariable(DYNAMIC_VISCOSITY); rModelPart.AddNodalSolutionStepVariable(REACTION_WATER_PRESSURE); + rModelPart.AddNodalSolutionStepVariable(SOLID_FRACTION_VELOCITY); // Process info creation double delta_time = 0.1; diff --git a/applications/FluidDynamicsApplication/tests/cpp_tests/test_embedded_fluid_element.cpp b/applications/FluidDynamicsApplication/tests/cpp_tests/test_embedded_fluid_element.cpp index 3f0da27d39c0..1029cbb4ed45 100644 --- a/applications/FluidDynamicsApplication/tests/cpp_tests/test_embedded_fluid_element.cpp +++ b/applications/FluidDynamicsApplication/tests/cpp_tests/test_embedded_fluid_element.cpp @@ -42,6 +42,7 @@ KRATOS_TEST_CASE_IN_SUITE(EmbeddedElement2D3N, FluidDynamicsApplicationFastSuite model_part.AddNodalSolutionStepVariable(ACCELERATION); model_part.AddNodalSolutionStepVariable(EXTERNAL_PRESSURE); model_part.AddNodalSolutionStepVariable(REACTION_WATER_PRESSURE); + model_part.AddNodalSolutionStepVariable(SOLID_FRACTION_VELOCITY); // For VMS comparison model_part.AddNodalSolutionStepVariable(NODAL_AREA); diff --git a/applications/FluidDynamicsApplication/tests/cpp_tests/test_embedded_fluid_element_discontinuous.cpp b/applications/FluidDynamicsApplication/tests/cpp_tests/test_embedded_fluid_element_discontinuous.cpp index efd73c81a0ec..a275d8ae6737 100644 --- a/applications/FluidDynamicsApplication/tests/cpp_tests/test_embedded_fluid_element_discontinuous.cpp +++ b/applications/FluidDynamicsApplication/tests/cpp_tests/test_embedded_fluid_element_discontinuous.cpp @@ -42,6 +42,7 @@ KRATOS_TEST_CASE_IN_SUITE(EmbeddedElementDiscontinuous2D3N, FluidDynamicsApplica model_part.AddNodalSolutionStepVariable(ACCELERATION); model_part.AddNodalSolutionStepVariable(EXTERNAL_PRESSURE); model_part.AddNodalSolutionStepVariable(REACTION_WATER_PRESSURE); + model_part.AddNodalSolutionStepVariable(SOLID_FRACTION_VELOCITY); // For VMS comparison model_part.AddNodalSolutionStepVariable(NODAL_AREA); diff --git a/applications/FluidDynamicsApplication/tests/cpp_tests/test_weakly_compressible_navier_stokes_element.cpp b/applications/FluidDynamicsApplication/tests/cpp_tests/test_weakly_compressible_navier_stokes_element.cpp index e0588c574e5e..c55e5ca3e28a 100644 --- a/applications/FluidDynamicsApplication/tests/cpp_tests/test_weakly_compressible_navier_stokes_element.cpp +++ b/applications/FluidDynamicsApplication/tests/cpp_tests/test_weakly_compressible_navier_stokes_element.cpp @@ -43,6 +43,7 @@ KRATOS_TEST_CASE_IN_SUITE(WeaklyCompressibleNavierStokes2D3N, FluidDynamicsAppli r_model_part.AddNodalSolutionStepVariable(ACCELERATION); r_model_part.AddNodalSolutionStepVariable(REACTION); r_model_part.AddNodalSolutionStepVariable(REACTION_WATER_PRESSURE); + r_model_part.AddNodalSolutionStepVariable(SOLID_FRACTION_VELOCITY); // ProcessInfo container fill double delta_time = 0.1; @@ -111,8 +112,8 @@ KRATOS_TEST_CASE_IN_SUITE(WeaklyCompressibleNavierStokes2D3N, FluidDynamicsAppli // KRATOS_WATCH(row(LHS,0)) // Check values - const std::vector rhs_ref = {34.2921172632, -19.1612962435, -0.0212935839184, -58.7701017724, 31.2334272413, -0.0186565395118, -8.37866202262, -77.7742128742, -0.0450498765698}; // WeaklyCompressibleNavierStokes2D3N - const std::vector lhs_0_ref = {255.745969647, 0, 0.155863699867, -197.183916289, 250.033529091, 0.105861405575, 52.887840474, -250.033529091, 0.13527448821}; // WeaklyCompressibleNavierStokes2D3N + const std::vector rhs_ref = {35.4884272438, -16.3707126841, -0.0165099840565, -57.1752103975, 34.4226885377, -0.0120809017136, -6.38728003117, -74.1903403375, -0.0564091142299}; // WeaklyCompressibleNavierStokes2D3N + const std::vector lhs_0_ref = {247.633101497, 0, 0.17185384644, -201.239603454, 250.033529091, 0.08787249068, 48.8263970168, -250.033529091, 0.137273256531}; // WeaklyCompressibleNavierStokes2D3N KRATOS_EXPECT_VECTOR_NEAR(RHS, rhs_ref, 1.0e-10) KRATOS_EXPECT_VECTOR_NEAR(row(LHS,0), lhs_0_ref, 1.0e-8) } From d05cac2788bd0239769a790dab24bf9e1e3d4f25 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 29 Nov 2024 11:36:42 +0100 Subject: [PATCH 054/142] more compile time if --- .../linear_truss_element_2D.cpp | 134 ++++++++++-------- 1 file changed, 71 insertions(+), 63 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp index 4944dde871b7..53d11b78d7a8 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp @@ -234,34 +234,36 @@ void LinearTrussElement2D::GetFirstDerivativesShapeFunction template void LinearTrussElement2D::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const { - if (rNodalValues.size() != SystemSize) - rNodalValues.resize(SystemSize, false); - const auto &r_geom = GetGeometry(); + if constexpr (TDimension == 2) { + if (rNodalValues.size() != SystemSize) + rNodalValues.resize(SystemSize, false); + const auto &r_geom = GetGeometry(); - const double angle = GetAngle(); + const double angle = GetAngle(); - BoundedVector global_values; + BoundedVector global_values; - // We fill the vector with global values - for (SizeType i = 0; i < NNodes; ++i) { - const auto& r_displ = r_geom[i].FastGetSolutionStepValue(DISPLACEMENT); - global_values[i * DofsPerNode] = r_displ[0]; - global_values[i * DofsPerNode + 1] = r_displ[1]; - } + // We fill the vector with global values + for (SizeType i = 0; i < NNodes; ++i) { + const auto& r_displ = r_geom[i].FastGetSolutionStepValue(DISPLACEMENT); + global_values[i * DofsPerNode] = r_displ[0]; + global_values[i * DofsPerNode + 1] = r_displ[1]; + } - if (std::abs(angle) > std::numeric_limits::epsilon()) { - BoundedMatrix T; - BoundedMatrix global_size_T; - StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); - if constexpr (NNodes == 2) { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); + if (std::abs(angle) > std::numeric_limits::epsilon()) { + BoundedMatrix T; + BoundedMatrix global_size_T; + StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + } + // We rotate to local axes + noalias(rNodalValues) = prod(trans(global_size_T), global_values); } else { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + noalias(rNodalValues) = global_values; } - // We rotate to local axes - noalias(rNodalValues) = prod(trans(global_size_T), global_values); - } else { - noalias(rNodalValues) = global_values; } } @@ -496,20 +498,22 @@ void LinearTrussElement2D::RotateLHS( MatrixType& rLHS ) { - const double angle = GetAngle(); + if constexpr (TDimension == 2) { + const double angle = GetAngle(); + + if (std::abs(angle) > std::numeric_limits::epsilon()) { + BoundedMatrix T, Tt; + BoundedMatrix global_size_T, aux_product; + StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + } - if (std::abs(angle) > std::numeric_limits::epsilon()) { - BoundedMatrix T, Tt; - BoundedMatrix global_size_T, aux_product; - StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); - if constexpr (NNodes == 2) { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); - } else { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + noalias(aux_product) = prod(rLHS, trans(global_size_T)); + noalias(rLHS) = prod(global_size_T, aux_product); } - - noalias(aux_product) = prod(rLHS, trans(global_size_T)); - noalias(rLHS) = prod(global_size_T, aux_product); } } @@ -521,20 +525,22 @@ void LinearTrussElement2D::RotateRHS( VectorType& rRHS ) { - const double angle = GetAngle(); - if (std::abs(angle) > std::numeric_limits::epsilon()) { - BoundedMatrix T; - BoundedMatrix global_size_T; - BoundedVector local_rhs; - noalias(local_rhs) = rRHS; - StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); - if constexpr (NNodes == 2) { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); - } else { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); - } + if constexpr (TDimension == 2) { + const double angle = GetAngle(); + if (std::abs(angle) > std::numeric_limits::epsilon()) { + BoundedMatrix T; + BoundedMatrix global_size_T; + BoundedVector local_rhs; + noalias(local_rhs) = rRHS; + StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + } - noalias(rRHS) = prod(global_size_T, local_rhs); + noalias(rRHS) = prod(global_size_T, local_rhs); + } } } @@ -547,24 +553,26 @@ void LinearTrussElement2D::RotateAll( VectorType& rRHS ) { - const double angle = GetAngle(); - if (std::abs(angle) > std::numeric_limits::epsilon()) { - BoundedMatrix T; - BoundedMatrix global_size_T, aux_product; - BoundedVector local_rhs; - StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); - - if constexpr (NNodes == 2) { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); - } else { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); - } + if constexpr (TDimension == 2) { + const double angle = GetAngle(); + if (std::abs(angle) > std::numeric_limits::epsilon()) { + BoundedMatrix T; + BoundedMatrix global_size_T, aux_product; + BoundedVector local_rhs; + StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); + + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + } - noalias(local_rhs) = rRHS; - noalias(rRHS) = prod(global_size_T, local_rhs); + noalias(local_rhs) = rRHS; + noalias(rRHS) = prod(global_size_T, local_rhs); - noalias(aux_product) = prod(rLHS, trans(global_size_T)); - noalias(rLHS) = prod(global_size_T, aux_product); + noalias(aux_product) = prod(rLHS, trans(global_size_T)); + noalias(rLHS) = prod(global_size_T, aux_product); + } } } From 44273a12fec8930e1507f15ece0d0a739e065942 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 29 Nov 2024 11:46:41 +0100 Subject: [PATCH 055/142] body forces in 3D --- .../truss_elements/linear_truss_element_3D.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp index 7873fc16c3f6..2470b8d125d1 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp @@ -298,14 +298,14 @@ array_1d LinearTrussElement3D::GetLocalAxesBodyF const IndexType PointNumber ) const { - // const double angle = GetAngle(); - // const auto body_force = StructuralMechanicsElementUtilities::GetBodyForce(*this, rIntegrationPoints, PointNumber); + const auto body_force = StructuralMechanicsElementUtilities::GetBodyForce(*this, rIntegrationPoints, PointNumber); + + array_1d local_body_force = ZeroVector(Dimension); + BoundedMatrix T; + noalias(T) = GetFrenetSerretMatrix(); // global to local + + noalias(local_body_force) = prod(T, body_force); - // const double c = std::cos(angle); - // const double s = std::sin(angle); - array_1d local_body_force = ZeroVector(3); - // local_body_force[0] = c * body_force[0] + s * body_force[1]; - // local_body_force[1] = -s * body_force[0] + c * body_force[1]; return local_body_force; } From fd850805b498de307b99399e1a814f83c1eda94f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Fri, 29 Nov 2024 12:12:47 +0100 Subject: [PATCH 056/142] [INSTALL] Remove KRATOS_GENERATE_PYTHON_STUBS option from build configuration --- INSTALL.md | 1 - scripts/standard_configure_MINGW.sh | 1 - 2 files changed, 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index ccb6fe4d397e..cb4080c92ac2 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -409,7 +409,6 @@ cmake .. -B"${KRATOS_BUILD}/${KRATOS_BUILD_TYPE}" \ -DUSE_MPI=OFF \ -DKRATOS_SHARED_MEMORY_PARALLELIZATION="${KRATOS_SHARED_MEMORY_PARALLELIZATION}" \ --DKRATOS_GENERATE_PYTHON_STUBS=ON \ -DUSE_EIGEN_MKL=OFF # Buid diff --git a/scripts/standard_configure_MINGW.sh b/scripts/standard_configure_MINGW.sh index e6737e23a800..a96bd73095dd 100644 --- a/scripts/standard_configure_MINGW.sh +++ b/scripts/standard_configure_MINGW.sh @@ -45,7 +45,6 @@ cmake .. -B"${KRATOS_BUILD}/${KRATOS_BUILD_TYPE}" \ -DUSE_MPI=OFF \ -DKRATOS_SHARED_MEMORY_PARALLELIZATION="${KRATOS_SHARED_MEMORY_PARALLELIZATION}" \ --DKRATOS_GENERATE_PYTHON_STUBS=ON \ -DUSE_EIGEN_MKL=OFF # Build From 37863d942f537cbf3879e113159d691a1d4ba5de Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 29 Nov 2024 12:21:17 +0100 Subject: [PATCH 057/142] rotations ok --- .../linear_truss_element_2D.cpp | 2 +- .../linear_truss_element_3D.cpp | 336 +++++++++--------- 2 files changed, 165 insertions(+), 173 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp index 53d11b78d7a8..b4e9fa58bab1 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp @@ -502,7 +502,7 @@ void LinearTrussElement2D::RotateLHS( const double angle = GetAngle(); if (std::abs(angle) > std::numeric_limits::epsilon()) { - BoundedMatrix T, Tt; + BoundedMatrix T; BoundedMatrix global_size_T, aux_product; StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); if constexpr (NNodes == 2) { diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp index 2470b8d125d1..07069d25fb55 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp @@ -321,65 +321,65 @@ void LinearTrussElement3D::CalculateLocalSystem( { KRATOS_TRY; - const auto &r_props = GetProperties(); - const auto &r_geometry = GetGeometry(); + // const auto &r_props = GetProperties(); + // const auto &r_geometry = GetGeometry(); - if (rLHS.size1() != SystemSize || rLHS.size2() != SystemSize) { - rLHS.resize(SystemSize, SystemSize, false); - } - noalias(rLHS) = ZeroMatrix(SystemSize, SystemSize); + // if (rLHS.size1() != SystemSize || rLHS.size2() != SystemSize) { + // rLHS.resize(SystemSize, SystemSize, false); + // } + // noalias(rLHS) = ZeroMatrix(SystemSize, SystemSize); - if (rRHS.size() != SystemSize) { - rRHS.resize(SystemSize, false); - } - noalias(rRHS) = ZeroVector(SystemSize); + // if (rRHS.size() != SystemSize) { + // rRHS.resize(SystemSize, false); + // } + // noalias(rRHS) = ZeroVector(SystemSize); - const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); + // const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); - ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); - auto &r_cl_options = cl_values.GetOptions(); - r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); - r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); + // ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); + // auto &r_cl_options = cl_values.GetOptions(); + // r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); + // r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); - const double length = CalculateLength(); - const double J = 0.5 * length; - const double area = r_props[CROSS_AREA]; + // const double length = CalculateLength(); + // const double J = 0.5 * length; + // const double area = r_props[CROSS_AREA]; - // Let's initialize the cl values - VectorType strain_vector(1), stress_vector(1); - MatrixType constitutive_matrix(1, 1); // Young modulus + // // Let's initialize the cl values + // VectorType strain_vector(1), stress_vector(1); + // MatrixType constitutive_matrix(1, 1); // Young modulus - strain_vector.clear(); - cl_values.SetStrainVector(strain_vector); - cl_values.SetStressVector(stress_vector); - cl_values.SetConstitutiveMatrix(constitutive_matrix); - SystemSizeBoundedArrayType nodal_values(SystemSize); - GetNodalValuesVector(nodal_values); // In local axes + // strain_vector.clear(); + // cl_values.SetStrainVector(strain_vector); + // cl_values.SetStressVector(stress_vector); + // cl_values.SetConstitutiveMatrix(constitutive_matrix); + // SystemSizeBoundedArrayType nodal_values(SystemSize); + // GetNodalValuesVector(nodal_values); // In local axes - SystemSizeBoundedArrayType B, N_shape, N_shapeY; + // SystemSizeBoundedArrayType B, N_shape, N_shapeY; - // Loop over the integration points - for (SizeType IP = 0; IP < integration_points.size(); ++IP) { - const auto local_body_forces = GetLocalAxesBodyForce(*this, integration_points, IP); + // // Loop over the integration points + // for (SizeType IP = 0; IP < integration_points.size(); ++IP) { + // const auto local_body_forces = GetLocalAxesBodyForce(*this, integration_points, IP); - const double xi = integration_points[IP].X(); - const double weight = integration_points[IP].Weight(); - const double jacobian_weight = weight * J * area; - GetShapeFunctionsValues(N_shape, length, xi); - GetShapeFunctionsValuesY(N_shapeY, length, xi); - GetFirstDerivativesShapeFunctionsValues(B, length, xi); + // const double xi = integration_points[IP].X(); + // const double weight = integration_points[IP].Weight(); + // const double jacobian_weight = weight * J * area; + // GetShapeFunctionsValues(N_shape, length, xi); + // GetShapeFunctionsValuesY(N_shapeY, length, xi); + // GetFirstDerivativesShapeFunctionsValues(B, length, xi); - strain_vector[0] = inner_prod(B, nodal_values); - mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix + // strain_vector[0] = inner_prod(B, nodal_values); + // mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix - noalias(rLHS) += outer_prod(B, B) * constitutive_matrix(0, 0) * jacobian_weight; - noalias(rRHS) -= B * stress_vector[0] * jacobian_weight; + // noalias(rLHS) += outer_prod(B, B) * constitutive_matrix(0, 0) * jacobian_weight; + // noalias(rRHS) -= B * stress_vector[0] * jacobian_weight; - noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; - noalias(rRHS) += N_shapeY * local_body_forces[1] * jacobian_weight; - } - RotateAll(rLHS, rRHS); // rotate to global + // noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; + // noalias(rRHS) += N_shapeY * local_body_forces[1] * jacobian_weight; + // } + // RotateAll(rLHS, rRHS); // rotate to global KRATOS_CATCH("") } @@ -393,54 +393,54 @@ void LinearTrussElement3D::CalculateLeftHandSide( const ProcessInfo& rProcessInfo ) { - KRATOS_TRY; - const auto &r_props = GetProperties(); - const auto &r_geometry = GetGeometry(); + KRATOS_TRY; + // const auto &r_props = GetProperties(); + // const auto &r_geometry = GetGeometry(); - if (rLHS.size1() != SystemSize || rLHS.size2() != SystemSize) { - rLHS.resize(SystemSize, SystemSize, false); - } - noalias(rLHS) = ZeroMatrix(SystemSize, SystemSize); + // if (rLHS.size1() != SystemSize || rLHS.size2() != SystemSize) { + // rLHS.resize(SystemSize, SystemSize, false); + // } + // noalias(rLHS) = ZeroMatrix(SystemSize, SystemSize); - const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); + // const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); - ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); - auto &r_cl_options = cl_values.GetOptions(); - r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); - r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); + // ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); + // auto &r_cl_options = cl_values.GetOptions(); + // r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); + // r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); - const double length = CalculateLength(); - const double J = 0.5 * length; - const double area = r_props[CROSS_AREA]; + // const double length = CalculateLength(); + // const double J = 0.5 * length; + // const double area = r_props[CROSS_AREA]; - // Let's initialize the cl values - VectorType strain_vector(1), stress_vector(1); - MatrixType constitutive_matrix(1, 1); // Young modulus + // // Let's initialize the cl values + // VectorType strain_vector(1), stress_vector(1); + // MatrixType constitutive_matrix(1, 1); // Young modulus - strain_vector.clear(); - cl_values.SetStrainVector(strain_vector); - cl_values.SetStressVector(stress_vector); - cl_values.SetConstitutiveMatrix(constitutive_matrix); - SystemSizeBoundedArrayType nodal_values(SystemSize); - GetNodalValuesVector(nodal_values); // In local axes + // strain_vector.clear(); + // cl_values.SetStrainVector(strain_vector); + // cl_values.SetStressVector(stress_vector); + // cl_values.SetConstitutiveMatrix(constitutive_matrix); + // SystemSizeBoundedArrayType nodal_values(SystemSize); + // GetNodalValuesVector(nodal_values); // In local axes - SystemSizeBoundedArrayType B; + // SystemSizeBoundedArrayType B; - // Loop over the integration points - for (SizeType IP = 0; IP < integration_points.size(); ++IP) { - const auto local_body_forces = GetLocalAxesBodyForce(*this, integration_points, IP); + // // Loop over the integration points + // for (SizeType IP = 0; IP < integration_points.size(); ++IP) { + // const auto local_body_forces = GetLocalAxesBodyForce(*this, integration_points, IP); - const double xi = integration_points[IP].X(); - const double weight = integration_points[IP].Weight(); - const double jacobian_weight = weight * J * area; - GetFirstDerivativesShapeFunctionsValues(B, length, xi); + // const double xi = integration_points[IP].X(); + // const double weight = integration_points[IP].Weight(); + // const double jacobian_weight = weight * J * area; + // GetFirstDerivativesShapeFunctionsValues(B, length, xi); - strain_vector[0] = inner_prod(B, nodal_values); - mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix + // strain_vector[0] = inner_prod(B, nodal_values); + // mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix - noalias(rLHS) += outer_prod(B, B) * constitutive_matrix(0, 0) * jacobian_weight; - } - RotateLHS(rLHS); // rotate to global + // noalias(rLHS) += outer_prod(B, B) * constitutive_matrix(0, 0) * jacobian_weight; + // } + // RotateLHS(rLHS); // rotate to global KRATOS_CATCH("") } @@ -454,59 +454,59 @@ void LinearTrussElement3D::CalculateRightHandSide( const ProcessInfo& rProcessInfo ) { - KRATOS_TRY; - const auto &r_props = GetProperties(); - const auto &r_geometry = GetGeometry(); + KRATOS_TRY; + // const auto &r_props = GetProperties(); + // const auto &r_geometry = GetGeometry(); - if (rRHS.size() != SystemSize) { - rRHS.resize(SystemSize, false); - } - noalias(rRHS) = ZeroVector(SystemSize); + // if (rRHS.size() != SystemSize) { + // rRHS.resize(SystemSize, false); + // } + // noalias(rRHS) = ZeroVector(SystemSize); - const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); + // const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); - ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); - auto &r_cl_options = cl_values.GetOptions(); - r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); - r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); + // ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); + // auto &r_cl_options = cl_values.GetOptions(); + // r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); + // r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); - const double length = CalculateLength(); - const double J = 0.5 * length; - const double area = r_props[CROSS_AREA]; + // const double length = CalculateLength(); + // const double J = 0.5 * length; + // const double area = r_props[CROSS_AREA]; - // Let's initialize the cl values - VectorType strain_vector(1), stress_vector(1); - MatrixType constitutive_matrix(1, 1); // Young modulus + // // Let's initialize the cl values + // VectorType strain_vector(1), stress_vector(1); + // MatrixType constitutive_matrix(1, 1); // Young modulus - strain_vector.clear(); - cl_values.SetStrainVector(strain_vector); - cl_values.SetStressVector(stress_vector); - cl_values.SetConstitutiveMatrix(constitutive_matrix); - SystemSizeBoundedArrayType nodal_values(SystemSize); - GetNodalValuesVector(nodal_values); // In local axes + // strain_vector.clear(); + // cl_values.SetStrainVector(strain_vector); + // cl_values.SetStressVector(stress_vector); + // cl_values.SetConstitutiveMatrix(constitutive_matrix); + // SystemSizeBoundedArrayType nodal_values(SystemSize); + // GetNodalValuesVector(nodal_values); // In local axes - SystemSizeBoundedArrayType B, N_shape, N_shapeY; + // SystemSizeBoundedArrayType B, N_shape, N_shapeY; - // Loop over the integration points - for (SizeType IP = 0; IP < integration_points.size(); ++IP) { - const auto local_body_forces = GetLocalAxesBodyForce(*this, integration_points, IP); + // // Loop over the integration points + // for (SizeType IP = 0; IP < integration_points.size(); ++IP) { + // const auto local_body_forces = GetLocalAxesBodyForce(*this, integration_points, IP); - const double xi = integration_points[IP].X(); - const double weight = integration_points[IP].Weight(); - const double jacobian_weight = weight * J * area; - GetShapeFunctionsValues(N_shape, length, xi); - GetShapeFunctionsValuesY(N_shapeY, length, xi); - GetFirstDerivativesShapeFunctionsValues(B, length, xi); + // const double xi = integration_points[IP].X(); + // const double weight = integration_points[IP].Weight(); + // const double jacobian_weight = weight * J * area; + // GetShapeFunctionsValues(N_shape, length, xi); + // GetShapeFunctionsValuesY(N_shapeY, length, xi); + // GetFirstDerivativesShapeFunctionsValues(B, length, xi); - strain_vector[0] = inner_prod(B, nodal_values); - mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix + // strain_vector[0] = inner_prod(B, nodal_values); + // mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix - noalias(rRHS) -= B * stress_vector[0] * jacobian_weight; + // noalias(rRHS) -= B * stress_vector[0] * jacobian_weight; - noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; - noalias(rRHS) += N_shapeY * local_body_forces[1] * jacobian_weight; - } - RotateRHS(rRHS); // rotate to global + // noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; + // noalias(rRHS) += N_shapeY * local_body_forces[1] * jacobian_weight; + // } + // RotateRHS(rRHS); // rotate to global KRATOS_CATCH("") } @@ -519,21 +519,18 @@ void LinearTrussElement3D::RotateLHS( MatrixType& rLHS ) { - // const double angle = GetAngle(); - - // if (std::abs(angle) > std::numeric_limits::epsilon()) { - // BoundedMatrix T, Tt; - // BoundedMatrix global_size_T, aux_product; - // StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); - // if constexpr (NNodes == 2) { - // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); - // } else { - // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); - // } - - // noalias(aux_product) = prod(rLHS, trans(global_size_T)); - // noalias(rLHS) = prod(global_size_T, aux_product); - // } + BoundedMatrix T; + noalias(T) = trans(GetFrenetSerretMatrix()); // global to local + BoundedMatrix global_size_T, aux_product; + + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); + } + noalias(aux_product) = prod(rLHS, trans(global_size_T)); + noalias(rLHS) = prod(global_size_T, aux_product); + } /***********************************************************************************/ @@ -544,21 +541,19 @@ void LinearTrussElement3D::RotateRHS( VectorType& rRHS ) { - // const double angle = GetAngle(); - // if (std::abs(angle) > std::numeric_limits::epsilon()) { - // BoundedMatrix T; - // BoundedMatrix global_size_T; - // BoundedVector local_rhs; - // noalias(local_rhs) = rRHS; - // StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); - // if constexpr (NNodes == 2) { - // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); - // } else { - // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); - // } - - // noalias(rRHS) = prod(global_size_T, local_rhs); - // } + BoundedMatrix T; + BoundedMatrix global_size_T; + noalias(T) = trans(GetFrenetSerretMatrix()); // global to local + BoundedVector local_rhs; + noalias(local_rhs) = rRHS; + + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); + } + + noalias(rRHS) = prod(global_size_T, local_rhs); } /***********************************************************************************/ @@ -570,25 +565,22 @@ void LinearTrussElement3D::RotateAll( VectorType& rRHS ) { - // const double angle = GetAngle(); - // if (std::abs(angle) > std::numeric_limits::epsilon()) { - // BoundedMatrix T; - // BoundedMatrix global_size_T, aux_product; - // BoundedVector local_rhs; - // StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); - - // if constexpr (NNodes == 2) { - // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); - // } else { - // StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); - // } - - // noalias(local_rhs) = rRHS; - // noalias(rRHS) = prod(global_size_T, local_rhs); - - // noalias(aux_product) = prod(rLHS, trans(global_size_T)); - // noalias(rLHS) = prod(global_size_T, aux_product); - // } + BoundedMatrix T; + noalias(T) = trans(GetFrenetSerretMatrix()); // global to local + BoundedMatrix global_size_T, aux_product; + BoundedVector local_rhs; + + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); + } + + noalias(local_rhs) = rRHS; + noalias(rRHS) = prod(global_size_T, local_rhs); + + noalias(aux_product) = prod(rLHS, trans(global_size_T)); + noalias(rLHS) = prod(global_size_T, aux_product); } /***********************************************************************************/ From cd188d166da7af0f2cc2f1fb71abf67d5b9a2aed Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 29 Nov 2024 12:32:08 +0100 Subject: [PATCH 058/142] generalizing calculatolocalsystem to reuse code --- .../linear_truss_element_2D.cpp | 31 +++++++++++++++---- .../truss_elements/linear_truss_element_2D.h | 2 +- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp index b4e9fa58bab1..9c578c3df648 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp @@ -205,6 +205,22 @@ void LinearTrussElement2D::GetShapeFunctionsValuesY( /***********************************************************************************/ /***********************************************************************************/ +template +void LinearTrussElement2D::GetShapeFunctionsValuesZ( + SystemSizeBoundedArrayType& rN, + const double Length, + const double xi + ) const +{ + if (rN.size() != SystemSize) + rN.resize(SystemSize, false); + + rN.clear(); +} + +/***********************************************************************************/ +/***********************************************************************************/ + template void LinearTrussElement2D::GetFirstDerivativesShapeFunctionsValues( SystemSizeBoundedArrayType& rdN_dX, @@ -335,7 +351,7 @@ void LinearTrussElement2D::CalculateLocalSystem( SystemSizeBoundedArrayType nodal_values(SystemSize); GetNodalValuesVector(nodal_values); // In local axes - SystemSizeBoundedArrayType B, N_shape, N_shapeY; + SystemSizeBoundedArrayType B, N_shape, N_shapeY, N_shapeZ; // Loop over the integration points for (SizeType IP = 0; IP < integration_points.size(); ++IP) { @@ -346,17 +362,18 @@ void LinearTrussElement2D::CalculateLocalSystem( const double jacobian_weight = weight * J * area; GetShapeFunctionsValues(N_shape, length, xi); GetShapeFunctionsValuesY(N_shapeY, length, xi); + GetShapeFunctionsValuesZ(N_shapeZ, length, xi); GetFirstDerivativesShapeFunctionsValues(B, length, xi); - strain_vector[0] = inner_prod(B, nodal_values); mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix noalias(rLHS) += outer_prod(B, B) * constitutive_matrix(0, 0) * jacobian_weight; noalias(rRHS) -= B * stress_vector[0] * jacobian_weight; - noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; + noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; noalias(rRHS) += N_shapeY * local_body_forces[1] * jacobian_weight; + noalias(rRHS) += N_shapeZ * local_body_forces[2] * jacobian_weight; // null in this class } RotateAll(rLHS, rRHS); // rotate to global @@ -433,7 +450,7 @@ void LinearTrussElement2D::CalculateRightHandSide( const ProcessInfo& rProcessInfo ) { - KRATOS_TRY; + KRATOS_TRY; const auto &r_props = GetProperties(); const auto &r_geometry = GetGeometry(); @@ -464,7 +481,7 @@ void LinearTrussElement2D::CalculateRightHandSide( SystemSizeBoundedArrayType nodal_values(SystemSize); GetNodalValuesVector(nodal_values); // In local axes - SystemSizeBoundedArrayType B, N_shape, N_shapeY; + SystemSizeBoundedArrayType B, N_shape, N_shapeY, N_shapeZ; // Loop over the integration points for (SizeType IP = 0; IP < integration_points.size(); ++IP) { @@ -475,6 +492,7 @@ void LinearTrussElement2D::CalculateRightHandSide( const double jacobian_weight = weight * J * area; GetShapeFunctionsValues(N_shape, length, xi); GetShapeFunctionsValuesY(N_shapeY, length, xi); + GetShapeFunctionsValuesZ(N_shapeZ, length, xi); GetFirstDerivativesShapeFunctionsValues(B, length, xi); strain_vector[0] = inner_prod(B, nodal_values); @@ -482,8 +500,9 @@ void LinearTrussElement2D::CalculateRightHandSide( noalias(rRHS) -= B * stress_vector[0] * jacobian_weight; - noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; + noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; noalias(rRHS) += N_shapeY * local_body_forces[1] * jacobian_weight; + noalias(rRHS) += N_shapeZ * local_body_forces[2] * jacobian_weight; } RotateRHS(rRHS); // rotate to global diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h index 711f72086b6d..8270bfeb4491 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h @@ -246,7 +246,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D */ virtual void GetShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; virtual void GetShapeFunctionsValuesY(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; - virtual void GetShapeFunctionsValuesZ(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const {}; + virtual void GetShapeFunctionsValuesZ(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; virtual void GetFirstDerivativesShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; /** From a1e8d3e6acc2186025ae178f7407bbebd2ccc3e7 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 29 Nov 2024 12:33:34 +0100 Subject: [PATCH 059/142] clean version --- .../linear_truss_element_3D.cpp | 202 ------------------ .../truss_elements/linear_truss_element_3D.h | 33 --- 2 files changed, 235 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp index 07069d25fb55..17641915094b 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp @@ -312,208 +312,6 @@ array_1d LinearTrussElement3D::GetLocalAxesBodyF /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement3D::CalculateLocalSystem( - MatrixType& rLHS, - VectorType& rRHS, - const ProcessInfo& rProcessInfo - ) -{ - KRATOS_TRY; - - // const auto &r_props = GetProperties(); - // const auto &r_geometry = GetGeometry(); - - // if (rLHS.size1() != SystemSize || rLHS.size2() != SystemSize) { - // rLHS.resize(SystemSize, SystemSize, false); - // } - // noalias(rLHS) = ZeroMatrix(SystemSize, SystemSize); - - // if (rRHS.size() != SystemSize) { - // rRHS.resize(SystemSize, false); - // } - // noalias(rRHS) = ZeroVector(SystemSize); - - // const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); - - // ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); - // auto &r_cl_options = cl_values.GetOptions(); - // r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); - // r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); - - // const double length = CalculateLength(); - // const double J = 0.5 * length; - // const double area = r_props[CROSS_AREA]; - - // // Let's initialize the cl values - // VectorType strain_vector(1), stress_vector(1); - // MatrixType constitutive_matrix(1, 1); // Young modulus - - // strain_vector.clear(); - // cl_values.SetStrainVector(strain_vector); - // cl_values.SetStressVector(stress_vector); - // cl_values.SetConstitutiveMatrix(constitutive_matrix); - // SystemSizeBoundedArrayType nodal_values(SystemSize); - // GetNodalValuesVector(nodal_values); // In local axes - - // SystemSizeBoundedArrayType B, N_shape, N_shapeY; - - // // Loop over the integration points - // for (SizeType IP = 0; IP < integration_points.size(); ++IP) { - // const auto local_body_forces = GetLocalAxesBodyForce(*this, integration_points, IP); - - // const double xi = integration_points[IP].X(); - // const double weight = integration_points[IP].Weight(); - // const double jacobian_weight = weight * J * area; - // GetShapeFunctionsValues(N_shape, length, xi); - // GetShapeFunctionsValuesY(N_shapeY, length, xi); - // GetFirstDerivativesShapeFunctionsValues(B, length, xi); - - - // strain_vector[0] = inner_prod(B, nodal_values); - // mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix - - // noalias(rLHS) += outer_prod(B, B) * constitutive_matrix(0, 0) * jacobian_weight; - // noalias(rRHS) -= B * stress_vector[0] * jacobian_weight; - - // noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; - // noalias(rRHS) += N_shapeY * local_body_forces[1] * jacobian_weight; - // } - // RotateAll(rLHS, rRHS); // rotate to global - - KRATOS_CATCH("") -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::CalculateLeftHandSide( - MatrixType& rLHS, - const ProcessInfo& rProcessInfo - ) -{ - KRATOS_TRY; - // const auto &r_props = GetProperties(); - // const auto &r_geometry = GetGeometry(); - - // if (rLHS.size1() != SystemSize || rLHS.size2() != SystemSize) { - // rLHS.resize(SystemSize, SystemSize, false); - // } - // noalias(rLHS) = ZeroMatrix(SystemSize, SystemSize); - - // const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); - - // ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); - // auto &r_cl_options = cl_values.GetOptions(); - // r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); - // r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); - - // const double length = CalculateLength(); - // const double J = 0.5 * length; - // const double area = r_props[CROSS_AREA]; - - // // Let's initialize the cl values - // VectorType strain_vector(1), stress_vector(1); - // MatrixType constitutive_matrix(1, 1); // Young modulus - - // strain_vector.clear(); - // cl_values.SetStrainVector(strain_vector); - // cl_values.SetStressVector(stress_vector); - // cl_values.SetConstitutiveMatrix(constitutive_matrix); - // SystemSizeBoundedArrayType nodal_values(SystemSize); - // GetNodalValuesVector(nodal_values); // In local axes - - // SystemSizeBoundedArrayType B; - - // // Loop over the integration points - // for (SizeType IP = 0; IP < integration_points.size(); ++IP) { - // const auto local_body_forces = GetLocalAxesBodyForce(*this, integration_points, IP); - - // const double xi = integration_points[IP].X(); - // const double weight = integration_points[IP].Weight(); - // const double jacobian_weight = weight * J * area; - // GetFirstDerivativesShapeFunctionsValues(B, length, xi); - - // strain_vector[0] = inner_prod(B, nodal_values); - // mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix - - // noalias(rLHS) += outer_prod(B, B) * constitutive_matrix(0, 0) * jacobian_weight; - // } - // RotateLHS(rLHS); // rotate to global - - KRATOS_CATCH("") -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::CalculateRightHandSide( - VectorType& rRHS, - const ProcessInfo& rProcessInfo - ) -{ - KRATOS_TRY; - // const auto &r_props = GetProperties(); - // const auto &r_geometry = GetGeometry(); - - // if (rRHS.size() != SystemSize) { - // rRHS.resize(SystemSize, false); - // } - // noalias(rRHS) = ZeroVector(SystemSize); - - // const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); - - // ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); - // auto &r_cl_options = cl_values.GetOptions(); - // r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); - // r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); - - // const double length = CalculateLength(); - // const double J = 0.5 * length; - // const double area = r_props[CROSS_AREA]; - - // // Let's initialize the cl values - // VectorType strain_vector(1), stress_vector(1); - // MatrixType constitutive_matrix(1, 1); // Young modulus - - // strain_vector.clear(); - // cl_values.SetStrainVector(strain_vector); - // cl_values.SetStressVector(stress_vector); - // cl_values.SetConstitutiveMatrix(constitutive_matrix); - // SystemSizeBoundedArrayType nodal_values(SystemSize); - // GetNodalValuesVector(nodal_values); // In local axes - - // SystemSizeBoundedArrayType B, N_shape, N_shapeY; - - // // Loop over the integration points - // for (SizeType IP = 0; IP < integration_points.size(); ++IP) { - // const auto local_body_forces = GetLocalAxesBodyForce(*this, integration_points, IP); - - // const double xi = integration_points[IP].X(); - // const double weight = integration_points[IP].Weight(); - // const double jacobian_weight = weight * J * area; - // GetShapeFunctionsValues(N_shape, length, xi); - // GetShapeFunctionsValuesY(N_shapeY, length, xi); - // GetFirstDerivativesShapeFunctionsValues(B, length, xi); - - // strain_vector[0] = inner_prod(B, nodal_values); - // mConstitutiveLawVector[IP]->CalculateMaterialResponsePK2(cl_values); // fills stress and const. matrix - - // noalias(rRHS) -= B * stress_vector[0] * jacobian_weight; - - // noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; - // noalias(rRHS) += N_shapeY * local_body_forces[1] * jacobian_weight; - // } - // RotateRHS(rRHS); // rotate to global - - KRATOS_CATCH("") -} - -/***********************************************************************************/ -/***********************************************************************************/ - template void LinearTrussElement3D::RotateLHS( MatrixType& rLHS diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h index 3ee73514b21f..e374bdd47cbf 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h @@ -208,39 +208,6 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement3D const GeometryType::IntegrationPointsArrayType &rIntegrationPoints, const IndexType PointNumber) const override; - /** - * @brief This function provides a more general interface to the element. - * @details It is designed so that rLHSvariables and rRHSvariables are passed to the element thus telling what is the desired output - * @param rLeftHandSideMatrix container with the output Left Hand Side matrix - * @param rRightHandSideVector container for the desired RHS output - * @param rCurrentProcessInfo the current process info instance - */ - void CalculateLocalSystem( - MatrixType& rLeftHandSideMatrix, - VectorType& rRightHandSideVector, - const ProcessInfo& rCurrentProcessInfo - ) override; - - /** - * @brief This is called during the assembling process in order to calculate the elemental left hand side matrix only - * @param rLeftHandSideMatrix the elemental left hand side matrix - * @param rCurrentProcessInfo the current process info instance - */ - void CalculateLeftHandSide( - MatrixType& rLeftHandSideMatrix, - const ProcessInfo& rCurrentProcessInfo - ) override; - - /** - * @brief This is called during the assembling process in order to calculate the elemental right hand side vector only - * @param rRightHandSideVector the elemental right hand side vector - * @param rCurrentProcessInfo the current process info instance - */ - void CalculateRightHandSide( - VectorType& rRightHandSideVector, - const ProcessInfo& rCurrentProcessInfo - ) override; - ///@} ///@name Access ///@{ From cbc432e39e29ae76d7016ab3317a7418d07a91f0 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 29 Nov 2024 12:41:17 +0100 Subject: [PATCH 060/142] minor comment --- .../custom_elements/truss_elements/linear_truss_element_2D.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp index 9c578c3df648..c40f2e83d465 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp @@ -373,7 +373,7 @@ void LinearTrussElement2D::CalculateLocalSystem( noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; noalias(rRHS) += N_shapeY * local_body_forces[1] * jacobian_weight; - noalias(rRHS) += N_shapeZ * local_body_forces[2] * jacobian_weight; // null in this class + noalias(rRHS) += N_shapeZ * local_body_forces[2] * jacobian_weight; // null in this class, full in derived one } RotateAll(rLHS, rRHS); // rotate to global From 8c29ca09a9c04c57db1b740467c55c7aa09afb6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Fri, 29 Nov 2024 12:57:02 +0100 Subject: [PATCH 061/142] [INSTALL] Add warning about UCRT64 linking issues in installation instructions --- INSTALL.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index cb4080c92ac2..436f4c11f487 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -162,7 +162,9 @@ Additionaly, Visual Studio is required to compile in *Windows*. ##### Using UCRT64 - **UCRT** (Universal C Runtime) is a newer version which is also used by Microsoft Visual Studio by default, see https://www.msys2.org/docs/environments/. It should work and behave as if the code was compiled with MSVC. + **⚠️NOTE:** Right now **UCRT64** is giving linking issues and therefore is not recommended to compile *Kratos*. + + **UCRT** (*Universal C Runtime*) is a newer version which is also used by Microsoft Visual Studio by default, see [*MSYS2*](https://www.msys2.org/docs/environments/). It should work and behave as if the code was compiled with **MSVC**. - Better compatibility with **MSVC**, both at build time and at run time. - It only ships by default on *Windows 10* and for older versions you have to provide it yourself or depend on the user having it installed. From 34f872559084ec669b4b53c27d7143637cf1e214 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 29 Nov 2024 14:22:46 +0100 Subject: [PATCH 062/142] adding test files --- .../LinearTruss3D/linear_3d_truss_test.mdpa | 57 +++++++++++++ .../linear_3d_truss_test_materials.json | 18 ++++ .../linear_3d_truss_test_parameters.json | 83 +++++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test.mdpa create mode 100644 applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_materials.json create mode 100644 applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json diff --git a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test.mdpa b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test.mdpa new file mode 100644 index 000000000000..d2daa724c25f --- /dev/null +++ b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test.mdpa @@ -0,0 +1,57 @@ +Begin ModelPartData +// VARIABLE_NAME value +End ModelPartData + +Begin Properties 0 +End Properties +Begin Nodes + 1 10.1703000000 -4.8240600000 0.0000000000 + 2 -3.1328040000 0.3632200000 0.0000000000 + 3 0.1816120000 5.5732100000 0.0000000000 + 4 -6.4472200000 -4.8467700000 0.0000000000 + 5 0.1816120000 5.5732100000 10.0000000000 +End Nodes + + +Begin Elements LinearTrussElement3D2N// GUI group identifier: Truss Auto1 + 1 0 3 1 + 2 0 3 5 + 5 0 2 5 + 6 0 2 1 +End Elements + +Begin Elements LinearTrussElement3D3N// GUI group identifier: Truss Auto1 + 3 0 3 4 2 +End Elements + +Begin SubModelPart Parts_Truss_Truss_Auto1 // Group Truss Auto1 // Subtree Parts_Truss + Begin SubModelPartNodes + 1 + 2 + 3 + 4 + 5 + End SubModelPartNodes + Begin SubModelPartElements + 1 + 2 + 3 + 5 + 6 + End SubModelPartElements +End SubModelPart +Begin SubModelPart DISPLACEMENT_Displacement_Auto1 // Group Displacement Auto1 // Subtree DISPLACEMENT + Begin SubModelPartNodes + 1 + 4 + 5 + End SubModelPartNodes +End SubModelPart +Begin SubModelPart SelfWeight3D_Self_weight_Auto1 // Group Self weight Auto1 // Subtree SelfWeight3D + Begin SubModelPartNodes + 1 + 2 + 3 + 5 + End SubModelPartNodes +End SubModelPart diff --git a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_materials.json b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_materials.json new file mode 100644 index 000000000000..ead77e1c1200 --- /dev/null +++ b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_materials.json @@ -0,0 +1,18 @@ +{ + "properties" : [{ + "model_part_name" : "Structure.Parts_Truss_Truss_Auto1", + "properties_id" : 1, + "Material" : { + "constitutive_law" : { + "name" : "TrussConstitutiveLaw" + }, + "Variables" : { + "DENSITY" : 7850.0, + "YOUNG_MODULUS" : 206900000000.0, + "CROSS_AREA" : 1.0, + "TRUSS_PRESTRESS_PK2" : 0.0 + }, + "Tables" : null + } + }] +} diff --git a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json new file mode 100644 index 000000000000..5ce163308c89 --- /dev/null +++ b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json @@ -0,0 +1,83 @@ +{ + "problem_data" : { + "problem_name" : "test_truss_3d", + "parallel_type" : "OpenMP", + "echo_level" : 1, + "start_time" : 0.0, + "end_time" : 1.0 + }, + "solver_settings" : { + "time_stepping" : { + "time_step" : 1.1 + }, + "solver_type" : "Static", + "model_part_name" : "Structure", + "domain_size" : 3, + "echo_level" : 1, + "analysis_type" : "non_linear", + "model_import_settings" : { + "input_type" : "mdpa", + "input_filename" : "LinearTruss3D/linear_3d_truss_test" + }, + "material_import_settings" : { + "materials_filename" : "LinearTruss3D/linear_3d_truss_test_materials.json" + }, + "line_search" : false, + "convergence_criterion" : "residual_criterion", + "displacement_relative_tolerance" : 0.0001, + "displacement_absolute_tolerance" : 1e-9, + "residual_relative_tolerance" : 0.0001, + "residual_absolute_tolerance" : 1e-9, + "max_iteration" : 10, + "use_old_stiffness_in_first_iteration" : false, + "rotation_dofs" : false, + "volumetric_strain_dofs" : false + }, + "processes" : { + "constraints_process_list" : [{ + "python_module" : "assign_vector_variable_process", + "kratos_module" : "KratosMultiphysics", + "process_name" : "AssignVectorVariableProcess", + "Parameters" : { + "model_part_name" : "Structure.DISPLACEMENT_Displacement_Auto1", + "variable_name" : "DISPLACEMENT", + "interval" : [0.0,"End"], + "constrained" : [true,true,true], + "value" : [0.0,0.0,0.0] + } + }], + "loads_process_list" : [{ + "python_module" : "assign_vector_by_direction_process", + "kratos_module" : "KratosMultiphysics", + "check" : "DirectorVectorNonZero direction", + "process_name" : "AssignVectorByDirectionProcess", + "Parameters" : { + "model_part_name" : "Structure.SelfWeight3D_Self_weight_Auto1", + "variable_name" : "VOLUME_ACCELERATION", + "interval" : [0.0,"End"], + "constrained" : false, + "modulus" : 9.81, + "direction" : [0.0,-1.0,-1.0] + } + }], + "list_other_processes" : [], + "_json_output_process" : [ + { + "python_module" : "json_output_process", + "kratos_module" : "KratosMultiphysics", + "process_name" : "JsonOutputProcess", + "Parameters" : { + "output_variables" : ["DISPLACEMENT"], + "gauss_points_output_variables" : ["AXIAL_FORCE", "AXIAL_STRAIN"], + "output_file_name" : "LinearTruss3D/2D2N/linear_3d_truss_test_results.json", + "model_part_name" : "Structure.Parts_Truss_Truss_Auto1", + "time_frequency" : 1.0 + } + }] + }, + "output_processes" : { + "gid_output" : [], + "vtk_output" : [] + }, + "analysis_stage" : "KratosMultiphysics.StructuralMechanicsApplication.structural_mechanics_analysis" +} From fa571d20494cdecbc906cf7ba13a87dfdf74e392 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 29 Nov 2024 14:35:04 +0100 Subject: [PATCH 063/142] adding test for 3D 2 noded and 3 noded trusses --- .../linear_3d_truss_test_parameters.json | 40 ++++-- .../linear_3d_truss_test_results.json | 126 ++++++++++++++++++ .../structural_mechanics_test_factory.py | 3 + .../test_StructuralMechanicsApplication.py | 2 + 4 files changed, 158 insertions(+), 13 deletions(-) create mode 100644 applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_results.json diff --git a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json index 5ce163308c89..cfdbca640a03 100644 --- a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json +++ b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json @@ -61,19 +61,33 @@ } }], "list_other_processes" : [], - "_json_output_process" : [ - { - "python_module" : "json_output_process", - "kratos_module" : "KratosMultiphysics", - "process_name" : "JsonOutputProcess", - "Parameters" : { - "output_variables" : ["DISPLACEMENT"], - "gauss_points_output_variables" : ["AXIAL_FORCE", "AXIAL_STRAIN"], - "output_file_name" : "LinearTruss3D/2D2N/linear_3d_truss_test_results.json", - "model_part_name" : "Structure.Parts_Truss_Truss_Auto1", - "time_frequency" : 1.0 - } - }] + "json_check_process" : [ + { + "python_module" : "from_json_check_result_process", + "kratos_module" : "KratosMultiphysics", + "help" : "", + "process_name" : "FromJsonCheckResultProcess", + "Parameters" : { + "check_variables" : ["DISPLACEMENT"], + "gauss_points_check_variables" : ["AXIAL_FORCE", "AXIAL_STRAIN"], + "input_file_name" : "LinearTruss3D/linear_3d_truss_test_results.json", + "model_part_name" : "Structure.Parts_Truss_Truss_Auto1", + "time_frequency" : 1.0 + } + }] + //"_json_output_process" : [ + //{ + // "python_module" : "json_output_process", + // "kratos_module" : "KratosMultiphysics", + // "process_name" : "JsonOutputProcess", + // "Parameters" : { + // "output_variables" : ["DISPLACEMENT"], + // "gauss_points_output_variables" : ["AXIAL_FORCE", "AXIAL_STRAIN"], + // "output_file_name" : "LinearTruss3D/linear_3d_truss_test_results.json", + // "model_part_name" : "Structure.Parts_Truss_Truss_Auto1", + // "time_frequency" : 1.0 + // } + //}] }, "output_processes" : { "gid_output" : [], diff --git a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_results.json b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_results.json new file mode 100644 index 000000000000..36280eb92d97 --- /dev/null +++ b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_results.json @@ -0,0 +1,126 @@ +{ + "TIME": [ + 1.1 + ], + "NODE_1": { + "DISPLACEMENT_X": [ + 0.0 + ], + "DISPLACEMENT_Y": [ + 0.0 + ], + "DISPLACEMENT_Z": [ + 0.0 + ] + }, + "NODE_2": { + "DISPLACEMENT_X": [ + 2.5252448543199116e-05 + ], + "DISPLACEMENT_Y": [ + -4.77285330139852e-05 + ], + "DISPLACEMENT_Z": [ + -6.842859146423649e-05 + ] + }, + "NODE_3": { + "DISPLACEMENT_X": [ + -6.463816278955382e-06 + ], + "DISPLACEMENT_Y": [ + -4.967830376938648e-05 + ], + "DISPLACEMENT_Z": [ + -3.93552133991175e-05 + ] + }, + "NODE_4": { + "DISPLACEMENT_X": [ + 0.0 + ], + "DISPLACEMENT_Y": [ + 0.0 + ], + "DISPLACEMENT_Z": [ + 0.0 + ] + }, + "NODE_5": { + "DISPLACEMENT_X": [ + 0.0 + ], + "DISPLACEMENT_Y": [ + 0.0 + ], + "DISPLACEMENT_Z": [ + 0.0 + ] + }, + "ELEMENT_1": { + "AXIAL_FORCE": { + "0": [ + -449829.3174959501 + ] + }, + "AXIAL_STRAIN": { + "0": [ + -2.17413879891711e-06 + ] + } + }, + "ELEMENT_2": { + "AXIAL_FORCE": { + "0": [ + 814259.3652277411 + ] + }, + "AXIAL_STRAIN": { + "0": [ + 3.93552133991175e-06 + ] + } + }, + "ELEMENT_3": { + "AXIAL_FORCE": { + "0": [ + -604679.957883901 + ], + "1": [ + -916016.186795974 + ] + }, + "AXIAL_STRAIN": { + "0": [ + -2.9225710869207393e-06 + ], + "1": [ + -4.4273377805508655e-06 + ] + } + }, + "ELEMENT_5": { + "AXIAL_FORCE": { + "0": [ + 1272073.2298470384 + ] + }, + "AXIAL_STRAIN": { + "0": [ + 6.148251473402796e-06 + ] + } + }, + "ELEMENT_6": { + "AXIAL_FORCE": { + "0": [ + -592159.3348778292 + ] + }, + "AXIAL_STRAIN": { + "0": [ + -2.8620557509803245e-06 + ] + } + } +} \ No newline at end of file diff --git a/applications/StructuralMechanicsApplication/tests/structural_mechanics_test_factory.py b/applications/StructuralMechanicsApplication/tests/structural_mechanics_test_factory.py index e38c1a15ceea..ab12b002d2ca 100644 --- a/applications/StructuralMechanicsApplication/tests/structural_mechanics_test_factory.py +++ b/applications/StructuralMechanicsApplication/tests/structural_mechanics_test_factory.py @@ -82,6 +82,9 @@ class LinearTruss2D2NTest(StructuralMechanicsTestFactory): class LinearTruss2D3NTest(StructuralMechanicsTestFactory): file_name = "LinearTruss2D/2D3N/linear_truss_2d3N_test" +class LinearTruss3DTest(StructuralMechanicsTestFactory): + file_name = "LinearTruss3D/linear_3d_truss_test" + class TimoshenkoBeam2D2NTest(StructuralMechanicsTestFactory): file_name = "TimoshenkoBeams/2D2N/timoshenko_beam_2d2N_test" diff --git a/applications/StructuralMechanicsApplication/tests/test_StructuralMechanicsApplication.py b/applications/StructuralMechanicsApplication/tests/test_StructuralMechanicsApplication.py index e29dc9312a48..69f3a09b364e 100644 --- a/applications/StructuralMechanicsApplication/tests/test_StructuralMechanicsApplication.py +++ b/applications/StructuralMechanicsApplication/tests/test_StructuralMechanicsApplication.py @@ -98,6 +98,7 @@ # Patch test Small Displacements from structural_mechanics_test_factory import LinearTruss2D2NTest as TLinearTruss2D2NTest from structural_mechanics_test_factory import LinearTruss2D3NTest as TLinearTruss2D3NTest +from structural_mechanics_test_factory import LinearTruss3DTest as TLinearTruss3DTest from structural_mechanics_test_factory import TimoshenkoBeam2D2NTest as TTimoshenkoBeam2D2NTest from structural_mechanics_test_factory import TimoshenkoBeam2D3NTest as TTimoshenkoBeam2D3NTest from structural_mechanics_test_factory import TimoshenkoCurvedBeam2D3NTest as TTimoshenkoCurvedBeam2D3NTest @@ -348,6 +349,7 @@ def AssembleTestSuites(): # Patch test Small Displacements smallSuite.addTest(TLinearTruss2D2NTest('test_execution')) smallSuite.addTest(TLinearTruss2D3NTest('test_execution')) + smallSuite.addTest(TLinearTruss3DTest('test_execution')) smallSuite.addTest(TTimoshenkoBeam2D2NTest('test_execution')) smallSuite.addTest(TTimoshenkoBeam2D3NTest('test_execution')) smallSuite.addTest(TTimoshenkoCurvedBeam2D3NTest('test_execution')) From 76955ff5f80de9058579b1028de2ee1d1313026c Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 29 Nov 2024 14:47:53 +0100 Subject: [PATCH 064/142] correcting test --- .../LinearTruss3D/linear_3d_truss_test.mdpa | 11 ++++++++++- .../linear_3d_truss_test_materials.json | 15 +++++++++++++++ .../linear_3d_truss_test_parameters.json | 1 + .../linear_3d_truss_test_results.json | 18 ------------------ 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test.mdpa b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test.mdpa index d2daa724c25f..493f515828d2 100644 --- a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test.mdpa +++ b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test.mdpa @@ -35,11 +35,20 @@ Begin SubModelPart Parts_Truss_Truss_Auto1 // Group Truss Auto1 // Subtree Parts Begin SubModelPartElements 1 2 - 3 5 6 End SubModelPartElements End SubModelPart + +Begin SubModelPart 3_n_truss // Group Truss Auto1 // Subtree Parts_Truss + Begin SubModelPartNodes + 3 4 2 + End SubModelPartNodes + Begin SubModelPartElements + 3 + End SubModelPartElements +End SubModelPart + Begin SubModelPart DISPLACEMENT_Displacement_Auto1 // Group Displacement Auto1 // Subtree DISPLACEMENT Begin SubModelPartNodes 1 diff --git a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_materials.json b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_materials.json index ead77e1c1200..918b351f6a8a 100644 --- a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_materials.json +++ b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_materials.json @@ -14,5 +14,20 @@ }, "Tables" : null } + },{ + "model_part_name" : "Structure.3_n_truss", + "properties_id" : 2, + "Material" : { + "constitutive_law" : { + "name" : "TrussConstitutiveLaw" + }, + "Variables" : { + "DENSITY" : 7850.0, + "YOUNG_MODULUS" : 206900000000.0, + "CROSS_AREA" : 1.0, + "TRUSS_PRESTRESS_PK2" : 0.0 + }, + "Tables" : null + } }] } diff --git a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json index cfdbca640a03..1c7352446168 100644 --- a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json +++ b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json @@ -75,6 +75,7 @@ "time_frequency" : 1.0 } }] + //"_json_output_process" : [ //{ // "python_module" : "json_output_process", diff --git a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_results.json b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_results.json index 36280eb92d97..a8381a60e6f3 100644 --- a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_results.json +++ b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_results.json @@ -81,24 +81,6 @@ ] } }, - "ELEMENT_3": { - "AXIAL_FORCE": { - "0": [ - -604679.957883901 - ], - "1": [ - -916016.186795974 - ] - }, - "AXIAL_STRAIN": { - "0": [ - -2.9225710869207393e-06 - ], - "1": [ - -4.4273377805508655e-06 - ] - } - }, "ELEMENT_5": { "AXIAL_FORCE": { "0": [ From d1aa5bbfcdd73ebf162b3313421cd991677dbe26 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 29 Nov 2024 14:55:48 +0100 Subject: [PATCH 065/142] reduce tolerance to be safer --- .../tests/LinearTruss3D/linear_3d_truss_test_parameters.json | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json index 1c7352446168..2facacdf299e 100644 --- a/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json +++ b/applications/StructuralMechanicsApplication/tests/LinearTruss3D/linear_3d_truss_test_parameters.json @@ -72,6 +72,7 @@ "gauss_points_check_variables" : ["AXIAL_FORCE", "AXIAL_STRAIN"], "input_file_name" : "LinearTruss3D/linear_3d_truss_test_results.json", "model_part_name" : "Structure.Parts_Truss_Truss_Auto1", + "tolerance" : 1.0e-8, "time_frequency" : 1.0 } }] From 88ae36627fb1e0e4d54dd78e55cf6465d529dea0 Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Sat, 30 Nov 2024 10:46:01 +0100 Subject: [PATCH 066/142] Fixing SwimmingDEM solver --- ...er_stokes_solver_vms_monolithic_DEMCoupled.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/applications/SwimmingDEMApplication/python_scripts/navier_stokes_solver_vms_monolithic_DEMCoupled.py b/applications/SwimmingDEMApplication/python_scripts/navier_stokes_solver_vms_monolithic_DEMCoupled.py index 362990d67e06..805c9d282e53 100644 --- a/applications/SwimmingDEMApplication/python_scripts/navier_stokes_solver_vms_monolithic_DEMCoupled.py +++ b/applications/SwimmingDEMApplication/python_scripts/navier_stokes_solver_vms_monolithic_DEMCoupled.py @@ -42,7 +42,7 @@ def _SetUpQSVMSDEM(self,settings): self.element_name = settings["element_name"].GetString() self.element_has_nodal_properties = True - self.historical_nodal_properties_variables_list = [KratosMultiphysics.DENSITY, KratosMultiphysics.VISCOSITY, KratosMultiphysics.PERMEABILITY] + self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY, KratosMultiphysics.VISCOSITY, KratosMultiphysics.PERMEABILITY] self.process_data[KratosMultiphysics.DYNAMIC_TAU] = settings["dynamic_tau"].GetDouble() use_oss = settings["use_orthogonal_subscales"].GetBool() @@ -59,7 +59,7 @@ def _SetUpVMSDEM(self,settings): self.element_name = settings["element_name"].GetString() self.element_has_nodal_properties = True - self.historical_nodal_properties_variables_list = [KratosMultiphysics.DENSITY, KratosMultiphysics.VISCOSITY] + self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY, KratosMultiphysics.VISCOSITY] self.process_data[KratosMultiphysics.DYNAMIC_TAU] = settings["dynamic_tau"].GetDouble() use_oss = settings["use_orthogonal_subscales"].GetBool() self.process_data[KratosMultiphysics.OSS_SWITCH] = int(use_oss) @@ -75,7 +75,7 @@ def _SetUpDVMSDEM(self,settings): self.element_name = settings["element_name"].GetString() self.element_has_nodal_properties = True - self.historical_nodal_properties_variables_list = [KratosMultiphysics.DENSITY, KratosMultiphysics.VISCOSITY, KratosMultiphysics.PERMEABILITY] + self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY, KratosMultiphysics.VISCOSITY, KratosMultiphysics.PERMEABILITY] self.process_data[KratosMultiphysics.DYNAMIC_TAU] = settings["dynamic_tau"].GetDouble() use_oss = settings["use_orthogonal_subscales"].GetBool() self.process_data[KratosMultiphysics.OSS_SWITCH] = int(use_oss) @@ -90,7 +90,7 @@ def _SetUpAQSVMSDEM(self,settings): settings.ValidateAndAssignDefaults(default_settings) self.element_name = settings["element_name"].GetString() self.element_has_nodal_properties = True - self.historical_nodal_properties_variables_list = [KratosMultiphysics.DENSITY, KratosMultiphysics.VISCOSITY, KratosMultiphysics.PERMEABILITY] + self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY, KratosMultiphysics.VISCOSITY, KratosMultiphysics.PERMEABILITY] self.process_data[KratosMultiphysics.DYNAMIC_TAU] = settings["dynamic_tau"].GetDouble() use_oss = settings["use_orthogonal_subscales"].GetBool() @@ -106,7 +106,7 @@ def _SetUpADVMSDEM(self,settings): settings.ValidateAndAssignDefaults(default_settings) self.element_name = settings["element_name"].GetString() self.element_has_nodal_properties = True - self.historical_nodal_properties_variables_list = [KratosMultiphysics.DENSITY, KratosMultiphysics.VISCOSITY, KratosMultiphysics.PERMEABILITY] + self.historical_nodal_variables_list = [KratosMultiphysics.DENSITY, KratosMultiphysics.VISCOSITY, KratosMultiphysics.PERMEABILITY] self.process_data[KratosMultiphysics.DYNAMIC_TAU] = settings["dynamic_tau"].GetDouble() use_oss = settings["use_orthogonal_subscales"].GetBool() @@ -212,12 +212,12 @@ def _SetFormulation(self): self.condition_name = self.formulation.condition_name self.element_integrates_in_time = self.formulation.element_integrates_in_time self.element_has_nodal_properties = self.formulation.element_has_nodal_properties - self.historical_nodal_properties_variables_list = self.formulation.historical_nodal_properties_variables_list - self.non_historical_nodal_properties_variables_list = self.formulation.non_historical_nodal_properties_variables_list + self.historical_nodal_variables_list = self.formulation.historical_nodal_variables_list + self.non_historical_nodal_variables_list = self.formulation.non_historical_nodal_variables_list def _SetNodalProperties(self): super(NavierStokesSolverMonolithicDEM, self)._SetNodalProperties() - set_permeability = KratosMultiphysics.PERMEABILITY in self.historical_nodal_properties_variables_list + set_permeability = KratosMultiphysics.PERMEABILITY in self.historical_nodal_variables_list for el in self.main_model_part.Elements: # Get PERMEABILITY from properties if set_permeability: From 5b8522c3757e4c21e1cf7cf8719c56c8c7b50874 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 2 Dec 2024 09:38:44 +0100 Subject: [PATCH 067/142] start to unify --- ...lement_2D.cpp => linear_truss_element.cpp} | 58 +++++++++---------- ...ss_element_2D.h => linear_truss_element.h} | 20 +++---- .../structural_mechanics_application.h | 3 +- 3 files changed, 40 insertions(+), 41 deletions(-) rename applications/StructuralMechanicsApplication/custom_elements/truss_elements/{linear_truss_element_2D.cpp => linear_truss_element.cpp} (92%) rename applications/StructuralMechanicsApplication/custom_elements/truss_elements/{linear_truss_element_2D.h => linear_truss_element.h} (95%) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp similarity index 92% rename from applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp rename to applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp index c40f2e83d465..8a130d96779b 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp @@ -28,7 +28,7 @@ namespace Kratos /***********************************************************************************/ template -void LinearTrussElement2D::Initialize(const ProcessInfo& rCurrentProcessInfo) +void LinearTrussElement::Initialize(const ProcessInfo& rCurrentProcessInfo) { KRATOS_TRY @@ -57,7 +57,7 @@ void LinearTrussElement2D::Initialize(const ProcessInfo& rC /***********************************************************************************/ template -void LinearTrussElement2D::InitializeMaterial() +void LinearTrussElement::InitializeMaterial() { KRATOS_TRY const auto &r_props = GetProperties(); @@ -79,14 +79,14 @@ void LinearTrussElement2D::InitializeMaterial() /***********************************************************************************/ template -Element::Pointer LinearTrussElement2D::Clone( +Element::Pointer LinearTrussElement::Clone( IndexType NewId, NodesArrayType const& rThisNodes ) const { KRATOS_TRY - LinearTrussElement2D::Pointer p_new_elem = Kratos::make_intrusive>(NewId, GetGeometry().Create(rThisNodes), pGetProperties()); + LinearTrussElement::Pointer p_new_elem = Kratos::make_intrusive>(NewId, GetGeometry().Create(rThisNodes), pGetProperties()); p_new_elem->SetData(this->GetData()); p_new_elem->Set(Flags(*this)); @@ -105,7 +105,7 @@ Element::Pointer LinearTrussElement2D::Clone( /***********************************************************************************/ template -void LinearTrussElement2D::EquationIdVector( +void LinearTrussElement::EquationIdVector( EquationIdVectorType& rResult, const ProcessInfo& rCurrentProcessInfo ) const @@ -129,7 +129,7 @@ void LinearTrussElement2D::EquationIdVector( /***********************************************************************************/ template -void LinearTrussElement2D::GetDofList( +void LinearTrussElement::GetDofList( DofsVectorType& rElementalDofList, const ProcessInfo& rCurrentProcessInfo ) const @@ -152,7 +152,7 @@ void LinearTrussElement2D::GetDofList( /***********************************************************************************/ template -void LinearTrussElement2D::GetShapeFunctionsValues( +void LinearTrussElement::GetShapeFunctionsValues( SystemSizeBoundedArrayType& rN, const double Length, const double xi @@ -163,7 +163,7 @@ void LinearTrussElement2D::GetShapeFunctionsValues( rN.clear(); array_1d base_N; - noalias(base_N) = this->GetBaseShapeFunctions(xi); + noalias(base_N) = GetBaseShapeFunctions(xi); if constexpr (NNodes == 2) { rN[0] = base_N[0]; @@ -179,7 +179,7 @@ void LinearTrussElement2D::GetShapeFunctionsValues( /***********************************************************************************/ template -void LinearTrussElement2D::GetShapeFunctionsValuesY( +void LinearTrussElement::GetShapeFunctionsValuesY( SystemSizeBoundedArrayType& rN, const double Length, const double xi @@ -206,7 +206,7 @@ void LinearTrussElement2D::GetShapeFunctionsValuesY( /***********************************************************************************/ template -void LinearTrussElement2D::GetShapeFunctionsValuesZ( +void LinearTrussElement::GetShapeFunctionsValuesZ( SystemSizeBoundedArrayType& rN, const double Length, const double xi @@ -222,7 +222,7 @@ void LinearTrussElement2D::GetShapeFunctionsValuesZ( /***********************************************************************************/ template -void LinearTrussElement2D::GetFirstDerivativesShapeFunctionsValues( +void LinearTrussElement::GetFirstDerivativesShapeFunctionsValues( SystemSizeBoundedArrayType& rdN_dX, const double Length, const double xi @@ -248,7 +248,7 @@ void LinearTrussElement2D::GetFirstDerivativesShapeFunction /***********************************************************************************/ template -void LinearTrussElement2D::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const +void LinearTrussElement::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const { if constexpr (TDimension == 2) { if (rNodalValues.size() != SystemSize) @@ -287,7 +287,7 @@ void LinearTrussElement2D::GetNodalValuesVector(SystemSizeB /***********************************************************************************/ template -array_1d LinearTrussElement2D::GetLocalAxesBodyForce( +array_1d LinearTrussElement::GetLocalAxesBodyForce( const Element &rElement, const GeometryType::IntegrationPointsArrayType &rIntegrationPoints, const IndexType PointNumber @@ -308,7 +308,7 @@ array_1d LinearTrussElement2D::GetLocalAxesBodyF /***********************************************************************************/ template -void LinearTrussElement2D::CalculateLocalSystem( +void LinearTrussElement::CalculateLocalSystem( MatrixType& rLHS, VectorType& rRHS, const ProcessInfo& rProcessInfo @@ -384,7 +384,7 @@ void LinearTrussElement2D::CalculateLocalSystem( /***********************************************************************************/ template -void LinearTrussElement2D::CalculateLeftHandSide( +void LinearTrussElement::CalculateLeftHandSide( MatrixType& rLHS, const ProcessInfo& rProcessInfo ) @@ -445,7 +445,7 @@ void LinearTrussElement2D::CalculateLeftHandSide( /***********************************************************************************/ template -void LinearTrussElement2D::CalculateRightHandSide( +void LinearTrussElement::CalculateRightHandSide( VectorType& rRHS, const ProcessInfo& rProcessInfo ) @@ -513,7 +513,7 @@ void LinearTrussElement2D::CalculateRightHandSide( /***********************************************************************************/ template -void LinearTrussElement2D::RotateLHS( +void LinearTrussElement::RotateLHS( MatrixType& rLHS ) { @@ -540,7 +540,7 @@ void LinearTrussElement2D::RotateLHS( /***********************************************************************************/ template -void LinearTrussElement2D::RotateRHS( +void LinearTrussElement::RotateRHS( VectorType& rRHS ) { @@ -567,7 +567,7 @@ void LinearTrussElement2D::RotateRHS( /***********************************************************************************/ template -void LinearTrussElement2D::RotateAll( +void LinearTrussElement::RotateAll( MatrixType& rLHS, VectorType& rRHS ) @@ -599,7 +599,7 @@ void LinearTrussElement2D::RotateAll( /***********************************************************************************/ template -void LinearTrussElement2D::CalculateOnIntegrationPoints( +void LinearTrussElement::CalculateOnIntegrationPoints( const Variable& rVariable, std::vector& rOutput, const ProcessInfo& rProcessInfo @@ -678,7 +678,7 @@ void LinearTrussElement2D::CalculateOnIntegrationPoints( /***********************************************************************************/ template -void LinearTrussElement2D::CalculateOnIntegrationPoints( +void LinearTrussElement::CalculateOnIntegrationPoints( const Variable& rVariable, std::vector& rValues, const ProcessInfo& rCurrentProcessInfo @@ -699,7 +699,7 @@ void LinearTrussElement2D::CalculateOnIntegrationPoints( /***********************************************************************************/ template -int LinearTrussElement2D::Check(const ProcessInfo& rCurrentProcessInfo) const +int LinearTrussElement::Check(const ProcessInfo& rCurrentProcessInfo) const { KRATOS_TRY; @@ -713,7 +713,7 @@ int LinearTrussElement2D::Check(const ProcessInfo& rCurrent /***********************************************************************************/ template -void LinearTrussElement2D::save(Serializer& rSerializer) const +void LinearTrussElement::save(Serializer& rSerializer) const { KRATOS_SERIALIZE_SAVE_BASE_CLASS(rSerializer, Element); int IntMethod = int(this->GetIntegrationMethod()); @@ -725,7 +725,7 @@ void LinearTrussElement2D::save(Serializer& rSerializer) co /***********************************************************************************/ template -void LinearTrussElement2D::load(Serializer& rSerializer) +void LinearTrussElement::load(Serializer& rSerializer) { KRATOS_SERIALIZE_LOAD_BASE_CLASS(rSerializer, Element); int IntMethod; @@ -738,7 +738,7 @@ void LinearTrussElement2D::load(Serializer& rSerializer) /***********************************************************************************/ template -array_1d LinearTrussElement2D::GetBaseShapeFunctions(const double xi) const +array_1d LinearTrussElement::GetBaseShapeFunctions(const double xi) const { array_1d N; @@ -756,11 +756,11 @@ array_1d LinearTrussElement2D::GetBaseShap /***********************************************************************************/ /***********************************************************************************/ -template class LinearTrussElement2D<2, 2>; -template class LinearTrussElement2D<3, 2>; +template class LinearTrussElement<2, 2>; +template class LinearTrussElement<3, 2>; // In order to link -template class LinearTrussElement2D<2, 3>; -template class LinearTrussElement2D<3, 3>; +template class LinearTrussElement<2, 3>; +template class LinearTrussElement<3, 3>; } // Namespace Kratos diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h similarity index 95% rename from applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h rename to applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h index 8270bfeb4491..fc8fe8a1c563 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_2D.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h @@ -45,7 +45,7 @@ using SizeType = std::size_t; ///@{ /** - * @class LinearTrussElement2D + * @class LinearTrussElement * @ingroup StructuralMechanicsApplication * @brief This is the Linear 2D TRUSS element of 2 and 3 nodes. * O---------O -> x' O-----O-----O -> x' @@ -53,7 +53,7 @@ using SizeType = std::size_t; * @author Alejandro Cornejo */ template -class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D +class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement : public Element { @@ -71,32 +71,32 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D using SystemSizeBoundedArrayType = array_1d; // Counted pointer of BaseSolidElement - KRATOS_CLASS_INTRUSIVE_POINTER_DEFINITION(LinearTrussElement2D); + KRATOS_CLASS_INTRUSIVE_POINTER_DEFINITION(LinearTrussElement); ///@} ///@name Life Cycle ///@{ // Constructor void - LinearTrussElement2D() + LinearTrussElement() { } // Constructor using an array of nodes - LinearTrussElement2D(IndexType NewId, GeometryType::Pointer pGeometry) : Element(NewId, pGeometry) + LinearTrussElement(IndexType NewId, GeometryType::Pointer pGeometry) : Element(NewId, pGeometry) { mThisIntegrationMethod = CalculateIntegrationMethod(); } // Constructor using an array of nodes with properties - LinearTrussElement2D(IndexType NewId, GeometryType::Pointer pGeometry, PropertiesType::Pointer pProperties) + LinearTrussElement(IndexType NewId, GeometryType::Pointer pGeometry, PropertiesType::Pointer pProperties) : Element(NewId,pGeometry,pProperties) { mThisIntegrationMethod = CalculateIntegrationMethod(); } // Copy constructor - LinearTrussElement2D(LinearTrussElement2D const& rOther) + LinearTrussElement(LinearTrussElement const& rOther) : BaseType(rOther), mThisIntegrationMethod(rOther.mThisIntegrationMethod), mConstitutiveLawVector(rOther.mConstitutiveLawVector) @@ -106,13 +106,13 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D // Create method Element::Pointer Create(IndexType NewId, NodesArrayType const& ThisNodes, PropertiesType::Pointer pProperties) const override { - return Kratos::make_intrusive(NewId, GetGeometry().Create(ThisNodes), pProperties); + return Kratos::make_intrusive(NewId, GetGeometry().Create(ThisNodes), pProperties); } // Create method Element::Pointer Create( IndexType NewId, GeometryType::Pointer pGeom, PropertiesType::Pointer pProperties ) const override { - return Kratos::make_intrusive(NewId, pGeom, pProperties); + return Kratos::make_intrusive(NewId, pGeom, pProperties); } ///@} @@ -474,7 +474,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement2D void load(Serializer &rSerializer) override; -}; // class LinearTrussElement2D. +}; // class LinearTrussElement. ///@} ///@name Type Definitions diff --git a/applications/StructuralMechanicsApplication/structural_mechanics_application.h b/applications/StructuralMechanicsApplication/structural_mechanics_application.h index 9c53e9dea9f7..777329851492 100644 --- a/applications/StructuralMechanicsApplication/structural_mechanics_application.h +++ b/applications/StructuralMechanicsApplication/structural_mechanics_application.h @@ -34,8 +34,7 @@ #include "custom_elements/truss_elements/truss_element_3D2N.hpp" #include "custom_elements/truss_elements/truss_element_linear_3D2N.hpp" #include "custom_elements/truss_elements/cable_element_3D2N.hpp" -#include "custom_elements/truss_elements/linear_truss_element_2D.h" -#include "custom_elements/truss_elements/linear_truss_element_3D.h" +#include "custom_elements/truss_elements/linear_truss_element.h" /* Adding beam element */ #include "custom_elements/beam_elements/cr_beam_element_3D2N.hpp" From ca00a969fd3ec05a545370ed9cf991be221824f9 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 2 Dec 2024 10:15:09 +0100 Subject: [PATCH 068/142] unified --- .../truss_elements/linear_truss_element.cpp | 304 +++++++++---- .../truss_elements/linear_truss_element.h | 48 ++- .../linear_truss_element_3D.cpp | 408 ------------------ .../truss_elements/linear_truss_element_3D.h | 316 -------------- .../structural_mechanics_application.h | 8 +- 5 files changed, 260 insertions(+), 824 deletions(-) delete mode 100644 applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp delete mode 100644 applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp index 8a130d96779b..da3f58f779d8 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp @@ -17,7 +17,7 @@ // Project includes // Application includes -#include "linear_truss_element_2D.h" +#include "linear_truss_element.h" #include "custom_utilities/constitutive_law_utilities.h" #include "structural_mechanics_application_variables.h" @@ -122,6 +122,9 @@ void LinearTrussElement::EquationIdVector( for (IndexType i = 0; i < number_of_nodes; ++i) { rResult[local_index++] = r_geometry[i].GetDof(DISPLACEMENT_X, xpos ).EquationId(); rResult[local_index++] = r_geometry[i].GetDof(DISPLACEMENT_Y, xpos + 1).EquationId(); + if constexpr (Dimension == 3) { + rResult[local_index++] = r_geometry[i].GetDof(DISPLACEMENT_Z, xpos + 2).EquationId(); + } } } @@ -144,6 +147,9 @@ void LinearTrussElement::GetDofList( const SizeType index = i * DofsPerNode; rElementalDofList[index] = r_geom[i].pGetDof(DISPLACEMENT_X); rElementalDofList[index + 1] = r_geom[i].pGetDof(DISPLACEMENT_Y); + if constexpr (Dimension == 3) { + rElementalDofList[index + 2] = r_geom[i].pGetDof(DISPLACEMENT_Z); + } } KRATOS_CATCH("") } @@ -165,14 +171,26 @@ void LinearTrussElement::GetShapeFunctionsValues( array_1d base_N; noalias(base_N) = GetBaseShapeFunctions(xi); - if constexpr (NNodes == 2) { - rN[0] = base_N[0]; - rN[2] = base_N[1]; - } else { // 3N - rN[0] = base_N[0]; - rN[2] = base_N[1]; - rN[4] = base_N[2]; + if constexpr (Dimension == 2) { + if constexpr (NNodes == 2) { + rN[0] = base_N[0]; + rN[2] = base_N[1]; + } else { // 3N + rN[0] = base_N[0]; + rN[2] = base_N[1]; + rN[4] = base_N[2]; + } + } else { + if constexpr (NNodes == 2) { + rN[0] = base_N[0]; + rN[3] = base_N[1]; + } else { // 3N + rN[0] = base_N[0]; + rN[3] = base_N[1]; + rN[6] = base_N[2]; + } } + } /***********************************************************************************/ @@ -191,14 +209,25 @@ void LinearTrussElement::GetShapeFunctionsValuesY( rN.clear(); array_1d base_N; noalias(base_N) = GetBaseShapeFunctions(xi); - - if constexpr (NNodes == 2) { - rN[1] = base_N[0]; - rN[3] = base_N[1]; - } else { // 3N - rN[1] = base_N[0]; - rN[3] = base_N[1]; - rN[5] = base_N[2]; + + if constexpr (Dimension == 2) { + if constexpr (NNodes == 2) { + rN[1] = base_N[0]; + rN[3] = base_N[1]; + } else { // 3N + rN[1] = base_N[0]; + rN[3] = base_N[1]; + rN[5] = base_N[2]; + } + } else { + if constexpr (NNodes == 2) { + rN[1] = base_N[0]; + rN[4] = base_N[1]; + } else { // 3N + rN[1] = base_N[0]; + rN[4] = base_N[1]; + rN[7] = base_N[2]; + } } } @@ -216,6 +245,19 @@ void LinearTrussElement::GetShapeFunctionsValuesZ( rN.resize(SystemSize, false); rN.clear(); + + if constexpr (Dimension == 3) { + array_1d base_N; + noalias(base_N) = GetBaseShapeFunctions(xi); + if constexpr (NNodes == 2) { + rN[2] = base_N[0]; + rN[5] = base_N[1]; + } else { // 3N + rN[2] = base_N[0]; + rN[5] = base_N[1]; + rN[8] = base_N[2]; + } + } } /***********************************************************************************/ @@ -232,33 +274,93 @@ void LinearTrussElement::GetFirstDerivativesShapeFunctionsV rdN_dX.resize(SystemSize, false); rdN_dX.clear(); - if constexpr (NNodes == 2) { - const double inverse_l = 1.0 / Length; - rdN_dX[0] = -inverse_l; - rdN_dX[2] = inverse_l; - } else { // 3N - rdN_dX[0] = xi - 0.5; - rdN_dX[2] = xi + 0.5; - rdN_dX[4] = -2.0 * xi; - rdN_dX *= 2.0 / Length; // The Jacobian + + if constexpr (Dimension == 2) { + if constexpr (NNodes == 2) { + const double inverse_l = 1.0 / Length; + rdN_dX[0] = -inverse_l; + rdN_dX[2] = inverse_l; + } else { // 3N + rdN_dX[0] = xi - 0.5; + rdN_dX[2] = xi + 0.5; + rdN_dX[4] = -2.0 * xi; + rdN_dX *= 2.0 / Length; // The Jacobian + } + } else { + if constexpr (NNodes == 2) { + const double inverse_l = 1.0 / Length; + rdN_dX[0] = -inverse_l; + rdN_dX[3] = inverse_l; + } else { // 3N + rdN_dX[0] = xi - 0.5; + rdN_dX[3] = xi + 0.5; + rdN_dX[6] = -2.0 * xi; + rdN_dX *= 2.0 / Length; // The Jacobian + } } } /***********************************************************************************/ /***********************************************************************************/ +template +BoundedMatrix LinearTrussElement::GetFrenetSerretMatrix() const +{ + const auto &r_geom = GetGeometry(); + BoundedMatrix T; + T.clear(); // global to local + + array_1d t; + array_1d n; + array_1d m; + + // t is the axis of the truss + noalias(t) = r_geom[1].GetInitialPosition() - r_geom[0].GetInitialPosition(); + t /= norm_2(t); + + n.clear(); + n[1] = 1.0; + + if (norm_2(t-n) <= 1.0e-8) { // colineal, hence we use another aux vector + n.clear(); + n[2] = 1.0; + } + + // Gram-Schmidt ortogonalization + n = n - inner_prod(t, n) / inner_prod(t, t) * t; + n /= norm_2(n); + + noalias(m) = MathUtils::CrossProduct(t, n); + + T(0, 0) = t[0]; + T(0, 1) = t[1]; + T(0, 2) = t[2]; + + T(1, 0) = n[0]; + T(1, 1) = n[1]; + T(1, 2) = n[2]; + + T(2, 0) = m[0]; + T(2, 1) = m[1]; + T(2, 2) = m[2]; + + return T; +} + +/***********************************************************************************/ +/***********************************************************************************/ + template void LinearTrussElement::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const { + if (rNodalValues.size() != SystemSize) + rNodalValues.resize(SystemSize, false); + const auto &r_geom = GetGeometry(); + BoundedVector global_values; + if constexpr (TDimension == 2) { - if (rNodalValues.size() != SystemSize) - rNodalValues.resize(SystemSize, false); - const auto &r_geom = GetGeometry(); const double angle = GetAngle(); - - BoundedVector global_values; - // We fill the vector with global values for (SizeType i = 0; i < NNodes; ++i) { const auto& r_displ = r_geom[i].FastGetSolutionStepValue(DISPLACEMENT); @@ -280,6 +382,26 @@ void LinearTrussElement::GetNodalValuesVector(SystemSizeBou } else { noalias(rNodalValues) = global_values; } + } else { + // We fill the vector with global values + for (SizeType i = 0; i < NNodes; ++i) { + const auto& r_displ = r_geom[i].FastGetSolutionStepValue(DISPLACEMENT); + global_values[i * DofsPerNode] = r_displ[0]; + global_values[i * DofsPerNode + 1] = r_displ[1]; + global_values[i * DofsPerNode + 2] = r_displ[2]; + } + + BoundedMatrix T; + noalias(T) = GetFrenetSerretMatrix(); // global to local + BoundedMatrix global_size_T; + + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); + } + + noalias(rNodalValues) = prod(global_size_T, global_values); } } @@ -293,15 +415,23 @@ array_1d LinearTrussElement::GetLocalAxesBodyFor const IndexType PointNumber ) const { - const double angle = GetAngle(); const auto body_force = StructuralMechanicsElementUtilities::GetBodyForce(*this, rIntegrationPoints, PointNumber); - - const double c = std::cos(angle); - const double s = std::sin(angle); array_1d local_body_force = ZeroVector(3); - local_body_force[0] = c * body_force[0] + s * body_force[1]; - local_body_force[1] = -s * body_force[0] + c * body_force[1]; - return local_body_force; + + if constexpr (Dimension == 2) { + const double angle = GetAngle(); + + const double c = std::cos(angle); + const double s = std::sin(angle); + local_body_force[0] = c * body_force[0] + s * body_force[1]; + local_body_force[1] = -s * body_force[0] + c * body_force[1]; + return local_body_force; + } else { + BoundedMatrix T; + noalias(T) = GetFrenetSerretMatrix(); // global to local + noalias(local_body_force) = prod(T, body_force); + return local_body_force; + } } /***********************************************************************************/ @@ -517,23 +647,28 @@ void LinearTrussElement::RotateLHS( MatrixType& rLHS ) { + BoundedMatrix global_size_T, aux_product; + BoundedMatrix T; if constexpr (TDimension == 2) { const double angle = GetAngle(); - if (std::abs(angle) > std::numeric_limits::epsilon()) { - BoundedMatrix T; - BoundedMatrix global_size_T, aux_product; - StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); - if constexpr (NNodes == 2) { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); - } else { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); - } + StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + } + } else { + noalias(T) = trans(GetFrenetSerretMatrix()); // global to local - noalias(aux_product) = prod(rLHS, trans(global_size_T)); - noalias(rLHS) = prod(global_size_T, aux_product); + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); } } + noalias(aux_product) = prod(rLHS, trans(global_size_T)); + noalias(rLHS) = prod(global_size_T, aux_product); } /***********************************************************************************/ @@ -544,23 +679,30 @@ void LinearTrussElement::RotateRHS( VectorType& rRHS ) { + BoundedMatrix T; + BoundedMatrix global_size_T; + BoundedVector local_rhs; + noalias(local_rhs) = rRHS; + if constexpr (TDimension == 2) { const double angle = GetAngle(); - if (std::abs(angle) > std::numeric_limits::epsilon()) { - BoundedMatrix T; - BoundedMatrix global_size_T; - BoundedVector local_rhs; - noalias(local_rhs) = rRHS; - StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); - if constexpr (NNodes == 2) { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); - } else { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); - } + StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + } - noalias(rRHS) = prod(global_size_T, local_rhs); + } else { + noalias(T) = trans(GetFrenetSerretMatrix()); // global to local + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); } } + + noalias(rRHS) = prod(global_size_T, local_rhs); } /***********************************************************************************/ @@ -572,27 +714,33 @@ void LinearTrussElement::RotateAll( VectorType& rRHS ) { - if constexpr (TDimension == 2) { - const double angle = GetAngle(); - if (std::abs(angle) > std::numeric_limits::epsilon()) { - BoundedMatrix T; - BoundedMatrix global_size_T, aux_product; - BoundedVector local_rhs; - StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); + BoundedMatrix T; + BoundedMatrix global_size_T, aux_product; + BoundedVector local_rhs; - if constexpr (NNodes == 2) { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); - } else { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); - } + if constexpr (Dimension == 2) { + const double angle = GetAngle(); + StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); - noalias(local_rhs) = rRHS; - noalias(rRHS) = prod(global_size_T, local_rhs); + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); + } - noalias(aux_product) = prod(rLHS, trans(global_size_T)); - noalias(rLHS) = prod(global_size_T, aux_product); + } else { + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); + } else { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); } } + + noalias(local_rhs) = rRHS; + noalias(rRHS) = prod(global_size_T, local_rhs); + + noalias(aux_product) = prod(rLHS, trans(global_size_T)); + noalias(rLHS) = prod(global_size_T, aux_product); } /***********************************************************************************/ @@ -758,8 +906,6 @@ array_1d LinearTrussElement::GetBaseShapeF template class LinearTrussElement<2, 2>; template class LinearTrussElement<3, 2>; - -// In order to link template class LinearTrussElement<2, 3>; template class LinearTrussElement<3, 3>; diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h index fc8fe8a1c563..5e8d734d1cc1 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h @@ -47,7 +47,7 @@ using SizeType = std::size_t; /** * @class LinearTrussElement * @ingroup StructuralMechanicsApplication - * @brief This is the Linear 2D TRUSS element of 2 and 3 nodes. + * @brief This is the Linear TRUSS element of 2 and 3 nodes for 2D and 3D. * O---------O -> x' O-----O-----O -> x' * 0 1 0 2 1 * @author Alejandro Cornejo @@ -64,11 +64,11 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement /// The base element type using BaseType = Element; - static constexpr SizeType NNodes = TNNodes; - static constexpr SizeType Dimension = TDimension; + static constexpr SizeType NNodes = TNNodes; + static constexpr SizeType Dimension = TDimension; static constexpr SizeType DofsPerNode = TDimension; - static constexpr SizeType SystemSize = TDimension * TNNodes; - using SystemSizeBoundedArrayType = array_1d; + static constexpr SizeType SystemSize = TDimension * TNNodes; + using SystemSizeBoundedArrayType = array_1d; // Counted pointer of BaseSolidElement KRATOS_CLASS_INTRUSIVE_POINTER_DEFINITION(LinearTrussElement); @@ -125,12 +125,22 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement /** * @brief This method returns the angle of the FE axis + * 2D calculations */ double GetAngle() const { return StructuralMechanicsElementUtilities::GetReferenceRotationAngle2D2NBeam(GetGeometry()); } + /** + * @brief This function builds the Frenet Serret matrix that rotates from global to local axes + * T = | <- t -> | x, local + * | <- n -> | y, local + * | <- m -> | z, local + * 3D calculations + */ + BoundedMatrix GetFrenetSerretMatrix() const; + /** * @brief This method returns the integration method depending on the Number of Nodes */ @@ -152,15 +162,19 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement * @brief Returns a n component vector including the values of the DoFs * in LOCAL beam axes */ - virtual void GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValue) const; + void GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValue) const; /** * @brief Computes the length of the FE and returns it */ - virtual double CalculateLength() const + double CalculateLength() const { - // Same implementation for 2N and 3N - return StructuralMechanicsElementUtilities::CalculateReferenceLength2D2N(*this); + if constexpr (Dimension == 2) { + // Same implementation for 2N and 3N + return StructuralMechanicsElementUtilities::CalculateReferenceLength2D2N(*this); + } else { + return StructuralMechanicsElementUtilities::CalculateReferenceLength3D2N(*this); + } } /** @@ -244,17 +258,17 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement * @param Phi The shear slenderness parameter * @param xi The coordinate in the natural axes */ - virtual void GetShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; - virtual void GetShapeFunctionsValuesY(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; - virtual void GetShapeFunctionsValuesZ(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; - virtual void GetFirstDerivativesShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; + void GetShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; + void GetShapeFunctionsValuesY(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; + void GetShapeFunctionsValuesZ(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; + void GetFirstDerivativesShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const; /** * @brief This function rotates the LHS from local to global coordinates * @param rLHS the left hand side * @param rGeometry the geometry of the FE */ - virtual void RotateLHS( + void RotateLHS( MatrixType &rLHS); /** @@ -262,7 +276,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement * @param rRHS the right hand side * @param rGeometry the geometry of the FE */ - virtual void RotateRHS( + void RotateRHS( VectorType &rRHS); /** @@ -271,7 +285,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement * @param rRHS the right hand side * @param rGeometry the geometry of the FE */ - virtual void RotateAll( + void RotateAll( MatrixType &rLHS, VectorType &rRHS); @@ -281,7 +295,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement * @param rIntegrationPoints array of IP * @param PointNumber tthe IP to be evaluated */ - virtual array_1d GetLocalAxesBodyForce( + array_1d GetLocalAxesBodyForce( const Element &rElement, const GeometryType::IntegrationPointsArrayType &rIntegrationPoints, const IndexType PointNumber) const; diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp deleted file mode 100644 index 17641915094b..000000000000 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.cpp +++ /dev/null @@ -1,408 +0,0 @@ -// KRATOS ___| | | | -// \___ \ __| __| | | __| __| | | __| _` | | -// | | | | | ( | | | | ( | | -// _____/ \__|_| \__,_|\___|\__|\__,_|_| \__,_|_| MECHANICS -// -// License: BSD License -// license: StructuralMechanicsApplication/license.txt -// -// Main authors: Alejandro Cornejo -// -// - -// System includes - -// External includes - -// Project includes - -// Application includes -#include "linear_truss_element_3D.h" -#include "custom_utilities/constitutive_law_utilities.h" -#include "structural_mechanics_application_variables.h" - -namespace Kratos -{ - -/***********************************************************************************/ -/***********************************************************************************/ - -template -Element::Pointer LinearTrussElement3D::Clone( - IndexType NewId, - NodesArrayType const& rThisNodes - ) const -{ - KRATOS_TRY - - LinearTrussElement3D::Pointer p_new_elem = Kratos::make_intrusive>(NewId, GetGeometry().Create(rThisNodes), pGetProperties()); - p_new_elem->SetData(this->GetData()); - p_new_elem->Set(Flags(*this)); - - // Currently selected integration methods - p_new_elem->SetIntegrationMethod(mThisIntegrationMethod); - - // The vector containing the constitutive laws - p_new_elem->SetConstitutiveLawVector(mConstitutiveLawVector); - - return p_new_elem; - - KRATOS_CATCH(""); -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::EquationIdVector( - EquationIdVectorType& rResult, - const ProcessInfo& rCurrentProcessInfo - ) const -{ - const auto& r_geometry = this->GetGeometry(); - const SizeType number_of_nodes = r_geometry.size(); - IndexType local_index = 0; - - if (rResult.size() != SystemSize) - rResult.resize(SystemSize, false); - - const IndexType xpos = this->GetGeometry()[0].GetDofPosition(DISPLACEMENT_X); - - for (IndexType i = 0; i < number_of_nodes; ++i) { - rResult[local_index++] = r_geometry[i].GetDof(DISPLACEMENT_X, xpos ).EquationId(); - rResult[local_index++] = r_geometry[i].GetDof(DISPLACEMENT_Y, xpos + 1).EquationId(); - rResult[local_index++] = r_geometry[i].GetDof(DISPLACEMENT_Z, xpos + 2).EquationId(); - } -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::GetDofList( - DofsVectorType& rElementalDofList, - const ProcessInfo& rCurrentProcessInfo - ) const -{ - KRATOS_TRY; - - const auto& r_geom = GetGeometry(); - const SizeType number_of_nodes = r_geom.size(); - rElementalDofList.resize(SystemSize); - - for (IndexType i = 0; i < number_of_nodes; ++i) { - const SizeType index = i * DofsPerNode; - rElementalDofList[index] = r_geom[i].pGetDof(DISPLACEMENT_X); - rElementalDofList[index + 1] = r_geom[i].pGetDof(DISPLACEMENT_Y); - rElementalDofList[index + 2] = r_geom[i].pGetDof(DISPLACEMENT_Z); - } - - KRATOS_CATCH("") -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::GetShapeFunctionsValues( - SystemSizeBoundedArrayType& rN, - const double Length, - const double xi - ) const -{ - if (rN.size() != SystemSize) - rN.resize(SystemSize, false); - - rN.clear(); - array_1d base_N; - noalias(base_N) = GetBaseShapeFunctions(xi); - - if constexpr (NNodes == 2) { - rN[0] = base_N[0]; - rN[3] = base_N[1]; - } else { // 3N - rN[0] = base_N[0]; - rN[3] = base_N[1]; - rN[6] = base_N[2]; - } -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::GetShapeFunctionsValuesY( - SystemSizeBoundedArrayType& rN, - const double Length, - const double xi - ) const -{ - if (rN.size() != SystemSize) - rN.resize(SystemSize, false); - - rN.clear(); - array_1d base_N; - noalias(base_N) = GetBaseShapeFunctions(xi); - - if constexpr (NNodes == 2) { - rN[1] = base_N[0]; - rN[4] = base_N[1]; - } else { // 3N - rN[1] = base_N[0]; - rN[4] = base_N[1]; - rN[7] = base_N[2]; - } -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::GetShapeFunctionsValuesZ( - SystemSizeBoundedArrayType& rN, - const double Length, - const double xi - ) const -{ - if (rN.size() != SystemSize) - rN.resize(SystemSize, false); - - rN.clear(); - array_1d base_N; - noalias(base_N) = GetBaseShapeFunctions(xi); - - if constexpr (NNodes == 2) { - rN[2] = base_N[0]; - rN[5] = base_N[1]; - } else { // 3N - rN[2] = base_N[0]; - rN[5] = base_N[1]; - rN[8] = base_N[2]; - } -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::GetFirstDerivativesShapeFunctionsValues( - SystemSizeBoundedArrayType& rdN_dX, - const double Length, - const double xi - ) const -{ - if (rdN_dX.size() != SystemSize) - rdN_dX.resize(SystemSize, false); - - rdN_dX.clear(); - - if constexpr (NNodes == 2) { - const double inverse_l = 1.0 / Length; - rdN_dX[0] = -inverse_l; - rdN_dX[3] = inverse_l; - } else { // 3N - rdN_dX[0] = xi - 0.5; - rdN_dX[3] = xi + 0.5; - rdN_dX[6] = -2.0 * xi; - rdN_dX *= 2.0 / Length; // The Jacobian - } -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -BoundedMatrix LinearTrussElement3D::GetFrenetSerretMatrix() const -{ - const auto &r_geom = GetGeometry(); - BoundedMatrix T; - T.clear(); // global to local - - array_1d t; - array_1d n; - array_1d m; - - // t is the axis of the truss - noalias(t) = r_geom[1].GetInitialPosition() - r_geom[0].GetInitialPosition(); - t /= norm_2(t); - - n.clear(); - n[1] = 1.0; - - if (norm_2(t-n) <= 1.0e-8) { // colineal, hence we use another aux vector - n.clear(); - n[2] = 1.0; - } - - // Gram-Schmidt ortogonalization - n = n - inner_prod(t, n) / inner_prod(t, t) * t; - n /= norm_2(n); - - noalias(m) = MathUtils::CrossProduct(t, n); - - T(0, 0) = t[0]; - T(0, 1) = t[1]; - T(0, 2) = t[2]; - - T(1, 0) = n[0]; - T(1, 1) = n[1]; - T(1, 2) = n[2]; - - T(2, 0) = m[0]; - T(2, 1) = m[1]; - T(2, 2) = m[2]; - - return T; -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const -{ - if (rNodalValues.size() != SystemSize) - rNodalValues.resize(SystemSize, false); - const auto &r_geom = GetGeometry(); - - BoundedVector global_values; - - // We fill the vector with global values - for (SizeType i = 0; i < NNodes; ++i) { - const auto& r_displ = r_geom[i].FastGetSolutionStepValue(DISPLACEMENT); - global_values[i * DofsPerNode] = r_displ[0]; - global_values[i * DofsPerNode + 1] = r_displ[1]; - global_values[i * DofsPerNode + 2] = r_displ[2]; - } - - BoundedMatrix T; - noalias(T) = GetFrenetSerretMatrix(); // global to local - BoundedMatrix global_size_T; - - if constexpr (NNodes == 2) { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); - } else { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); - } - - noalias(rNodalValues) = prod(global_size_T, global_values); -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -array_1d LinearTrussElement3D::GetLocalAxesBodyForce( - const Element &rElement, - const GeometryType::IntegrationPointsArrayType &rIntegrationPoints, - const IndexType PointNumber - ) const -{ - const auto body_force = StructuralMechanicsElementUtilities::GetBodyForce(*this, rIntegrationPoints, PointNumber); - - array_1d local_body_force = ZeroVector(Dimension); - BoundedMatrix T; - noalias(T) = GetFrenetSerretMatrix(); // global to local - - noalias(local_body_force) = prod(T, body_force); - - return local_body_force; -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::RotateLHS( - MatrixType& rLHS -) -{ - BoundedMatrix T; - noalias(T) = trans(GetFrenetSerretMatrix()); // global to local - BoundedMatrix global_size_T, aux_product; - - if constexpr (NNodes == 2) { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); - } else { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); - } - noalias(aux_product) = prod(rLHS, trans(global_size_T)); - noalias(rLHS) = prod(global_size_T, aux_product); - -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::RotateRHS( - VectorType& rRHS -) -{ - BoundedMatrix T; - BoundedMatrix global_size_T; - noalias(T) = trans(GetFrenetSerretMatrix()); // global to local - BoundedVector local_rhs; - noalias(local_rhs) = rRHS; - - if constexpr (NNodes == 2) { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); - } else { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); - } - - noalias(rRHS) = prod(global_size_T, local_rhs); -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::RotateAll( - MatrixType& rLHS, - VectorType& rRHS -) -{ - BoundedMatrix T; - noalias(T) = trans(GetFrenetSerretMatrix()); // global to local - BoundedMatrix global_size_T, aux_product; - BoundedVector local_rhs; - - if constexpr (NNodes == 2) { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); - } else { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); - } - - noalias(local_rhs) = rRHS; - noalias(rRHS) = prod(global_size_T, local_rhs); - - noalias(aux_product) = prod(rLHS, trans(global_size_T)); - noalias(rLHS) = prod(global_size_T, aux_product); -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::save(Serializer& rSerializer) const -{ - KRATOS_SERIALIZE_SAVE_BASE_CLASS(rSerializer, BaseType); -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template -void LinearTrussElement3D::load(Serializer& rSerializer) -{ - KRATOS_SERIALIZE_LOAD_BASE_CLASS(rSerializer, BaseType); -} - -/***********************************************************************************/ -/***********************************************************************************/ - -template class LinearTrussElement3D<2, 3>; -template class LinearTrussElement3D<3, 3>; - -} // Namespace Kratos diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h deleted file mode 100644 index e374bdd47cbf..000000000000 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element_3D.h +++ /dev/null @@ -1,316 +0,0 @@ -// KRATOS ___| | | | -// \___ \ __| __| | | __| __| | | __| _` | | -// | | | | | ( | | | | ( | | -// _____/ \__|_| \__,_|\___|\__|\__,_|_| \__,_|_| MECHANICS -// -// License: BSD License -// license: StructuralMechanicsApplication/license.txt -// -// Main authors: Alejandro Cornejo -// -// - -#pragma once - -// System includes - -// External includes - -// Project includes -#include "linear_truss_element_2D.h" - -namespace Kratos -{ - -///@name Kratos Globals -///@{ - -///@} -///@name Type Definitions -///@{ - -using SizeType = std::size_t; - -///@} -///@name Enum's -///@{ - -///@} -///@name Functions -///@{ - -///@} -///@name Kratos Classes -///@{ - -/** - * @class LinearTrussElement3D - * @ingroup StructuralMechanicsApplication - * @brief This is the Linear 3D TRUSS element of 2 and 3 nodes. - * O---------O -> x' O-----O-----O -> x' - * 0 1 0 2 1 - * @author Alejandro Cornejo - */ -template -class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement3D - : public LinearTrussElement2D -{ - -public: - - ///@name Type Definitions - ///@{ - - /// The base element type - using BaseType = LinearTrussElement2D; - - // Counted pointer of BaseSolidElement - KRATOS_CLASS_INTRUSIVE_POINTER_DEFINITION(LinearTrussElement3D); - - ///@} - ///@name Life Cycle - ///@{ - - // Constructor void - LinearTrussElement3D() {} - - // Constructor using an array of nodes - LinearTrussElement3D(IndexType NewId, GeometryType::Pointer pGeometry) : BaseType(NewId, pGeometry) {} - - // Constructor using an array of nodes with properties - LinearTrussElement3D(IndexType NewId, GeometryType::Pointer pGeometry, PropertiesType::Pointer pProperties) : BaseType(NewId,pGeometry,pProperties) {} - - // Copy constructor - LinearTrussElement3D(LinearTrussElement3D const& rOther) : BaseType(rOther) {} - - // Create method - Element::Pointer Create(IndexType NewId, NodesArrayType const& ThisNodes, PropertiesType::Pointer pProperties) const override - { - return Kratos::make_intrusive(NewId, GetGeometry().Create(ThisNodes), pProperties); - } - - // Create method - Element::Pointer Create(IndexType NewId, GeometryType::Pointer pGeom, PropertiesType::Pointer pProperties) const override - { - return Kratos::make_intrusive(NewId, pGeom, pProperties); - } - - ///@} - ///@name Operators - ///@{ - - ///@} - ///@name Operations - ///@{ - - /** - * @brief This function builds the Frenet Serret matrix that rotates from global to local axes - * T = | <- t -> | x, local - * | <- n -> | y, local - * | <- m -> | z, local - */ - BoundedMatrix GetFrenetSerretMatrix() const; - - /** - * @brief Returns a n component vector including the values of the DoFs - * in LOCAL beam axes - */ - void GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValue) const override; - - /** - * @brief Computes the length of the FE and returns it - */ - double CalculateLength() const override - { - // Same implementation for 2N and 3N - return StructuralMechanicsElementUtilities::CalculateReferenceLength3D2N(*this); - } - - /** - * @brief It creates a new element pointer and clones the previous element data - * @param NewId the ID of the new element - * @param ThisNodes the nodes of the new element - * @param pProperties the properties assigned to the new element - * @return a Pointer to the new element - */ - Element::Pointer Clone( - IndexType NewId, - NodesArrayType const& rThisNodes - ) const override; - - /** - * @brief Sets on rResult the ID's of the element degrees of freedom - * @param rResult The vector containing the equation id - * @param rCurrentProcessInfo The current process info instance - */ - void EquationIdVector( - EquationIdVectorType& rResult, - const ProcessInfo& rCurrentProcessInfo - ) const override; - - /** - * @brief Sets on rElementalDofList the degrees of freedom of the considered element geometry - * @param rElementalDofList The vector containing the dof of the element - * @param rCurrentProcessInfo The current process info instance - */ - void GetDofList( - DofsVectorType& rElementalDofList, - const ProcessInfo& rCurrentProcessInfo - ) const override; - - /** - * @brief This function returns the 2/3 shape functions used for interpolating the displacements in x,y,z - * Also the derivatives of u to compute the longitudinal strain - * @param rN reference to the shape functions (or derivatives) - * @param Length The size of the beam element - * @param Phi The shear slenderness parameter - * @param xi The coordinate in the natural axes - */ - void GetShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const override; - void GetShapeFunctionsValuesY(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const override; - void GetShapeFunctionsValuesZ(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const override; - void GetFirstDerivativesShapeFunctionsValues(SystemSizeBoundedArrayType& rN, const double Length, const double xi) const override; - - /** - * @brief This function rotates the LHS from local to global coordinates - * @param rLHS the left hand side - * @param rGeometry the geometry of the FE - */ - void RotateLHS( - MatrixType &rLHS) override; - - /** - * @brief This function rotates the RHS from local to global coordinates - * @param rRHS the right hand side - * @param rGeometry the geometry of the FE - */ - void RotateRHS( - VectorType &rRHS) override; - - /** - * @brief This function rotates the LHS and RHS from local to global coordinates - * @param rLHS the left hand side - * @param rRHS the right hand side - * @param rGeometry the geometry of the FE - */ - void RotateAll( - MatrixType &rLHS, - VectorType &rRHS) override; - - /** - * @brief This function retrieves the body forces in local axes - * @param rElement the element reference - * @param rIntegrationPoints array of IP - * @param PointNumber tthe IP to be evaluated - */ - array_1d GetLocalAxesBodyForce( - const Element &rElement, - const GeometryType::IntegrationPointsArrayType &rIntegrationPoints, - const IndexType PointNumber) const override; - - ///@} - ///@name Access - ///@{ - - - ///@} - ///@name Inquiry - ///@{ - - - ///@} - ///@name Input and output - ///@{ - - /// Print information about this object. - void PrintInfo(std::ostream& rOStream) const override - { - rOStream << "Truss 3D Element #" << Id() << "\nConstitutive law: " << mConstitutiveLawVector[0]->Info(); - } - - /// Print object's data. - void PrintData(std::ostream& rOStream) const override - { - pGetGeometry()->PrintData(rOStream); - } - - ///@} - ///@name Friends - ///@{ - -protected: - - ///@name Protected static Member Variables - ///@{ - - ///@} - ///@name Protected member Variables - ///@{ - - ///@} - ///@name Protected Operators - ///@{ - - ///@} - ///@name Protected Operations - ///@{ - - ///@} - ///@name Protected Access - ///@{ - - ///@} - ///@name Protected Inquiry - ///@{ - - ///@} - ///@name Protected LifeCycle - ///@{ - -private: - ///@name Static Member Variables - ///@{ - - ///@} - ///@name Member Variables - ///@{ - - ///@} - ///@name Private Operators - ///@{ - - ///@} - ///@name Private Operations - ///@{ - - - ///@} - ///@name Private Access - ///@{ - - ///@} - ///@name Private Inquiry - ///@{ - - ///@} - ///@name Serialization - ///@{ - - friend class Serializer; - - void save(Serializer &rSerializer) const override; - - void load(Serializer &rSerializer) override; - -}; // class LinearTrussElement3D. - -///@} -///@name Type Definitions -///@{ - - -///@} -///@name Input and output -///@{ - -} // namespace Kratos. diff --git a/applications/StructuralMechanicsApplication/structural_mechanics_application.h b/applications/StructuralMechanicsApplication/structural_mechanics_application.h index 777329851492..8e571381a169 100644 --- a/applications/StructuralMechanicsApplication/structural_mechanics_application.h +++ b/applications/StructuralMechanicsApplication/structural_mechanics_application.h @@ -272,10 +272,10 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) KratosStructuralMechanicsAppl const TrussElement3D2N mTrussElement3D2N; const TrussElementLinear3D2N mTrussLinearElement3D2N; const CableElement3D2N mCableElement3D2N; - const LinearTrussElement2D<2, 2> mLinearTrussElement2D2N; - const LinearTrussElement2D<3, 2> mLinearTrussElement2D3N; - const LinearTrussElement3D<2, 3> mLinearTrussElement3D2N; - const LinearTrussElement3D<3, 3> mLinearTrussElement3D3N; + const LinearTrussElement<2, 2> mLinearTrussElement2D2N; + const LinearTrussElement<3, 2> mLinearTrussElement2D3N; + const LinearTrussElement<2, 3> mLinearTrussElement3D2N; + const LinearTrussElement<3, 3> mLinearTrussElement3D3N; // Adding the beam element const CrBeamElement3D2N mCrBeamElement3D2N; From 4fdcee5f08557f1bac809b374926b37658557933 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 2 Dec 2024 10:49:32 +0100 Subject: [PATCH 069/142] more --- .../truss_elements/linear_truss_element.cpp | 32 +++++++------------ .../truss_elements/linear_truss_element.h | 2 +- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp index da3f58f779d8..ac40beb6f01b 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp @@ -6,7 +6,7 @@ // License: BSD License // license: StructuralMechanicsApplication/license.txt // -// Main authors: Alejandro Cornejo +// Main authors: Alejandro Cornejo // // @@ -357,8 +357,10 @@ void LinearTrussElement::GetNodalValuesVector(SystemSizeBou rNodalValues.resize(SystemSize, false); const auto &r_geom = GetGeometry(); BoundedVector global_values; + BoundedMatrix T; + BoundedMatrix global_size_T; - if constexpr (TDimension == 2) { + if constexpr (Dimension == 2) { const double angle = GetAngle(); // We fill the vector with global values @@ -368,19 +370,11 @@ void LinearTrussElement::GetNodalValuesVector(SystemSizeBou global_values[i * DofsPerNode + 1] = r_displ[1]; } - if (std::abs(angle) > std::numeric_limits::epsilon()) { - BoundedMatrix T; - BoundedMatrix global_size_T; - StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); - if constexpr (NNodes == 2) { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); - } else { - StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); - } - // We rotate to local axes - noalias(rNodalValues) = prod(trans(global_size_T), global_values); + StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); + if constexpr (NNodes == 2) { + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D2NTruss(T, global_size_T); } else { - noalias(rNodalValues) = global_values; + StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); } } else { // We fill the vector with global values @@ -391,18 +385,14 @@ void LinearTrussElement::GetNodalValuesVector(SystemSizeBou global_values[i * DofsPerNode + 2] = r_displ[2]; } - BoundedMatrix T; noalias(T) = GetFrenetSerretMatrix(); // global to local - BoundedMatrix global_size_T; - if constexpr (NNodes == 2) { StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); } else { StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); } - - noalias(rNodalValues) = prod(global_size_T, global_values); } + noalias(rNodalValues) = prod(global_size_T, global_values); } /***********************************************************************************/ @@ -682,7 +672,6 @@ void LinearTrussElement::RotateRHS( BoundedMatrix T; BoundedMatrix global_size_T; BoundedVector local_rhs; - noalias(local_rhs) = rRHS; if constexpr (TDimension == 2) { const double angle = GetAngle(); @@ -701,7 +690,7 @@ void LinearTrussElement::RotateRHS( StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); } } - + noalias(local_rhs) = rRHS; noalias(rRHS) = prod(global_size_T, local_rhs); } @@ -729,6 +718,7 @@ void LinearTrussElement::RotateAll( } } else { + noalias(T) = trans(GetFrenetSerretMatrix()); // global to local if constexpr (NNodes == 2) { StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D2NTruss(T, global_size_T); } else { diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h index 5e8d734d1cc1..80ddcc9ac86a 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h @@ -6,7 +6,7 @@ // License: BSD License // license: StructuralMechanicsApplication/license.txt // -// Main authors: Alejandro Cornejo +// Main authors: Alejandro Cornejo // // From cb355d03279fb1f425d3296f170528a46c5673b5 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 2 Dec 2024 11:18:55 +0100 Subject: [PATCH 070/142] minor --- .../truss_elements/linear_truss_element.cpp | 8 ++++---- .../custom_elements/truss_elements/linear_truss_element.h | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp index ac40beb6f01b..5db5cac2303d 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp @@ -18,7 +18,6 @@ // Application includes #include "linear_truss_element.h" -#include "custom_utilities/constitutive_law_utilities.h" #include "structural_mechanics_application_variables.h" namespace Kratos @@ -376,6 +375,7 @@ void LinearTrussElement::GetNodalValuesVector(SystemSizeBou } else { StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor2D3NTruss(T, global_size_T); } + noalias(rNodalValues) = prod(trans(global_size_T), global_values); } else { // We fill the vector with global values for (SizeType i = 0; i < NNodes; ++i) { @@ -391,8 +391,8 @@ void LinearTrussElement::GetNodalValuesVector(SystemSizeBou } else { StructuralMechanicsElementUtilities::BuildElementSizeRotationMatrixFor3D3NTruss(T, global_size_T); } + noalias(rNodalValues) = prod(global_size_T, global_values); } - noalias(rNodalValues) = prod(global_size_T, global_values); } /***********************************************************************************/ @@ -639,7 +639,7 @@ void LinearTrussElement::RotateLHS( { BoundedMatrix global_size_T, aux_product; BoundedMatrix T; - if constexpr (TDimension == 2) { + if constexpr (Dimension == 2) { const double angle = GetAngle(); StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); @@ -673,7 +673,7 @@ void LinearTrussElement::RotateRHS( BoundedMatrix global_size_T; BoundedVector local_rhs; - if constexpr (TDimension == 2) { + if constexpr (Dimension == 2) { const double angle = GetAngle(); StructuralMechanicsElementUtilities::BuildRotationMatrixForTruss(T, angle); if constexpr (NNodes == 2) { diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h index 80ddcc9ac86a..f6b81c06bcd3 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h @@ -383,7 +383,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement /// Print information about this object. void PrintInfo(std::ostream& rOStream) const override { - rOStream << "Truss 2D Element #" << Id() << "\nConstitutive law: " << mConstitutiveLawVector[0]->Info(); + rOStream << "Truss Element #" << Id() << "\nConstitutive law: " << mConstitutiveLawVector[0]->Info(); } /// Print object's data. @@ -406,7 +406,6 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement ///@{ IntegrationMethod mThisIntegrationMethod = GeometryData::IntegrationMethod::GI_GAUSS_2; /// Currently selected integration methods - std::vector mConstitutiveLawVector; /// The vector containing the constitutive laws ///@} From 8f210175c839e304e927d10217cdfafc4d61b6a6 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 28 Nov 2024 21:24:12 +0100 Subject: [PATCH 071/142] adding capability --- kratos/includes/table_accessor.h | 2 ++ kratos/sources/table_accessor.cpp | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/kratos/includes/table_accessor.h b/kratos/includes/table_accessor.h index dd99a126d3d1..02c453dfc45b 100644 --- a/kratos/includes/table_accessor.h +++ b/kratos/includes/table_accessor.h @@ -77,6 +77,8 @@ class KRATOS_API(KRATOS_CORE) TableAccessor : public Accessor mInputVariableType = Globals::DataLocation::NodeNonHistorical; } else if (rInputVariableType == "element") { mInputVariableType = Globals::DataLocation::Element; + } else if (rInputVariableType == "process_info") { + mInputVariableType = Globals::DataLocation::ProcessInfo; } else { KRATOS_ERROR << "The table_input_variable_type is incorrect or not supported. Types available are : 'node_historical', 'node_non_historical' and 'element'" << std::endl; } diff --git a/kratos/sources/table_accessor.cpp b/kratos/sources/table_accessor.cpp index 19c3c863bc62..5e59303c2296 100644 --- a/kratos/sources/table_accessor.cpp +++ b/kratos/sources/table_accessor.cpp @@ -65,6 +65,9 @@ double TableAccessor::GetValueFromTable( } else if (mInputVariableType == Globals::DataLocation::Element) { KRATOS_DEBUG_ERROR_IF_NOT(rGeometry.Has(rIndependentVariable)) << "The Variable " << rIndependentVariable.Name() << " is not available at the Geometry to retrieve Table values." << std::endl; independent_at_gauss = rGeometry.GetValue(rIndependentVariable); + } else if (mInputVariableType == Globals::DataLocation::ProcessInfo) { + KRATOS_DEBUG_ERROR_IF_NOT(rProcessInfo.Has(rIndependentVariable)) << "The Variable " << rIndependentVariable.Name() << " is not available at the rProcessInfo to retrieve Table values." << std::endl; + independent_at_gauss = rProcessInfo.GetValue(rIndependentVariable); } else { KRATOS_ERROR << "The table_input_variable_type is incorrect or not supported. Types available are : nodal_historical, nodal_non_historical and elemental_non_historical" << std::endl; } @@ -80,7 +83,7 @@ double TableAccessor::GetValueFromTable( void TableAccessor::save(Serializer& rSerializer) const { rSerializer.save("InputVariable", mpInputVariable->Name()); - // // we must do the int cast to be able to compile + // we must do the int cast to be able to compile rSerializer.save("InputVariableType", static_cast(mInputVariableType)); } void TableAccessor::load(Serializer& rSerializer) @@ -89,7 +92,7 @@ void TableAccessor::load(Serializer& rSerializer) rSerializer.load("InputVariable", variable_name); mpInputVariable = static_cast *>(KratosComponents::pGet(variable_name)); - // // we must do the int cast to be able to compile + // we must do the int cast to be able to compile int enum_value; rSerializer.load("InputVariableType", enum_value); mInputVariableType = static_cast(enum_value); From 1d04d489695b4508bee3dbf930113a4fb00d4a43 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 28 Nov 2024 21:42:48 +0100 Subject: [PATCH 072/142] adding test --- .../includes/test_property_accessor.cpp | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/kratos/tests/cpp_tests/includes/test_property_accessor.cpp b/kratos/tests/cpp_tests/includes/test_property_accessor.cpp index 1a4ccd3495e1..34776a47e3b8 100644 --- a/kratos/tests/cpp_tests/includes/test_property_accessor.cpp +++ b/kratos/tests/cpp_tests/includes/test_property_accessor.cpp @@ -169,6 +169,62 @@ KRATOS_TEST_CASE_IN_SUITE(TableAccessorSimpleProperties, KratosCoreFastSuite) KRATOS_EXPECT_EQ(0.34, (*p_elem_prop).GetValue(POISSON_RATIO, *p_geom, N, r_model_part.GetProcessInfo())); } +/** +* Checks the correct work of the TableAccessor when using ProcessInfo variables (TIME) +*/ +KRATOS_TEST_CASE_IN_SUITE(TableAccessorSimplePropertiesProcessInfo, KratosCoreFastSuite) +{ + Model current_model; + auto &r_model_part = current_model.CreateModelPart("ModelPart",1); + r_model_part.GetProcessInfo().SetValue(DOMAIN_SIZE, 2); + r_model_part.GetProcessInfo().SetValue(TIME, 0.0); + + // Set the element properties + auto p_elem_prop = r_model_part.CreateNewProperties(0); + p_elem_prop->SetValue(YOUNG_MODULUS, 2.0); + p_elem_prop->SetValue(POISSON_RATIO, 0.3); + + auto p_node_1 = r_model_part.CreateNewNode(1, 0.0 , 0.0 , 0.0); + auto p_node_2 = r_model_part.CreateNewNode(2, 1.0 , 0.0 , 0.0); + auto p_node_3 = r_model_part.CreateNewNode(3, 1.0 , 1.0 , 0.0); + auto p_node_4 = r_model_part.CreateNewNode(4, 0.0 , 1.0 , 0.0); + + std::vector geom(4); + geom[0] = p_node_1; + geom[1] = p_node_2; + geom[2] = p_node_3; + geom[3] = p_node_4; + + auto p_geom = Kratos::make_shared>(PointerVector{geom}); + Vector N = ZeroVector(4); + N[0] = 0.1; + N[0] = 0.2; + N[0] = 0.3; + N[0] = 0.4; + + KRATOS_EXPECT_EQ(2.0, (*p_elem_prop)[YOUNG_MODULUS]); + KRATOS_EXPECT_EQ(2.0, (*p_elem_prop).GetValue(YOUNG_MODULUS)); + KRATOS_EXPECT_EQ(2.0, (*p_elem_prop).GetValue(YOUNG_MODULUS, *p_geom, N, r_model_part.GetProcessInfo())); + KRATOS_EXPECT_EQ(false, (*p_elem_prop).HasAccessor(YOUNG_MODULUS)); + + Table Time_E_table; + Time_E_table.PushBack(0.0, 2.0); + Time_E_table.PushBack(1.0, 1.0); + + p_elem_prop->SetTable(TIME, YOUNG_MODULUS, Time_E_table); + KRATOS_EXPECT_EQ(true, (*p_elem_prop).HasTable(TIME, YOUNG_MODULUS)); + + TableAccessor E_table_accessor = TableAccessor(TIME, "process_info"); + p_elem_prop->SetAccessor(YOUNG_MODULUS, E_table_accessor.Clone()); + KRATOS_EXPECT_EQ(true, (*p_elem_prop).HasAccessor(YOUNG_MODULUS)); + KRATOS_EXPECT_EQ(2.0, (*p_elem_prop).GetValue(YOUNG_MODULUS, *p_geom, N, r_model_part.GetProcessInfo())); + + r_model_part.GetProcessInfo().SetValue(TIME, 0.5); + KRATOS_EXPECT_EQ(1.5, (*p_elem_prop).GetValue(YOUNG_MODULUS, *p_geom, N, r_model_part.GetProcessInfo())); + + +} + KRATOS_TEST_CASE_IN_SUITE(TableTableAccessorSerialization, KratosCoreFastSuite) { StreamSerializer serializer; From 357c956efcf6ef47a29a5f43953e200809513b4a Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 28 Nov 2024 21:44:28 +0100 Subject: [PATCH 073/142] trim spaces --- kratos/tests/cpp_tests/includes/test_property_accessor.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/kratos/tests/cpp_tests/includes/test_property_accessor.cpp b/kratos/tests/cpp_tests/includes/test_property_accessor.cpp index 34776a47e3b8..840856037f2f 100644 --- a/kratos/tests/cpp_tests/includes/test_property_accessor.cpp +++ b/kratos/tests/cpp_tests/includes/test_property_accessor.cpp @@ -221,8 +221,6 @@ KRATOS_TEST_CASE_IN_SUITE(TableAccessorSimplePropertiesProcessInfo, KratosCoreFa r_model_part.GetProcessInfo().SetValue(TIME, 0.5); KRATOS_EXPECT_EQ(1.5, (*p_elem_prop).GetValue(YOUNG_MODULUS, *p_geom, N, r_model_part.GetProcessInfo())); - - } KRATOS_TEST_CASE_IN_SUITE(TableTableAccessorSerialization, KratosCoreFastSuite) From 1bb48c533f298d73a46df30d1b00697b9490d6ec Mon Sep 17 00:00:00 2001 From: Alejandro Date: Thu, 28 Nov 2024 21:46:25 +0100 Subject: [PATCH 074/142] unused var --- kratos/tests/cpp_tests/includes/test_property_accessor.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/kratos/tests/cpp_tests/includes/test_property_accessor.cpp b/kratos/tests/cpp_tests/includes/test_property_accessor.cpp index 840856037f2f..78d783174187 100644 --- a/kratos/tests/cpp_tests/includes/test_property_accessor.cpp +++ b/kratos/tests/cpp_tests/includes/test_property_accessor.cpp @@ -182,7 +182,6 @@ KRATOS_TEST_CASE_IN_SUITE(TableAccessorSimplePropertiesProcessInfo, KratosCoreFa // Set the element properties auto p_elem_prop = r_model_part.CreateNewProperties(0); p_elem_prop->SetValue(YOUNG_MODULUS, 2.0); - p_elem_prop->SetValue(POISSON_RATIO, 0.3); auto p_node_1 = r_model_part.CreateNewNode(1, 0.0 , 0.0 , 0.0); auto p_node_2 = r_model_part.CreateNewNode(2, 1.0 , 0.0 , 0.0); From dbfc75e212b4997780db603bc24b6b8e3c861920 Mon Sep 17 00:00:00 2001 From: Carlos Roig Date: Fri, 29 Nov 2024 12:09:36 +0100 Subject: [PATCH 075/142] Fixing numpy copy=false --- .../python_scripts/hrom_training_utility.py | 2 +- .../petrov_galerkin_training_utility.py | 2 +- .../RomApplication/python_scripts/rom_analysis.py | 2 +- .../RomApplication/python_scripts/rom_manager.py | 2 +- kratos/python_scripts/petsc_conversion_tools.py | 12 ++++++------ kratos/tests/test_numpy_export_dense_matrix.py | 4 ++-- kratos/tests/test_vectorized_interpolation.py | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/applications/RomApplication/python_scripts/hrom_training_utility.py b/applications/RomApplication/python_scripts/hrom_training_utility.py index bd4870a6502a..e43961b65ddd 100644 --- a/applications/RomApplication/python_scripts/hrom_training_utility.py +++ b/applications/RomApplication/python_scripts/hrom_training_utility.py @@ -180,7 +180,7 @@ def AppendCurrentStepResiduals(self): err_msg = f"Projection strategy \'{self.projection_strategy}\' for HROM is not supported." raise Exception(err_msg) - np_res_mat = np.array(res_mat, copy=False) + np_res_mat = np.asarray(res_mat) self.time_step_residual_matrix_container.append(np_res_mat) def GetJacobianPhiMultiplication(self, computing_model_part): diff --git a/applications/RomApplication/python_scripts/petrov_galerkin_training_utility.py b/applications/RomApplication/python_scripts/petrov_galerkin_training_utility.py index 0cf528d1370c..6e0c907eb9d1 100644 --- a/applications/RomApplication/python_scripts/petrov_galerkin_training_utility.py +++ b/applications/RomApplication/python_scripts/petrov_galerkin_training_utility.py @@ -80,7 +80,7 @@ def AppendCurrentStepProjectedSystem(self): err_msg = "\'self.basis_strategy\' is not available. Select either 'jacobian' or 'residuals'." raise Exception(err_msg) - np_snapshots_matrix = np.array(snapshots_matrix, copy=False) + np_snapshots_matrix = np.asarray(snapshots_matrix) self.time_step_snapshots_matrix_container.append(np_snapshots_matrix) def GetJacobianPhiMultiplication(self, computing_model_part): diff --git a/applications/RomApplication/python_scripts/rom_analysis.py b/applications/RomApplication/python_scripts/rom_analysis.py index a78cc69d4a80..8afce059ab56 100644 --- a/applications/RomApplication/python_scripts/rom_analysis.py +++ b/applications/RomApplication/python_scripts/rom_analysis.py @@ -292,7 +292,7 @@ def ModifyInitialGeometry(self): print('Nodal variables: ', nodal_unknown_names) - s_default = np.array(s, copy=False) + s_default = np.asarray(s) print(s_default.shape) q, _ = nn_rom_interface.get_encode_function()(s_default) diff --git a/applications/RomApplication/python_scripts/rom_manager.py b/applications/RomApplication/python_scripts/rom_manager.py index d926a8191584..2ea4668e94d7 100644 --- a/applications/RomApplication/python_scripts/rom_manager.py +++ b/applications/RomApplication/python_scripts/rom_manager.py @@ -1008,7 +1008,7 @@ def Initialize(cls): def GetNonconvergedSolutions(cls): a,_ = cls._GetSolver()._GetSolutionStrategy().GetNonconvergedSolutions() - return np.array(a, copy=False) + return np.asarray(a) simulation.Initialize = types.MethodType(Initialize, simulation) simulation.GetNonconvergedSolutions = types.MethodType(GetNonconvergedSolutions, simulation) diff --git a/kratos/python_scripts/petsc_conversion_tools.py b/kratos/python_scripts/petsc_conversion_tools.py index 343de7d06012..03ebc36c7996 100644 --- a/kratos/python_scripts/petsc_conversion_tools.py +++ b/kratos/python_scripts/petsc_conversion_tools.py @@ -18,17 +18,17 @@ def __init__(self, A): #Kratos DistributedCsrMatrix N = A.GetColNumbering().Size() ##pointers to the kratos arrays of values - self.a = np.array(A.GetDiagonalBlock().value_data(), copy=False) - self.oa = np.array(A.GetOffDiagonalBlock().value_data(), copy=False) + self.a = np.asarray(A.GetDiagonalBlock().value_data()) + self.oa = np.asarray(A.GetOffDiagonalBlock().value_data()) if(type(m) == type(PETSc.IntType)): #we can avoid doing copies #indices of diagonal block - self.i = np.array(A.GetDiagonalBlock().index1_data(), copy=False) - self.j = np.array(A.GetDiagonalBlock().index2_data(), copy=False) + self.i = np.asarray(A.GetDiagonalBlock().index1_data()) + self.j = np.asarray(A.GetDiagonalBlock().index2_data()) #indices of offdiagonal block - self.oi = np.array(A.GetOffDiagonalBlock().index1_data(), copy=False) - self.oj = np.array(A.GetOffDiagonalIndex2DataInGlobalNumbering(), copy=False) + self.oi = np.asarray(A.GetOffDiagonalBlock().index1_data()) + self.oj = np.asarray(A.GetOffDiagonalIndex2DataInGlobalNumbering()) else: #WE NEED TO COPY INDICES! since the size of the IndexType is not compatible between Kratos and PETSc if(A.GetComm().Rank() == 0): diff --git a/kratos/tests/test_numpy_export_dense_matrix.py b/kratos/tests/test_numpy_export_dense_matrix.py index 8ff254f548ed..1e3012175f57 100644 --- a/kratos/tests/test_numpy_export_dense_matrix.py +++ b/kratos/tests/test_numpy_export_dense_matrix.py @@ -10,7 +10,7 @@ def test_numpy_export_dense_matrix_no_copying(self): KratosMatrix.fill(1.0) # Export it to numpy array (No copying is performed) - NumpyMatrix = np.array(KratosMatrix,copy=False) + NumpyMatrix = np.asarray(KratosMatrix) # Test correct creation for i in range(3): @@ -35,7 +35,7 @@ def test_numpy_export_complex_dense_matrix_no_copying(self): KratosMatrix.fill(1.0+1.0j) # Export it to numpy array (No copying is performed) - NumpyMatrix = np.array(KratosMatrix,copy=False) + NumpyMatrix = np.asarray(KratosMatrix) # Test correct creation for i in range(3): diff --git a/kratos/tests/test_vectorized_interpolation.py b/kratos/tests/test_vectorized_interpolation.py index c9f873987565..dec4a660201d 100644 --- a/kratos/tests/test_vectorized_interpolation.py +++ b/kratos/tests/test_vectorized_interpolation.py @@ -39,7 +39,7 @@ def testVectorizedInterpolation(self): #obtaining a copy of database onto numpy array, and reshaping it into matrices nnodes = len(self.mp.Nodes) - vdata = np.array(Kratos.VariableUtils().GetSolutionStepValuesVector(self.mp.Nodes, Kratos.VELOCITY, 0, 3),copy=False).reshape(nnodes,3) + vdata = np.asarray(Kratos.VariableUtils().GetSolutionStepValuesVector(self.mp.Nodes, Kratos.VELOCITY, 0, 3)).reshape(nnodes,3) coords = np.array(Kratos.VariableUtils().GetCurrentPositionsVector(self.mp.Nodes,3)).reshape(nnodes,3) ##coordinates to search for From 541cdba3f408bb1b058f6efda0380362dda679cc Mon Sep 17 00:00:00 2001 From: Carlos Roig Date: Fri, 29 Nov 2024 16:05:06 +0100 Subject: [PATCH 076/142] Temporal fix until the rest of the libs upgrade to numpy==2 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 21cd6dc63921..cacbb17ced32 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -271,7 +271,7 @@ jobs: - name: Installing dependencies shell: cmd run: | - pip install numpy + pip install numpy=1.26.4 pip install sympy pip install scipy pip install h5py @@ -483,7 +483,7 @@ jobs: - name: Installing dependencies shell: cmd run: | - pip install numpy + pip install numpy=1.26.4 pip install sympy pip install scipy From 1cfcac044fa70cece2d515eb8178c9eceb57529a Mon Sep 17 00:00:00 2001 From: Carlos Roig Date: Fri, 29 Nov 2024 17:37:40 +0100 Subject: [PATCH 077/142] Changing *linux version, not win --- .github/workflows/ci.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cacbb17ced32..6e9f526db0a9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -60,7 +60,9 @@ jobs: - name: CI configuration shell: bash - run: python3 kratos/python_scripts/testing/ci_utilities.py + run: | + python3 kratos/python_scripts/testing/ci_utilities.py + python3 -m pip install --upgrade numpy==1.26.4 - name: Build shell: bash @@ -271,7 +273,7 @@ jobs: - name: Installing dependencies shell: cmd run: | - pip install numpy=1.26.4 + pip install numpy pip install sympy pip install scipy pip install h5py @@ -483,7 +485,7 @@ jobs: - name: Installing dependencies shell: cmd run: | - pip install numpy=1.26.4 + pip install numpy pip install sympy pip install scipy From 413791d069e1f27e7de15ce38e77243d5b192c77 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Mon, 2 Dec 2024 15:02:57 +0100 Subject: [PATCH 078/142] [Core] Clean up spaces in `Logger.cpp` and update to `KRATOS_CRITICAL_SECTION` --- kratos/input_output/logger.cpp | 132 ++++++++++++++++----------------- 1 file changed, 65 insertions(+), 67 deletions(-) diff --git a/kratos/input_output/logger.cpp b/kratos/input_output/logger.cpp index b7c73ab7278a..051d6ea52404 100644 --- a/kratos/input_output/logger.cpp +++ b/kratos/input_output/logger.cpp @@ -11,122 +11,120 @@ // Carlos Roig // - // System includes #include - // External includes - // Project includes -#include "includes/define.h" #include "input_output/logger.h" - +#include "utilities/reduction_utilities.h" namespace Kratos { - Logger::Logger(std::string const& TheLabel) : mCurrentMessage(TheLabel) - { - } +Logger::Logger(std::string const& TheLabel) : mCurrentMessage(TheLabel) +{ +} - Logger::~Logger() - { +Logger::~Logger() +{ auto outputs = GetOutputsInstance(); - #pragma omp critical + KRATOS_CRITICAL_SECTION { - GetDefaultOutputInstance().WriteMessage(mCurrentMessage); - for (auto i_output = outputs.begin(); i_output != outputs.end(); ++i_output) - (*i_output)->WriteMessage(mCurrentMessage); + GetDefaultOutputInstance().WriteMessage(mCurrentMessage); + for (auto it_output = outputs.begin(); it_output != outputs.end(); ++it_output) { + (*it_output)->WriteMessage(mCurrentMessage); + } } - } +} - void Logger::AddOutput(LoggerOutput::Pointer pTheOutput) - { - #pragma omp critical +void Logger::AddOutput(LoggerOutput::Pointer pTheOutput) +{ + KRATOS_CRITICAL_SECTION { - GetOutputsInstance().push_back(pTheOutput); + GetOutputsInstance().push_back(pTheOutput); } - } +} - void Logger::RemoveOutput(LoggerOutput::Pointer pTheOutput) - { +void Logger::RemoveOutput(LoggerOutput::Pointer pTheOutput) +{ KRATOS_TRY - #pragma omp critical + KRATOS_CRITICAL_SECTION { - auto i = std::find(GetOutputsInstance().begin(), GetOutputsInstance().end(), pTheOutput); - if (i != GetOutputsInstance().end()) { - GetOutputsInstance().erase(i); - } + auto& r_outputs = GetOutputsInstance(); + auto it_find = std::find(r_outputs.begin(), r_outputs.end(), pTheOutput); + if (it_find != r_outputs.end()) { + r_outputs.erase(it_find); + } } KRATOS_CATCH(""); - } +} - void Logger::Flush() { +void Logger::Flush() +{ auto outputs = GetOutputsInstance(); GetDefaultOutputInstance().Flush(); - for (auto i_output = outputs.begin(); i_output != outputs.end(); ++i_output) { - (*i_output)->Flush(); + for (auto it_output = outputs.begin(); it_output != outputs.end(); ++it_output) { + (*it_output)->Flush(); } - } +} - std::string Logger::Info() const - { +std::string Logger::Info() const +{ return "Logger"; - } - - /// Print information about this object. - void Logger::PrintInfo(std::ostream& rOStream) const - { - } - /// Print object's data. - void Logger::PrintData(std::ostream& rOStream) const - { - } - - /// Manipulator stream function - Logger& Logger::operator << (std::ostream& (*pf)(std::ostream&)) - { +} + +/// Print information about this object. +void Logger::PrintInfo(std::ostream& rOStream) const +{ +} + +/// Print object's data. +void Logger::PrintData(std::ostream& rOStream) const +{ +} + +/// Manipulator stream function +Logger& Logger::operator << (std::ostream& (*pf)(std::ostream&)) +{ mCurrentMessage << pf; return *this; - } +} - /// char stream function - Logger& Logger::operator << (const char * rString) - { +/// char stream function +Logger& Logger::operator << (const char * rString) +{ mCurrentMessage << rString; return *this; - } +} - // Location stream function - Logger& Logger::operator << (CodeLocation const& TheLocation) - { +// Location stream function +Logger& Logger::operator << (CodeLocation const& TheLocation) +{ mCurrentMessage << TheLocation; return *this; - } +} - /// Severity stream function - Logger& Logger::operator << (Severity const& TheSeverity) - { +/// Severity stream function +Logger& Logger::operator << (Severity const& TheSeverity) +{ mCurrentMessage << TheSeverity; return *this; - } +} - /// Category stream function - Logger& Logger::operator << (Category const& TheCategory) - { +/// Category stream function +Logger& Logger::operator << (Category const& TheCategory) +{ mCurrentMessage << TheCategory; return *this; - } - - +} } // namespace Kratos. From 32e5deb084f2241f1fc085cad5c0dcf061858dc8 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 2 Dec 2024 15:13:56 +0100 Subject: [PATCH 079/142] change ordering of template --- .../truss_elements/linear_truss_element.cpp | 100 +++++++++--------- .../truss_elements/linear_truss_element.h | 2 +- .../structural_mechanics_application.h | 4 +- 3 files changed, 53 insertions(+), 53 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp index 5db5cac2303d..3fc97af4e12b 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp @@ -26,8 +26,8 @@ namespace Kratos /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::Initialize(const ProcessInfo& rCurrentProcessInfo) +template +void LinearTrussElement::Initialize(const ProcessInfo& rCurrentProcessInfo) { KRATOS_TRY @@ -55,8 +55,8 @@ void LinearTrussElement::Initialize(const ProcessInfo& rCur /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::InitializeMaterial() +template +void LinearTrussElement::InitializeMaterial() { KRATOS_TRY const auto &r_props = GetProperties(); @@ -77,15 +77,15 @@ void LinearTrussElement::InitializeMaterial() /***********************************************************************************/ /***********************************************************************************/ -template -Element::Pointer LinearTrussElement::Clone( +template +Element::Pointer LinearTrussElement::Clone( IndexType NewId, NodesArrayType const& rThisNodes ) const { KRATOS_TRY - LinearTrussElement::Pointer p_new_elem = Kratos::make_intrusive>(NewId, GetGeometry().Create(rThisNodes), pGetProperties()); + LinearTrussElement::Pointer p_new_elem = Kratos::make_intrusive>(NewId, GetGeometry().Create(rThisNodes), pGetProperties()); p_new_elem->SetData(this->GetData()); p_new_elem->Set(Flags(*this)); @@ -103,8 +103,8 @@ Element::Pointer LinearTrussElement::Clone( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::EquationIdVector( +template +void LinearTrussElement::EquationIdVector( EquationIdVectorType& rResult, const ProcessInfo& rCurrentProcessInfo ) const @@ -130,8 +130,8 @@ void LinearTrussElement::EquationIdVector( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::GetDofList( +template +void LinearTrussElement::GetDofList( DofsVectorType& rElementalDofList, const ProcessInfo& rCurrentProcessInfo ) const @@ -156,8 +156,8 @@ void LinearTrussElement::GetDofList( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::GetShapeFunctionsValues( +template +void LinearTrussElement::GetShapeFunctionsValues( SystemSizeBoundedArrayType& rN, const double Length, const double xi @@ -195,8 +195,8 @@ void LinearTrussElement::GetShapeFunctionsValues( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::GetShapeFunctionsValuesY( +template +void LinearTrussElement::GetShapeFunctionsValuesY( SystemSizeBoundedArrayType& rN, const double Length, const double xi @@ -233,8 +233,8 @@ void LinearTrussElement::GetShapeFunctionsValuesY( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::GetShapeFunctionsValuesZ( +template +void LinearTrussElement::GetShapeFunctionsValuesZ( SystemSizeBoundedArrayType& rN, const double Length, const double xi @@ -262,8 +262,8 @@ void LinearTrussElement::GetShapeFunctionsValuesZ( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::GetFirstDerivativesShapeFunctionsValues( +template +void LinearTrussElement::GetFirstDerivativesShapeFunctionsValues( SystemSizeBoundedArrayType& rdN_dX, const double Length, const double xi @@ -302,8 +302,8 @@ void LinearTrussElement::GetFirstDerivativesShapeFunctionsV /***********************************************************************************/ /***********************************************************************************/ -template -BoundedMatrix LinearTrussElement::GetFrenetSerretMatrix() const +template +BoundedMatrix LinearTrussElement::GetFrenetSerretMatrix() const { const auto &r_geom = GetGeometry(); BoundedMatrix T; @@ -349,8 +349,8 @@ BoundedMatrix LinearTrussElement::GetFrenetSe /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const +template +void LinearTrussElement::GetNodalValuesVector(SystemSizeBoundedArrayType& rNodalValues) const { if (rNodalValues.size() != SystemSize) rNodalValues.resize(SystemSize, false); @@ -398,8 +398,8 @@ void LinearTrussElement::GetNodalValuesVector(SystemSizeBou /***********************************************************************************/ /***********************************************************************************/ -template -array_1d LinearTrussElement::GetLocalAxesBodyForce( +template +array_1d LinearTrussElement::GetLocalAxesBodyForce( const Element &rElement, const GeometryType::IntegrationPointsArrayType &rIntegrationPoints, const IndexType PointNumber @@ -427,8 +427,8 @@ array_1d LinearTrussElement::GetLocalAxesBodyFor /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::CalculateLocalSystem( +template +void LinearTrussElement::CalculateLocalSystem( MatrixType& rLHS, VectorType& rRHS, const ProcessInfo& rProcessInfo @@ -503,8 +503,8 @@ void LinearTrussElement::CalculateLocalSystem( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::CalculateLeftHandSide( +template +void LinearTrussElement::CalculateLeftHandSide( MatrixType& rLHS, const ProcessInfo& rProcessInfo ) @@ -564,8 +564,8 @@ void LinearTrussElement::CalculateLeftHandSide( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::CalculateRightHandSide( +template +void LinearTrussElement::CalculateRightHandSide( VectorType& rRHS, const ProcessInfo& rProcessInfo ) @@ -632,8 +632,8 @@ void LinearTrussElement::CalculateRightHandSide( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::RotateLHS( +template +void LinearTrussElement::RotateLHS( MatrixType& rLHS ) { @@ -664,8 +664,8 @@ void LinearTrussElement::RotateLHS( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::RotateRHS( +template +void LinearTrussElement::RotateRHS( VectorType& rRHS ) { @@ -697,8 +697,8 @@ void LinearTrussElement::RotateRHS( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::RotateAll( +template +void LinearTrussElement::RotateAll( MatrixType& rLHS, VectorType& rRHS ) @@ -736,8 +736,8 @@ void LinearTrussElement::RotateAll( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::CalculateOnIntegrationPoints( +template +void LinearTrussElement::CalculateOnIntegrationPoints( const Variable& rVariable, std::vector& rOutput, const ProcessInfo& rProcessInfo @@ -815,8 +815,8 @@ void LinearTrussElement::CalculateOnIntegrationPoints( /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::CalculateOnIntegrationPoints( +template +void LinearTrussElement::CalculateOnIntegrationPoints( const Variable& rVariable, std::vector& rValues, const ProcessInfo& rCurrentProcessInfo @@ -836,8 +836,8 @@ void LinearTrussElement::CalculateOnIntegrationPoints( /***********************************************************************************/ /***********************************************************************************/ -template -int LinearTrussElement::Check(const ProcessInfo& rCurrentProcessInfo) const +template +int LinearTrussElement::Check(const ProcessInfo& rCurrentProcessInfo) const { KRATOS_TRY; @@ -850,8 +850,8 @@ int LinearTrussElement::Check(const ProcessInfo& rCurrentPr /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::save(Serializer& rSerializer) const +template +void LinearTrussElement::save(Serializer& rSerializer) const { KRATOS_SERIALIZE_SAVE_BASE_CLASS(rSerializer, Element); int IntMethod = int(this->GetIntegrationMethod()); @@ -862,8 +862,8 @@ void LinearTrussElement::save(Serializer& rSerializer) cons /***********************************************************************************/ /***********************************************************************************/ -template -void LinearTrussElement::load(Serializer& rSerializer) +template +void LinearTrussElement::load(Serializer& rSerializer) { KRATOS_SERIALIZE_LOAD_BASE_CLASS(rSerializer, Element); int IntMethod; @@ -875,8 +875,8 @@ void LinearTrussElement::load(Serializer& rSerializer) /***********************************************************************************/ /***********************************************************************************/ -template -array_1d LinearTrussElement::GetBaseShapeFunctions(const double xi) const +template +array_1d LinearTrussElement::GetBaseShapeFunctions(const double xi) const { array_1d N; @@ -895,8 +895,8 @@ array_1d LinearTrussElement::GetBaseShapeF /***********************************************************************************/ template class LinearTrussElement<2, 2>; -template class LinearTrussElement<3, 2>; template class LinearTrussElement<2, 3>; +template class LinearTrussElement<3, 2>; template class LinearTrussElement<3, 3>; } // Namespace Kratos diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h index f6b81c06bcd3..9b5d8ec66d58 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h @@ -52,7 +52,7 @@ using SizeType = std::size_t; * 0 1 0 2 1 * @author Alejandro Cornejo */ -template +template class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement : public Element { diff --git a/applications/StructuralMechanicsApplication/structural_mechanics_application.h b/applications/StructuralMechanicsApplication/structural_mechanics_application.h index 8e571381a169..f423665101e5 100644 --- a/applications/StructuralMechanicsApplication/structural_mechanics_application.h +++ b/applications/StructuralMechanicsApplication/structural_mechanics_application.h @@ -273,8 +273,8 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) KratosStructuralMechanicsAppl const TrussElementLinear3D2N mTrussLinearElement3D2N; const CableElement3D2N mCableElement3D2N; const LinearTrussElement<2, 2> mLinearTrussElement2D2N; - const LinearTrussElement<3, 2> mLinearTrussElement2D3N; - const LinearTrussElement<2, 3> mLinearTrussElement3D2N; + const LinearTrussElement<2, 3> mLinearTrussElement2D3N; + const LinearTrussElement<3, 2> mLinearTrussElement3D2N; const LinearTrussElement<3, 3> mLinearTrussElement3D3N; // Adding the beam element From 9a5cd884f832c4a735d30892368433544e3df8a5 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 2 Dec 2024 15:28:38 +0100 Subject: [PATCH 080/142] avoid more repetition --- .../truss_elements/linear_truss_element.cpp | 48 +++++++------------ 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp index 3fc97af4e12b..cef754dd87d5 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp @@ -171,21 +171,15 @@ void LinearTrussElement::GetShapeFunctionsValues( noalias(base_N) = GetBaseShapeFunctions(xi); if constexpr (Dimension == 2) { - if constexpr (NNodes == 2) { - rN[0] = base_N[0]; - rN[2] = base_N[1]; - } else { // 3N - rN[0] = base_N[0]; - rN[2] = base_N[1]; + rN[0] = base_N[0]; + rN[2] = base_N[1]; + if constexpr (NNodes == 3) { rN[4] = base_N[2]; } } else { - if constexpr (NNodes == 2) { - rN[0] = base_N[0]; - rN[3] = base_N[1]; - } else { // 3N - rN[0] = base_N[0]; - rN[3] = base_N[1]; + rN[0] = base_N[0]; + rN[3] = base_N[1]; + if constexpr (NNodes == 3) { rN[6] = base_N[2]; } } @@ -210,21 +204,15 @@ void LinearTrussElement::GetShapeFunctionsValuesY( noalias(base_N) = GetBaseShapeFunctions(xi); if constexpr (Dimension == 2) { - if constexpr (NNodes == 2) { - rN[1] = base_N[0]; - rN[3] = base_N[1]; - } else { // 3N - rN[1] = base_N[0]; - rN[3] = base_N[1]; + rN[1] = base_N[0]; + rN[3] = base_N[1]; + if constexpr (NNodes == 3) { rN[5] = base_N[2]; } } else { - if constexpr (NNodes == 2) { - rN[1] = base_N[0]; - rN[4] = base_N[1]; - } else { // 3N - rN[1] = base_N[0]; - rN[4] = base_N[1]; + rN[1] = base_N[0]; + rN[4] = base_N[1]; + if constexpr (NNodes == 3) { rN[7] = base_N[2]; } } @@ -248,12 +236,10 @@ void LinearTrussElement::GetShapeFunctionsValuesZ( if constexpr (Dimension == 3) { array_1d base_N; noalias(base_N) = GetBaseShapeFunctions(xi); - if constexpr (NNodes == 2) { - rN[2] = base_N[0]; - rN[5] = base_N[1]; - } else { // 3N - rN[2] = base_N[0]; - rN[5] = base_N[1]; + + rN[2] = base_N[0]; + rN[5] = base_N[1]; + if constexpr (NNodes == 3) { rN[8] = base_N[2]; } } @@ -493,7 +479,7 @@ void LinearTrussElement::CalculateLocalSystem( noalias(rRHS) += N_shape * local_body_forces[0] * jacobian_weight; noalias(rRHS) += N_shapeY * local_body_forces[1] * jacobian_weight; - noalias(rRHS) += N_shapeZ * local_body_forces[2] * jacobian_weight; // null in this class, full in derived one + noalias(rRHS) += N_shapeZ * local_body_forces[2] * jacobian_weight; } RotateAll(rLHS, rRHS); // rotate to global From d8d53033f347b1b753be85f2e773b59f446ecba1 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 2 Dec 2024 16:07:51 +0100 Subject: [PATCH 081/142] now using geometry shape functions values --- .../truss_elements/linear_truss_element.cpp | 18 ++++++------------ .../truss_elements/linear_truss_element.h | 2 +- .../structural_mechanics_application.cpp | 4 ++-- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp index cef754dd87d5..ddd4889e609d 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp @@ -232,7 +232,7 @@ void LinearTrussElement::GetShapeFunctionsValuesZ( rN.resize(SystemSize, false); rN.clear(); - + if constexpr (Dimension == 3) { array_1d base_N; noalias(base_N) = GetBaseShapeFunctions(xi); @@ -862,18 +862,12 @@ void LinearTrussElement::load(Serializer& rSerializer) /***********************************************************************************/ template -array_1d LinearTrussElement::GetBaseShapeFunctions(const double xi) const +Vector LinearTrussElement::GetBaseShapeFunctions(const double xi) const { - array_1d N; - - if constexpr (NNodes == 2) { - N[0] = 0.5 * (1.0 - xi); - N[1] = 0.5 * (1.0 + xi); - } else { - N[0] = 0.5 * xi * (xi - 1.0); - N[1] = 0.5 * xi * (xi + 1.0); - N[2] = (1.0 - std::pow(xi, 2)); - } + Vector coord(3), N(NNodes); + coord.clear(); + coord[0] = xi; + N = GetGeometry().ShapeFunctionsValues(N, coord); return N; } diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h index 9b5d8ec66d58..a64549ee2ad1 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h @@ -156,7 +156,7 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement /** * @brief This method returns the base shape functions in a reduced size vector (2 or 3 entries) */ - array_1d GetBaseShapeFunctions(const double xi) const; + Vector GetBaseShapeFunctions(const double xi) const; /** * @brief Returns a n component vector including the values of the DoFs diff --git a/applications/StructuralMechanicsApplication/structural_mechanics_application.cpp b/applications/StructuralMechanicsApplication/structural_mechanics_application.cpp index 19030d6cce1a..ea5e0292d16e 100644 --- a/applications/StructuralMechanicsApplication/structural_mechanics_application.cpp +++ b/applications/StructuralMechanicsApplication/structural_mechanics_application.cpp @@ -67,8 +67,8 @@ KratosStructuralMechanicsApplication::KratosStructuralMechanicsApplication() mCableElement3D2N(0, Element::GeometryType::Pointer(new Line3D2(Element::GeometryType::PointsArrayType(2)))), mLinearTrussElement2D2N(0, Element::GeometryType::Pointer(new Line2D2(Element::GeometryType::PointsArrayType(2)))), mLinearTrussElement2D3N(0, Element::GeometryType::Pointer(new Line2D3(Element::GeometryType::PointsArrayType(3)))), - mLinearTrussElement3D2N(0, Element::GeometryType::Pointer(new Line2D2(Element::GeometryType::PointsArrayType(2)))), - mLinearTrussElement3D3N(0, Element::GeometryType::Pointer(new Line2D3(Element::GeometryType::PointsArrayType(3)))), + mLinearTrussElement3D2N(0, Element::GeometryType::Pointer(new Line3D2(Element::GeometryType::PointsArrayType(2)))), + mLinearTrussElement3D3N(0, Element::GeometryType::Pointer(new Line3D3(Element::GeometryType::PointsArrayType(3)))), // Adding the beam elements mCrBeamElement3D2N(0, Element::GeometryType::Pointer(new Line3D2(Element::GeometryType::PointsArrayType(2)))), mCrLinearBeamElement3D2N(0, Element::GeometryType::Pointer(new Line3D2(Element::GeometryType::PointsArrayType(2)))), From bfc73c3bbc315bdbc926dba88c61121d8495176d Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 2 Dec 2024 16:45:50 +0100 Subject: [PATCH 082/142] using local gradients --- .../truss_elements/linear_truss_element.cpp | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp index ddd4889e609d..4a485070ef15 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp @@ -260,29 +260,32 @@ void LinearTrussElement::GetFirstDerivativesShapeFunctionsV rdN_dX.clear(); + Vector coord(3); + Matrix dN_de(NNodes, 1); + coord.clear(); + coord[0] = xi; + GetGeometry().ShapeFunctionsLocalGradients(dN_de, coord); + if constexpr (Dimension == 2) { if constexpr (NNodes == 2) { - const double inverse_l = 1.0 / Length; - rdN_dX[0] = -inverse_l; - rdN_dX[2] = inverse_l; + rdN_dX[0] = dN_de(0, 0); + rdN_dX[2] = dN_de(1, 0); } else { // 3N - rdN_dX[0] = xi - 0.5; - rdN_dX[2] = xi + 0.5; - rdN_dX[4] = -2.0 * xi; - rdN_dX *= 2.0 / Length; // The Jacobian + rdN_dX[0] = dN_de(0, 0); + rdN_dX[2] = dN_de(1, 0); + rdN_dX[4] = dN_de(2, 0); } } else { if constexpr (NNodes == 2) { - const double inverse_l = 1.0 / Length; - rdN_dX[0] = -inverse_l; - rdN_dX[3] = inverse_l; + rdN_dX[0] = dN_de(0, 0); + rdN_dX[3] = dN_de(1, 0); } else { // 3N - rdN_dX[0] = xi - 0.5; - rdN_dX[3] = xi + 0.5; - rdN_dX[6] = -2.0 * xi; - rdN_dX *= 2.0 / Length; // The Jacobian + rdN_dX[0] = dN_de(0, 0); + rdN_dX[3] = dN_de(1, 0); + rdN_dX[6] = dN_de(2, 0); } } + rdN_dX *= 2.0 / Length; // The Jacobian } /***********************************************************************************/ @@ -867,7 +870,7 @@ Vector LinearTrussElement::GetBaseShapeFunctions(const doub Vector coord(3), N(NNodes); coord.clear(); coord[0] = xi; - N = GetGeometry().ShapeFunctionsValues(N, coord); + GetGeometry().ShapeFunctionsValues(N, coord); return N; } From 27bc6738c6828127a00f4fa624ce49ed7a5ff144 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 2 Dec 2024 16:49:41 +0100 Subject: [PATCH 083/142] avoid more rep --- .../truss_elements/linear_truss_element.cpp | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp index 4a485070ef15..ad1d60cd5257 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp @@ -267,21 +267,15 @@ void LinearTrussElement::GetFirstDerivativesShapeFunctionsV GetGeometry().ShapeFunctionsLocalGradients(dN_de, coord); if constexpr (Dimension == 2) { - if constexpr (NNodes == 2) { - rdN_dX[0] = dN_de(0, 0); - rdN_dX[2] = dN_de(1, 0); - } else { // 3N - rdN_dX[0] = dN_de(0, 0); - rdN_dX[2] = dN_de(1, 0); + rdN_dX[0] = dN_de(0, 0); + rdN_dX[2] = dN_de(1, 0); + if constexpr (NNodes == 3) { rdN_dX[4] = dN_de(2, 0); } } else { - if constexpr (NNodes == 2) { - rdN_dX[0] = dN_de(0, 0); - rdN_dX[3] = dN_de(1, 0); - } else { // 3N - rdN_dX[0] = dN_de(0, 0); - rdN_dX[3] = dN_de(1, 0); + rdN_dX[0] = dN_de(0, 0); + rdN_dX[3] = dN_de(1, 0); + if constexpr (NNodes == 3) { rdN_dX[6] = dN_de(2, 0); } } From d27fccbb28f85815d70b1dfb3126687c695ae9c9 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Wed, 4 Dec 2024 15:56:52 +0100 Subject: [PATCH 084/142] [LinearSolversApplication] Reactivating MKL with Clang, because apparently now it compiles again --- applications/LinearSolversApplication/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/applications/LinearSolversApplication/CMakeLists.txt b/applications/LinearSolversApplication/CMakeLists.txt index 20cc1160a3a3..9a4d4f7ea12b 100644 --- a/applications/LinearSolversApplication/CMakeLists.txt +++ b/applications/LinearSolversApplication/CMakeLists.txt @@ -110,8 +110,6 @@ if( USE_EIGEN_MKL MATCHES ON ) message( "mkl_rt.lib found at: ${MKL_RT_LIB}") target_link_libraries( KratosLinearSolversCore PUBLIC ${MKL_RT_LIB} ) endif(NOT MKL_RT_LIB) - elseif( ${CMAKE_CXX_COMPILER_ID} MATCHES Clang ) - message( FATAL_ERROR "Clang does not yet support MKL" ) else( MSVC ) target_link_libraries( KratosLinearSolversCore PUBLIC mkl_rt ) if( USE_EIGEN_FEAST MATCHES ON ) From 4389233243d71e8a682f1cf69170aada4ad70c10 Mon Sep 17 00:00:00 2001 From: WPK4FEM <129858139+WPK4FEM@users.noreply.github.com> Date: Wed, 4 Dec 2024 18:55:36 +0100 Subject: [PATCH 085/142] Geo/delete number of umat parameters (#12900) * Removal of NUMBER_OF_UMAT_PARAMETERS in code and tests. Length of array is found from size of the array itself. --- .../custom_processes/README.md | 1 - .../apply_c_phi_reduction_process.cpp | 14 ++++----- .../apply_k0_procedure_process.cpp | 29 ++++++++----------- .../geo_mechanics_application.cpp | 1 - .../geo_mechanics_application_variables.cpp | 1 - .../geo_mechanics_application_variables.h | 1 - .../MaterialParameters_stage1.json | 3 +- .../MaterialParameters_stage2.json | 3 +- .../MaterialParameters.json | 2 -- .../test_apply_c_phi_reduction_process.cpp | 10 ++----- .../test_apply_k0_procedure_process.cpp | 17 ++++------- .../MaterialParameters1.json | 1 - .../MaterialParameters.json | 3 -- .../MaterialParameters.json | 6 ++-- 14 files changed, 31 insertions(+), 61 deletions(-) diff --git a/applications/GeoMechanicsApplication/custom_processes/README.md b/applications/GeoMechanicsApplication/custom_processes/README.md index c7d3b681dd0a..33a94e3897d2 100644 --- a/applications/GeoMechanicsApplication/custom_processes/README.md +++ b/applications/GeoMechanicsApplication/custom_processes/README.md @@ -134,7 +134,6 @@ The "apply_k0_procedure_process" needs the following material parameter input to "K0_NC": 0.6, "UDSM_NAME" : "MohrCoulomb64.dll", "IS_FORTRAN_UDSM" : true, - "NUMBER_OF_UMAT_PARAMETERS": 6, "INDEX_OF_UMAT_PHI_PARAMETER": 4, "UMAT_PARAMETERS" : [30000000, 0.2, diff --git a/applications/GeoMechanicsApplication/custom_processes/apply_c_phi_reduction_process.cpp b/applications/GeoMechanicsApplication/custom_processes/apply_c_phi_reduction_process.cpp index dfa018e74c5d..33c368f978ae 100644 --- a/applications/GeoMechanicsApplication/custom_processes/apply_c_phi_reduction_process.cpp +++ b/applications/GeoMechanicsApplication/custom_processes/apply_c_phi_reduction_process.cpp @@ -73,13 +73,13 @@ double ApplyCPhiReductionProcess::GetAndCheckPhi(const Element::PropertiesType& KRATOS_ERROR_IF_NOT(part_properties.Has(UMAT_PARAMETERS)) << "Missing required item UMAT_PARAMETERS" << std::endl; - KRATOS_ERROR_IF_NOT(part_properties.Has(NUMBER_OF_UMAT_PARAMETERS)) - << "Missing required item NUMBER_OF_UMAT_PARAMETERS" << std::endl; KRATOS_ERROR_IF_NOT(part_properties.Has(INDEX_OF_UMAT_PHI_PARAMETER)) << "Missing required item INDEX_OF_UMAT_PHI_PARAMETER" << std::endl; - KRATOS_ERROR_IF(part_properties[INDEX_OF_UMAT_PHI_PARAMETER] < 1 || part_properties[INDEX_OF_UMAT_PHI_PARAMETER] > part_properties[NUMBER_OF_UMAT_PARAMETERS]) - << "invalid INDEX_OF_UMAT_PHI_PARAMETER: " << part_properties[INDEX_OF_UMAT_PHI_PARAMETER] + KRATOS_ERROR_IF(part_properties[INDEX_OF_UMAT_PHI_PARAMETER] < 1 || + part_properties[INDEX_OF_UMAT_PHI_PARAMETER] > + static_cast(part_properties[UMAT_PARAMETERS].size())) + << "Invalid INDEX_OF_UMAT_PHI_PARAMETER: " << part_properties[INDEX_OF_UMAT_PHI_PARAMETER] << " (out-of-bounds index)" << std::endl; const double phi = part_properties[UMAT_PARAMETERS][part_properties[INDEX_OF_UMAT_PHI_PARAMETER] - 1]; KRATOS_ERROR_IF(phi < 0. || phi > 90.) << "Friction angle Phi out of range: " << phi << std::endl; @@ -103,12 +103,12 @@ double ApplyCPhiReductionProcess::GetAndCheckC(const Element::PropertiesType& rP KRATOS_ERROR_IF_NOT(part_properties.Has(UMAT_PARAMETERS)) << "Missing required item UMAT_PARAMETERS" << std::endl; - KRATOS_ERROR_IF_NOT(part_properties.Has(NUMBER_OF_UMAT_PARAMETERS)) - << "Missing required item NUMBER_OF_UMAT_PARAMETERS" << std::endl; KRATOS_ERROR_IF_NOT(part_properties.Has(INDEX_OF_UMAT_C_PARAMETER)) << "Missing required item INDEX_OF_UMAT_C_PARAMETER" << std::endl; - KRATOS_ERROR_IF(part_properties[INDEX_OF_UMAT_C_PARAMETER] < 1 || part_properties[INDEX_OF_UMAT_C_PARAMETER] > part_properties[NUMBER_OF_UMAT_PARAMETERS]) + KRATOS_ERROR_IF(part_properties[INDEX_OF_UMAT_C_PARAMETER] < 1 || + part_properties[INDEX_OF_UMAT_C_PARAMETER] > + static_cast(part_properties[UMAT_PARAMETERS].size())) << "invalid INDEX_OF_UMAT_C_PARAMETER: " << part_properties[INDEX_OF_UMAT_C_PARAMETER] << " (out-of-bounds index)" << std::endl; const auto c = part_properties[UMAT_PARAMETERS][part_properties[INDEX_OF_UMAT_C_PARAMETER] - 1]; diff --git a/applications/GeoMechanicsApplication/custom_processes/apply_k0_procedure_process.cpp b/applications/GeoMechanicsApplication/custom_processes/apply_k0_procedure_process.cpp index 4377c5220ac1..f78bbc7b20c5 100644 --- a/applications/GeoMechanicsApplication/custom_processes/apply_k0_procedure_process.cpp +++ b/applications/GeoMechanicsApplication/custom_processes/apply_k0_procedure_process.cpp @@ -107,14 +107,13 @@ void ApplyK0ProcedureProcess::CheckK0(const Properties& rProperties, IndexType E void ApplyK0ProcedureProcess::CheckPhi(const Properties& rProperties, IndexType ElementId) { - if (rProperties.Has(INDEX_OF_UMAT_PHI_PARAMETER) && - rProperties.Has(NUMBER_OF_UMAT_PARAMETERS) && rProperties.Has(UMAT_PARAMETERS)) { - const auto phi_index = rProperties[INDEX_OF_UMAT_PHI_PARAMETER]; - const auto number_of_umat_parameters = rProperties[NUMBER_OF_UMAT_PARAMETERS]; + if (rProperties.Has(INDEX_OF_UMAT_PHI_PARAMETER) && rProperties.Has(UMAT_PARAMETERS)) { + const auto phi_index = rProperties[INDEX_OF_UMAT_PHI_PARAMETER]; + const auto number_of_umat_parameters = static_cast(rProperties[UMAT_PARAMETERS].size()); KRATOS_ERROR_IF(phi_index < 1 || phi_index > number_of_umat_parameters) - << "INDEX_OF_UMAT_PHI_PARAMETER (" << phi_index << ") is not in range 1, NUMBER_OF_UMAT_PARAMETERS (" - << number_of_umat_parameters << ") for element " << ElementId << "." << std::endl; + << "INDEX_OF_UMAT_PHI_PARAMETER (" << phi_index + << ") is not in range 1, size of UMAT_PARAMETERS for element " << ElementId << "." << std::endl; const double phi = rProperties[UMAT_PARAMETERS][phi_index - 1]; KRATOS_ERROR_IF(phi < 0.0 || phi > 90.0) @@ -126,16 +125,15 @@ void ApplyK0ProcedureProcess::CheckPhi(const Properties& rProperties, IndexType void ApplyK0ProcedureProcess::CheckOCRorPOP(const Properties& rProperties, IndexType ElementId) { if (rProperties.Has(K0_NC) || - (rProperties.Has(INDEX_OF_UMAT_PHI_PARAMETER) && - rProperties.Has(NUMBER_OF_UMAT_PARAMETERS) && rProperties.Has(UMAT_PARAMETERS))) { + (rProperties.Has(INDEX_OF_UMAT_PHI_PARAMETER) && rProperties.Has(UMAT_PARAMETERS))) { if (rProperties.Has(OCR)) { - const double ocr = rProperties[OCR]; + const auto ocr = rProperties[OCR]; KRATOS_ERROR_IF(ocr < 1.0) << "OCR (" << ocr << ") should be in the range [1.0,-> for element " << ElementId << "." << std::endl; } if (rProperties.Has(POP)) { - const double pop = rProperties[POP]; + const auto pop = rProperties[POP]; KRATOS_ERROR_IF(pop < 0.0) << "POP (" << pop << ") should be in the range [0.0,-> for element " << ElementId << "." << std::endl; } @@ -163,12 +161,10 @@ void ApplyK0ProcedureProcess::CheckSufficientMaterialParameters(const Properties { KRATOS_ERROR_IF_NOT( rProperties.Has(K0_NC) || - (rProperties.Has(INDEX_OF_UMAT_PHI_PARAMETER) && - rProperties.Has(NUMBER_OF_UMAT_PARAMETERS) && rProperties.Has(UMAT_PARAMETERS)) || + (rProperties.Has(INDEX_OF_UMAT_PHI_PARAMETER) && rProperties.Has(UMAT_PARAMETERS)) || (rProperties.Has(K0_VALUE_XX) && rProperties.Has(K0_VALUE_YY) && rProperties.Has(K0_VALUE_ZZ))) << "Insufficient material data for K0 procedure process for element " << ElementId << ". No K0_NC, " - << "(INDEX_OF_UMAT_PHI_PARAMETER, NUMBER_OF_UMAT_PARAMETERS and " - "UMAT_PARAMETERS) or (K0_VALUE_XX, _YY and _ZZ found)." + << "(INDEX_OF_UMAT_PHI_PARAMETER and UMAT_PARAMETERS) or (K0_VALUE_XX, _YY and _ZZ found)." << std::endl; } @@ -197,8 +193,7 @@ array_1d ApplyK0ProcedureProcess::CreateK0Vector(const Element::Prope array_1d k0_vector; if (rProp.Has(K0_NC)) { std::fill(k0_vector.begin(), k0_vector.end(), rProp[K0_NC]); - } else if (rProp.Has(INDEX_OF_UMAT_PHI_PARAMETER) && rProp.Has(NUMBER_OF_UMAT_PARAMETERS) && - rProp.Has(UMAT_PARAMETERS)) { + } else if (rProp.Has(INDEX_OF_UMAT_PHI_PARAMETER) && rProp.Has(UMAT_PARAMETERS)) { const auto phi = rProp[UMAT_PARAMETERS][rProp[INDEX_OF_UMAT_PHI_PARAMETER] - 1]; std::fill(k0_vector.begin(), k0_vector.end(), 1.0 - std::sin(MathUtils<>::DegreesToRadians(phi))); } else { @@ -214,7 +209,7 @@ void ApplyK0ProcedureProcess::CalculateK0Stresses(Element& rElement) const { // Get K0 material parameters of this element ( probably there is something more efficient ) const Element::PropertiesType& rProp = rElement.GetProperties(); - const int k0_main_direction = rProp[K0_MAIN_DIRECTION]; + const auto k0_main_direction = rProp[K0_MAIN_DIRECTION]; auto k0_vector = CreateK0Vector(rProp); diff --git a/applications/GeoMechanicsApplication/geo_mechanics_application.cpp b/applications/GeoMechanicsApplication/geo_mechanics_application.cpp index 78f7ea3035df..cef0d59b652c 100644 --- a/applications/GeoMechanicsApplication/geo_mechanics_application.cpp +++ b/applications/GeoMechanicsApplication/geo_mechanics_application.cpp @@ -538,7 +538,6 @@ void KratosGeoMechanicsApplication::Register() KRATOS_REGISTER_VARIABLE(UMAT_PARAMETERS) KRATOS_REGISTER_VARIABLE(NUMBER_OF_UMAT_STATE_VARIABLES) - KRATOS_REGISTER_VARIABLE(NUMBER_OF_UMAT_PARAMETERS) KRATOS_REGISTER_VARIABLE(INDEX_OF_UMAT_C_PARAMETER) KRATOS_REGISTER_VARIABLE(INDEX_OF_UMAT_PHI_PARAMETER) diff --git a/applications/GeoMechanicsApplication/geo_mechanics_application_variables.cpp b/applications/GeoMechanicsApplication/geo_mechanics_application_variables.cpp index c00ec05a1631..bd0e49daab8a 100644 --- a/applications/GeoMechanicsApplication/geo_mechanics_application_variables.cpp +++ b/applications/GeoMechanicsApplication/geo_mechanics_application_variables.cpp @@ -181,7 +181,6 @@ KRATOS_CREATE_VARIABLE(bool, IS_FORTRAN_UDSM) // Also for UMAT KRATOS_CREATE_VARIABLE(Vector, UMAT_PARAMETERS) KRATOS_CREATE_VARIABLE(int, NUMBER_OF_UMAT_STATE_VARIABLES) -KRATOS_CREATE_VARIABLE(int, NUMBER_OF_UMAT_PARAMETERS) KRATOS_CREATE_VARIABLE(int, INDEX_OF_UMAT_C_PARAMETER) KRATOS_CREATE_VARIABLE(int, INDEX_OF_UMAT_PHI_PARAMETER) diff --git a/applications/GeoMechanicsApplication/geo_mechanics_application_variables.h b/applications/GeoMechanicsApplication/geo_mechanics_application_variables.h index 30a3ad38798c..8ff81f77c09c 100644 --- a/applications/GeoMechanicsApplication/geo_mechanics_application_variables.h +++ b/applications/GeoMechanicsApplication/geo_mechanics_application_variables.h @@ -198,7 +198,6 @@ KRATOS_DEFINE_APPLICATION_VARIABLE(GEO_MECHANICS_APPLICATION, bool, IS_FORTRAN_U KRATOS_DEFINE_APPLICATION_VARIABLE(GEO_MECHANICS_APPLICATION, Vector, UMAT_PARAMETERS) KRATOS_DEFINE_APPLICATION_VARIABLE(GEO_MECHANICS_APPLICATION, int, NUMBER_OF_UMAT_STATE_VARIABLES) -KRATOS_DEFINE_APPLICATION_VARIABLE(GEO_MECHANICS_APPLICATION, int, NUMBER_OF_UMAT_PARAMETERS) KRATOS_DEFINE_APPLICATION_VARIABLE(GEO_MECHANICS_APPLICATION, int, INDEX_OF_UMAT_C_PARAMETER) KRATOS_DEFINE_APPLICATION_VARIABLE(GEO_MECHANICS_APPLICATION, int, INDEX_OF_UMAT_PHI_PARAMETER) diff --git a/applications/GeoMechanicsApplication/tests/C-Phi_reduction_process/MaterialParameters_stage1.json b/applications/GeoMechanicsApplication/tests/C-Phi_reduction_process/MaterialParameters_stage1.json index f064d1457560..a551e778aa7e 100644 --- a/applications/GeoMechanicsApplication/tests/C-Phi_reduction_process/MaterialParameters_stage1.json +++ b/applications/GeoMechanicsApplication/tests/C-Phi_reduction_process/MaterialParameters_stage1.json @@ -20,8 +20,7 @@ "PERMEABILITY_YY" : 4.5e-13, "PERMEABILITY_XY" : 0.0, "DYNAMIC_VISCOSITY" : 8.90e-7, - "NUMBER_OF_UMAT_PARAMETERS": 6, - "INDEX_OF_UMAT_PHI_PARAMETER": 4, + "INDEX_OF_UMAT_PHI_PARAMETER": 4, "INDEX_OF_UMAT_C_PARAMETER": 3, "UMAT_PARAMETERS" : [ 5.384615e6, 0.3, diff --git a/applications/GeoMechanicsApplication/tests/C-Phi_reduction_process/MaterialParameters_stage2.json b/applications/GeoMechanicsApplication/tests/C-Phi_reduction_process/MaterialParameters_stage2.json index bbf55b585032..cd9211e2425e 100644 --- a/applications/GeoMechanicsApplication/tests/C-Phi_reduction_process/MaterialParameters_stage2.json +++ b/applications/GeoMechanicsApplication/tests/C-Phi_reduction_process/MaterialParameters_stage2.json @@ -20,8 +20,7 @@ "UDSM_NAME" : "../MohrCoulomb64.dll", "UDSM_NUMBER" : 1, "IS_FORTRAN_UDSM" : true, - "NUMBER_OF_UMAT_PARAMETERS": 8, - "INDEX_OF_UMAT_PHI_PARAMETER": 4, + "INDEX_OF_UMAT_PHI_PARAMETER": 4, "INDEX_OF_UMAT_C_PARAMETER": 3, "UMAT_PARAMETERS" : [30.0E6, 0.2, diff --git a/applications/GeoMechanicsApplication/tests/Simple_Dike_Gravity_Loading/simple_dike_test_with_gravity_umat.gid/MaterialParameters.json b/applications/GeoMechanicsApplication/tests/Simple_Dike_Gravity_Loading/simple_dike_test_with_gravity_umat.gid/MaterialParameters.json index 2a62ff44a9a2..9381bcc86193 100644 --- a/applications/GeoMechanicsApplication/tests/Simple_Dike_Gravity_Loading/simple_dike_test_with_gravity_umat.gid/MaterialParameters.json +++ b/applications/GeoMechanicsApplication/tests/Simple_Dike_Gravity_Loading/simple_dike_test_with_gravity_umat.gid/MaterialParameters.json @@ -19,7 +19,6 @@ "DYNAMIC_VISCOSITY" : 1.0e-3, "UDSM_NAME" : "../../MohrCoulombUMAT.dll", "IS_FORTRAN_UDSM" : true, - "NUMBER_OF_UMAT_PARAMETERS": 6, "UMAT_PARAMETERS" : [30000000, 0.2, 1000.0, @@ -51,7 +50,6 @@ "DYNAMIC_VISCOSITY" : 1.0e-3, "UDSM_NAME" : "../../MohrCoulombUMAT.dll", "IS_FORTRAN_UDSM" : true, - "NUMBER_OF_UMAT_PARAMETERS": 6, "UMAT_PARAMETERS" : [10000000, 0.2, 5000, diff --git a/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_c_phi_reduction_process.cpp b/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_c_phi_reduction_process.cpp index 5629708e536d..f78c850d872a 100644 --- a/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_c_phi_reduction_process.cpp +++ b/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_c_phi_reduction_process.cpp @@ -58,7 +58,6 @@ ModelPart& PrepareCPhiTestModelPart(Model& rModel) r_model_part_properties.SetValue(UMAT_PARAMETERS, umat_parameters); r_model_part_properties.SetValue(INDEX_OF_UMAT_C_PARAMETER, 3); r_model_part_properties.SetValue(INDEX_OF_UMAT_PHI_PARAMETER, 4); - r_model_part_properties.SetValue(NUMBER_OF_UMAT_PARAMETERS, 6); return result; } @@ -123,11 +122,6 @@ KRATOS_TEST_CASE_IN_SUITE(CheckFailureUmatInputsApplyCPhiReductionProcess, Krato Vector umat_parameters(6); umat_parameters <<= 10000000, 0.2, 10.0, 25.0, 25.0, 1000; r_model_part_properties.SetValue(UMAT_PARAMETERS, umat_parameters); - KRATOS_EXPECT_EXCEPTION_IS_THROWN( - (ApplyCPhiReductionProcess{r_model_part, {}}.ExecuteInitializeSolutionStep()), - "Missing required item NUMBER_OF_UMAT_PARAMETERS") - - r_model_part_properties.SetValue(NUMBER_OF_UMAT_PARAMETERS, 6); // checking of Phi KRATOS_EXPECT_EXCEPTION_IS_THROWN( @@ -137,12 +131,12 @@ KRATOS_TEST_CASE_IN_SUITE(CheckFailureUmatInputsApplyCPhiReductionProcess, Krato r_model_part_properties.SetValue(INDEX_OF_UMAT_PHI_PARAMETER, 0); KRATOS_EXPECT_EXCEPTION_IS_THROWN( (ApplyCPhiReductionProcess{r_model_part, {}}.ExecuteInitializeSolutionStep()), - "invalid INDEX_OF_UMAT_PHI_PARAMETER: 0 (out-of-bounds index)") + "Invalid INDEX_OF_UMAT_PHI_PARAMETER: 0 (out-of-bounds index)") r_model_part_properties.SetValue(INDEX_OF_UMAT_PHI_PARAMETER, 7); KRATOS_EXPECT_EXCEPTION_IS_THROWN( (ApplyCPhiReductionProcess{r_model_part, {}}.ExecuteInitializeSolutionStep()), - "invalid INDEX_OF_UMAT_PHI_PARAMETER: 7 (out-of-bounds index)") + "Invalid INDEX_OF_UMAT_PHI_PARAMETER: 7 (out-of-bounds index)") r_model_part_properties.SetValue(INDEX_OF_UMAT_PHI_PARAMETER, 4); umat_parameters(3) = -0.0001; diff --git a/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_k0_procedure_process.cpp b/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_k0_procedure_process.cpp index fc7523e8a0cb..a4f0437a1bf5 100644 --- a/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_k0_procedure_process.cpp +++ b/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_k0_procedure_process.cpp @@ -215,7 +215,6 @@ KRATOS_TEST_CASE_IN_SUITE(K0ProcedureIsAppliedCorrectlyWithPhi, KratosGeoMechani // Arrange auto p_properties = std::make_shared(); p_properties->SetValue(INDEX_OF_UMAT_PHI_PARAMETER, 1); - p_properties->SetValue(NUMBER_OF_UMAT_PARAMETERS, 1); Vector umat_parameters{1}; umat_parameters[0] = 30.0; p_properties->SetValue(UMAT_PARAMETERS, umat_parameters); @@ -238,7 +237,6 @@ KRATOS_TEST_CASE_IN_SUITE(K0ProcedureIsAppliedCorrectlyWithPhi_3D, KratosGeoMech // Arrange auto p_properties = std::make_shared(); p_properties->SetValue(INDEX_OF_UMAT_PHI_PARAMETER, 1); - p_properties->SetValue(NUMBER_OF_UMAT_PARAMETERS, 1); Vector umat_parameters{1}; umat_parameters[0] = 30.0; p_properties->SetValue(UMAT_PARAMETERS, umat_parameters); @@ -450,8 +448,7 @@ KRATOS_TEST_CASE_IN_SUITE(K0ProcedureChecksIfProcessHasCorrectMaterialData, Krat KRATOS_EXPECT_EXCEPTION_IS_THROWN( process.Check(), "Insufficient material data for K0 procedure process for element 1. No K0_NC, " - "(INDEX_OF_UMAT_PHI_PARAMETER, NUMBER_OF_UMAT_PARAMETERS and " - "UMAT_PARAMETERS) or (K0_VALUE_XX, _YY and _ZZ found).") + "(INDEX_OF_UMAT_PHI_PARAMETER and UMAT_PARAMETERS) or (K0_VALUE_XX, _YY and _ZZ found).") p_element->GetProperties().SetValue(K0_VALUE_XX, -0.5); p_element->GetProperties().SetValue(K0_VALUE_YY, -0.5); p_element->GetProperties().SetValue(K0_VALUE_ZZ, -0.5); @@ -482,16 +479,15 @@ KRATOS_TEST_CASE_IN_SUITE(K0ProcedureChecksIfProcessHasCorrectMaterialData, Krat p_element->GetProperties().Erase(K0_VALUE_YY); p_element->GetProperties().Erase(K0_VALUE_ZZ); - p_element->GetProperties().SetValue(INDEX_OF_UMAT_PHI_PARAMETER, 1); - p_element->GetProperties().SetValue(NUMBER_OF_UMAT_PARAMETERS, 0); + p_element->GetProperties().SetValue(INDEX_OF_UMAT_PHI_PARAMETER, 2); Vector umat_parameters{1}; umat_parameters[0] = -30.0; p_element->GetProperties().SetValue(UMAT_PARAMETERS, umat_parameters); - KRATOS_EXPECT_EXCEPTION_IS_THROWN(process.Check(), - "INDEX_OF_UMAT_PHI_PARAMETER (1) is not in range 1, " - "NUMBER_OF_UMAT_PARAMETERS (0) for element 1.") + KRATOS_EXPECT_EXCEPTION_IS_THROWN( + process.Check(), + "INDEX_OF_UMAT_PHI_PARAMETER (2) is not in range 1, size of UMAT_PARAMETERS for element 1") + p_element->GetProperties().SetValue(INDEX_OF_UMAT_PHI_PARAMETER, 1); - p_element->GetProperties().SetValue(NUMBER_OF_UMAT_PARAMETERS, 1); KRATOS_EXPECT_EXCEPTION_IS_THROWN(process.Check(), "Phi (-30) should be between 0 and 90 degrees for element 1.") @@ -508,7 +504,6 @@ KRATOS_TEST_CASE_IN_SUITE(K0ProcedureChecksIfProcessHasCorrectMaterialData, Krat p_element->GetProperties().Erase(POP); p_element->GetProperties().Erase(INDEX_OF_UMAT_PHI_PARAMETER); - p_element->GetProperties().Erase(NUMBER_OF_UMAT_PARAMETERS); p_element->GetProperties().Erase(UMAT_PARAMETERS); p_element->GetProperties().SetValue(K0_NC, -0.5); KRATOS_EXPECT_EXCEPTION_IS_THROWN(process.Check(), diff --git a/applications/GeoMechanicsApplication/tests/test_k0_procedure_process/test_k0_procedure_k0_umat/MaterialParameters1.json b/applications/GeoMechanicsApplication/tests/test_k0_procedure_process/test_k0_procedure_k0_umat/MaterialParameters1.json index 954501994b85..e736f4d25a5d 100644 --- a/applications/GeoMechanicsApplication/tests/test_k0_procedure_process/test_k0_procedure_k0_umat/MaterialParameters1.json +++ b/applications/GeoMechanicsApplication/tests/test_k0_procedure_process/test_k0_procedure_k0_umat/MaterialParameters1.json @@ -22,7 +22,6 @@ "YOUNG_MODULUS": 100000.0, "POISSON_RATIO": 0.2, "K0_MAIN_DIRECTION": 1, - "NUMBER_OF_UMAT_PARAMETERS": 6, "INDEX_OF_UMAT_PHI_PARAMETER": 4, "UMAT_PARAMETERS" : [30000000, 0.2, diff --git a/applications/GeoMechanicsApplication/tests/test_k0_procedure_process/test_k0_procedure_phi_pop_layers/MaterialParameters.json b/applications/GeoMechanicsApplication/tests/test_k0_procedure_process/test_k0_procedure_phi_pop_layers/MaterialParameters.json index 6db3f3fb72bf..3f21bcc36724 100644 --- a/applications/GeoMechanicsApplication/tests/test_k0_procedure_process/test_k0_procedure_phi_pop_layers/MaterialParameters.json +++ b/applications/GeoMechanicsApplication/tests/test_k0_procedure_process/test_k0_procedure_phi_pop_layers/MaterialParameters.json @@ -27,7 +27,6 @@ "K0_MAIN_DIRECTION": 1, "POP": 1400, "POISSON_UNLOADING_RELOADING": 0.2, - "NUMBER_OF_UMAT_PARAMETERS": 8, "INDEX_OF_UMAT_PHI_PARAMETER": 4, "INDEX_OF_UMAT_C_PARAMETER": 3, "UMAT_PARAMETERS" : [30.0E6, @@ -71,7 +70,6 @@ "UDSM_NAME" : "../MohrCoulomb64.dll", "UDSM_NUMBER" : 1, "IS_FORTRAN_UDSM" : true, - "NUMBER_OF_UMAT_PARAMETERS": 8, "INDEX_OF_UMAT_PHI_PARAMETER": 4, "INDEX_OF_UMAT_C_PARAMETER": 3, "UMAT_PARAMETERS" : [30.0E6, @@ -115,7 +113,6 @@ "UDSM_NAME" : "../MohrCoulomb64.dll", "UDSM_NUMBER" : 1, "IS_FORTRAN_UDSM" : true, - "NUMBER_OF_UMAT_PARAMETERS": 8, "INDEX_OF_UMAT_PHI_PARAMETER": 4, "INDEX_OF_UMAT_C_PARAMETER": 3, "UMAT_PARAMETERS" : [30.0E6, diff --git a/applications/GeoMechanicsApplication/tests/test_k0_procedure_process/test_k0_procedure_simple_dike/MaterialParameters.json b/applications/GeoMechanicsApplication/tests/test_k0_procedure_process/test_k0_procedure_simple_dike/MaterialParameters.json index 84e454e862c8..d44e0675e354 100644 --- a/applications/GeoMechanicsApplication/tests/test_k0_procedure_process/test_k0_procedure_simple_dike/MaterialParameters.json +++ b/applications/GeoMechanicsApplication/tests/test_k0_procedure_process/test_k0_procedure_simple_dike/MaterialParameters.json @@ -16,12 +16,11 @@ "PERMEABILITY_XX" : 4.5e-30, "PERMEABILITY_YY" : 4.5e-30, "PERMEABILITY_XY" : 0.0, - "K0_MAIN_DIRECTION" : 1, + "K0_MAIN_DIRECTION" : 1, "DYNAMIC_VISCOSITY" : 1.0e-3, "UDSM_NAME" : "../../MohrCoulombUMAT.dll", "IS_FORTRAN_UDSM" : true, - "NUMBER_OF_UMAT_PARAMETERS": 6, - "INDEX_OF_UMAT_PHI_PARAMETER": 4, + "INDEX_OF_UMAT_PHI_PARAMETER": 4, "UMAT_PARAMETERS" : [30000000, 0.2, 1000.0, @@ -53,7 +52,6 @@ "DYNAMIC_VISCOSITY" : 1.0e-3, "UDSM_NAME" : "../../MohrCoulombUMAT.dll", "IS_FORTRAN_UDSM" : true, - "NUMBER_OF_UMAT_PARAMETERS": 6, "UMAT_PARAMETERS" : [10000000, 0.2, 5000, From 0687023aded3bf2eb54f971f5cc6394f9c09bc65 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Thu, 5 Dec 2024 17:11:16 +0100 Subject: [PATCH 086/142] avoid repetition and costly operations --- ...ateral_gauss_legendre_integration_points.h | 87 ++++++++++++------- 1 file changed, 54 insertions(+), 33 deletions(-) diff --git a/kratos/integration/quadrilateral_gauss_legendre_integration_points.h b/kratos/integration/quadrilateral_gauss_legendre_integration_points.h index 7de801aad5b7..1c5a406d69ec 100644 --- a/kratos/integration/quadrilateral_gauss_legendre_integration_points.h +++ b/kratos/integration/quadrilateral_gauss_legendre_integration_points.h @@ -10,8 +10,7 @@ // Main authors: Josep Maria Carbonell // -#if !defined(KRATOS_QUADRILATERAL_GAUSS_LEGENDRE_INTEGRATION_POINTS_H_INCLUDED ) -#define KRATOS_QUADRILATERAL_GAUSS_LEGENDRE_INTEGRATION_POINTS_H_INCLUDED +#pragma once // System includes @@ -83,11 +82,12 @@ class QuadrilateralGaussLegendreIntegrationPoints2 static const IntegrationPointsArrayType& IntegrationPoints() { + const double one_over_sqrt_3 = 1.00 / std::sqrt(3.0); static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( -1.00/std::sqrt(3.0) , -1.00/std::sqrt(3.0), 1.00 ), - IntegrationPointType( 1.00/std::sqrt(3.0) , -1.00/std::sqrt(3.0), 1.00 ), - IntegrationPointType( 1.00/std::sqrt(3.0) , 1.00/std::sqrt(3.0), 1.00 ), - IntegrationPointType( -1.00/std::sqrt(3.0) , 1.00/std::sqrt(3.0), 1.00 ) + IntegrationPointType( -one_over_sqrt_3 , -one_over_sqrt_3, 1.00 ), + IntegrationPointType( one_over_sqrt_3 , -one_over_sqrt_3, 1.00 ), + IntegrationPointType( one_over_sqrt_3 , one_over_sqrt_3, 1.00 ), + IntegrationPointType( -one_over_sqrt_3 , one_over_sqrt_3, 1.00 ) }}; return s_integration_points; } @@ -123,20 +123,28 @@ class QuadrilateralGaussLegendreIntegrationPoints3 static const IntegrationPointsArrayType& IntegrationPoints() { + // Auxiliary variables for repeated terms + const double sqrt_3_5 = std::sqrt(3.0 / 5.0); + const double weight1 = 25.0 / 81.0; + const double weight2 = 40.0 / 81.0; + const double weight3 = 64.0 / 81.0; + + // Integration points static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( -std::sqrt(3.00/5.00) , -std::sqrt(3.00/5.00), 25.00/81.00 ), - IntegrationPointType( 0.00 , -std::sqrt(3.00/5.00), 40.00/81.00 ), - IntegrationPointType( std::sqrt(3.00/5.00) , -std::sqrt(3.00/5.00), 25.00/81.00 ), - IntegrationPointType( -std::sqrt(3.00/5.00), 0.00, 40.00/81.00 ), - IntegrationPointType( 0.00 , 0.00, 64.00/81.00 ), - IntegrationPointType( std::sqrt(3.00/5.00), 0.00, 40.00/81.00 ), - IntegrationPointType( -std::sqrt(3.00/5.00), std::sqrt(3.00/5.00), 25.00/81.00 ), - IntegrationPointType( 0.00, std::sqrt(3.00/5.00), 40.00/81.00 ), - IntegrationPointType( std::sqrt(3.00/5.00), std::sqrt(3.00/5.00), 25.00/81.00 ) + IntegrationPointType(-sqrt_3_5, -sqrt_3_5, weight1), + IntegrationPointType( 0.0, -sqrt_3_5, weight2), + IntegrationPointType( sqrt_3_5, -sqrt_3_5, weight1), + IntegrationPointType(-sqrt_3_5, 0.0, weight2), + IntegrationPointType( 0.0, 0.0, weight3), + IntegrationPointType( sqrt_3_5, 0.0, weight2), + IntegrationPointType(-sqrt_3_5, sqrt_3_5, weight1), + IntegrationPointType( 0.0, sqrt_3_5, weight2), + IntegrationPointType( sqrt_3_5, sqrt_3_5, weight1) }}; return s_integration_points; } + std::string Info() const { std::stringstream buffer; @@ -165,24 +173,39 @@ class QuadrilateralGaussLegendreIntegrationPoints4 static const IntegrationPointsArrayType& IntegrationPoints() { + // Auxiliary variables for repeated terms + const double sqrt_6_5 = std::sqrt(6.0 / 5.0); + const double term1 = std::sqrt((3.0 + 2.0 * sqrt_6_5) / 7.0); + const double term2 = std::sqrt((3.0 - 2.0 * sqrt_6_5) / 7.0); + const double sqrt_5_6 = std::sqrt(5.0 / 6.0); + const double weight1 = (0.5 - sqrt_5_6 / 6.0); + const double weight2 = (0.5 + sqrt_5_6 / 6.0); + + // Pre-computed weights + const double weight1_squared = weight1 * weight1; + const double weight1_weight2 = weight1 * weight2; + const double weight2_squared = weight2 * weight2; + + // Integration points static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( -std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), -std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 - std::sqrt(5.0/6.0)/6.0)*(0.5 - std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( -std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), -std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 - std::sqrt(5.0/6.0)/6.0)*(0.5 + std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( -std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 - std::sqrt(5.0/6.0)/6.0)*(0.5 + std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( -std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 - std::sqrt(5.0/6.0)/6.0)*(0.5 - std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( -std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), -std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 + std::sqrt(5.0/6.0)/6.0)*(0.5 - std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( -std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), -std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 + std::sqrt(5.0/6.0)/6.0)*(0.5 + std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( -std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 + std::sqrt(5.0/6.0)/6.0)*(0.5 + std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( -std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 + std::sqrt(5.0/6.0)/6.0)*(0.5 - std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), -std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 + std::sqrt(5.0/6.0)/6.0)*(0.5 - std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), -std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 + std::sqrt(5.0/6.0)/6.0)*(0.5 + std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 + std::sqrt(5.0/6.0)/6.0)*(0.5 + std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 + std::sqrt(5.0/6.0)/6.0)*(0.5 - std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), -std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 - std::sqrt(5.0/6.0)/6.0)*(0.5 - std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), -std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 - std::sqrt(5.0/6.0)/6.0)*(0.5 + std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), std::sqrt( (3.0 - 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 - std::sqrt(5.0/6.0)/6.0)*(0.5 + std::sqrt(5.0/6.0)/6.0)), - IntegrationPointType( std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), std::sqrt( (3.0 + 2.0 * std::sqrt(6.0/5.0)) / 7.0 ), (0.5 - std::sqrt(5.0/6.0)/6.0)*(0.5 - std::sqrt(5.0/6.0)/6.0)) + IntegrationPointType(-term1, -term1, weight1_squared), + IntegrationPointType(-term1, -term2, weight1_weight2), + IntegrationPointType(-term1, term2, weight1_weight2), + IntegrationPointType(-term1, term1, weight1_squared), + IntegrationPointType(-term2, -term1, weight1_weight2), + IntegrationPointType(-term2, -term2, weight2_squared), + IntegrationPointType(-term2, term2, weight2_squared), + IntegrationPointType(-term2, term1, weight1_weight2), + IntegrationPointType(term2, -term1, weight1_weight2), + IntegrationPointType(term2, -term2, weight2_squared), + IntegrationPointType(term2, term2, weight2_squared), + IntegrationPointType(term2, term1, weight1_weight2), + IntegrationPointType(term1, -term1, weight1_squared), + IntegrationPointType(term1, -term2, weight1_weight2), + IntegrationPointType(term1, term2, weight1_weight2), + IntegrationPointType(term1, term1, weight1_squared) }}; + return s_integration_points; } @@ -251,6 +274,4 @@ class QuadrilateralGaussLegendreIntegrationPoints5 { } // namespace Kratos. -#endif // KRATOS_QUADRILATERAL_GAUSS_LEGENDRE_INTEGRATION_POINTS_H_INCLUDED defined - From 5e76828c9d2cae678e97f6cd6af83f27ef2b4463 Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Thu, 5 Dec 2024 17:26:53 +0100 Subject: [PATCH 087/142] Working version with geometries --- .../conjugate_heat_transfer_solver.py | 58 +++++++++---------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/applications/ConvectionDiffusionApplication/python_scripts/conjugate_heat_transfer_solver.py b/applications/ConvectionDiffusionApplication/python_scripts/conjugate_heat_transfer_solver.py index 7f78149daffc..0f679e95031a 100644 --- a/applications/ConvectionDiffusionApplication/python_scripts/conjugate_heat_transfer_solver.py +++ b/applications/ConvectionDiffusionApplication/python_scripts/conjugate_heat_transfer_solver.py @@ -1,4 +1,5 @@ import sys +import copy # Importing the Kratos Library import KratosMultiphysics @@ -150,42 +151,18 @@ def AddVariables(self): self.solid_thermal_solver.main_model_part.AddNodalSolutionStepVariable(KratosConvDiff.AUX_TEMPERATURE) self.solid_thermal_solver.main_model_part.AddNodalSolutionStepVariable(KratosMultiphysics.SCALAR_INTERFACE_RESIDUAL) - def ImportModelPart(self): - # Check that both thermal solvers have a different model part name. If - # both model part names coincide the solver will fail to acces them. This - # is the case if the default one in the convection diffusion is taken. - fluid_thermal_model_part_name = self.settings["fluid_domain_solver_settings"]["thermal_solver_settings"]["model_part_name"].GetString() - solid_thermal_model_part_name = self.settings["solid_domain_solver_settings"]["thermal_solver_settings"]["model_part_name"].GetString() - if fluid_thermal_model_part_name == solid_thermal_model_part_name: - err_msg = "\nFluid thermal solver settings model_part_name and solid thermal solver settings model_part_name can not coincide.\n" - err_msg += "- fluid model_part_name: " + fluid_thermal_model_part_name + "\n" - err_msg += "- solid model_part_name: " + solid_thermal_model_part_name + "\n" - err_msg += "Provide different model_part_names in the JSON settings file." - raise Exception(err_msg) - - # Import the fluid domain in the fluid dynamics solver - self.fluid_solver.ImportModelPart() - # In order to consider the buoyancy effects, the nodes in the fluid model part must # be shared with the nodes in the fluid thermal model part. To do that, we use the modeler # Save the convection diffusion settings - convection_diffusion_settings = self.fluid_thermal_solver.main_model_part.ProcessInfo.GetValue(KratosMultiphysics.CONVECTION_DIFFUSION_SETTINGS) - - # Here the fluid model part is cloned to be thermal model part so that the nodes are shared - modeler = KratosMultiphysics.ConnectivityPreserveModeler() - if(self.domain_size == 2): - modeler.GenerateModelPart(self.fluid_solver.main_model_part, - self.fluid_thermal_solver.main_model_part, - "Element2D3N", - "LineCondition2D2N") - else: - modeler.GenerateModelPart(self.fluid_solver.main_model_part, - self.fluid_thermal_solver.main_model_part, - "Element3D4N", - "SurfaceCondition3D3N") + self.fluid_convection_diffusion_settings_aux_copy = self.fluid_thermal_solver.main_model_part.ProcessInfo.GetValue(KratosMultiphysics.CONVECTION_DIFFUSION_SETTINGS) + + def ImportModelPart(self): + # Import the fluid domain in the fluid dynamics solver + self.fluid_solver.ImportModelPart() # Set the saved convection diffusion settings to the new thermal model part - self.fluid_thermal_solver.main_model_part.ProcessInfo.SetValue(KratosMultiphysics.CONVECTION_DIFFUSION_SETTINGS, convection_diffusion_settings) + self.fluid_thermal_solver.main_model_part.ProcessInfo.SetValue(KratosMultiphysics.CONVECTION_DIFFUSION_SETTINGS, self.fluid_convection_diffusion_settings_aux_copy) + self.fluid_convection_diffusion_settings_aux_copy = None # Confirm that the buffer size in the shared nodes is the maximum required one fluid_solver_buffer = self.fluid_solver.GetMinimumBufferSize() @@ -249,6 +226,18 @@ def Clear(self): (self.solid_thermal_solver).Clear() def Check(self): + # Check that both thermal solvers have a different model part name. If + # both model part names coincide the solver will fail to acces them. This + # is the case if the default one in the convection diffusion is taken. + fluid_thermal_model_part_name = self.settings["fluid_domain_solver_settings"]["thermal_solver_settings"]["model_part_name"].GetString() + solid_thermal_model_part_name = self.settings["solid_domain_solver_settings"]["thermal_solver_settings"]["model_part_name"].GetString() + if fluid_thermal_model_part_name == solid_thermal_model_part_name: + err_msg = "\nFluid thermal solver settings model_part_name and solid thermal solver settings model_part_name can not coincide.\n" + err_msg += "- fluid model_part_name: " + fluid_thermal_model_part_name + "\n" + err_msg += "- solid model_part_name: " + solid_thermal_model_part_name + "\n" + err_msg += "Provide different model_part_names in the JSON settings file." + raise Exception(err_msg) + (self.fluid_solver).Check() (self.fluid_thermal_solver).Check() (self.solid_thermal_solver).Check() @@ -297,7 +286,7 @@ def SolveSolutionStep(self): redistribution_max_iterations = self.settings["coupling_settings"]["variable_redistribution_settings"]["max_iterations"].GetInt() # Solve the buoyancy solver - self.fluid_solver.SolveSolutionStep() + fluid_is_converged = self.fluid_solver.SolveSolutionStep() # Interface temperature prediction self._temperature_coupling_prediction() @@ -307,6 +296,7 @@ def SolveSolutionStep(self): # Couple the solid and fluid thermal problems iteration = 0 + coupling_is_converged = False KratosMultiphysics.Logger.PrintInfo("::[ConjugateHeatTransferSolver]::", "Starting non-linear temperature coupling") while iteration < max_iteration: # Initialize non-linear iteration @@ -322,6 +312,7 @@ def SolveSolutionStep(self): # Map reactions to the solid interface. Note that we first call the redistribution utility to convert the point values to distributed ones KratosMultiphysics.VariableRedistributionUtility.DistributePointValues( self._get_dirichlet_coupling_interface(), + self._get_dirichlet_coupling_interface().Conditions, KratosMultiphysics.REACTION_FLUX, KratosConvDiff.AUX_FLUX, redistribution_tolerance, @@ -365,11 +356,14 @@ def SolveSolutionStep(self): # Check convergence if rel_res_norm <= temp_rel_tol: + coupling_is_converged = True KratosMultiphysics.Logger.PrintInfo("::[ConjugateHeatTransferSolver]::", "Converged in " + str(iteration) + " iterations.") break elif iteration == max_iteration: KratosMultiphysics.Logger.PrintInfo("::[ConjugateHeatTransferSolver]::", "Did not converge in " + str(iteration) + " iterations.") + return fluid_is_converged and coupling_is_converged + def FinalizeSolutionStep(self): if self._time_buffer_is_initialized(): self.fluid_solver.FinalizeSolutionStep() From e26c88873885de5c3c36084537ede7d9194007e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 5 Dec 2024 17:39:43 +0100 Subject: [PATCH 088/142] [Core] Clean up test for `monotonicity_preserving_solver` --- .../test_monotonicity_solver.cpp | 214 +++++++++--------- 1 file changed, 104 insertions(+), 110 deletions(-) diff --git a/kratos/tests/cpp_tests/linear_solvers/test_monotonicity_solver.cpp b/kratos/tests/cpp_tests/linear_solvers/test_monotonicity_solver.cpp index c09c4833988c..d1912a7a40ee 100644 --- a/kratos/tests/cpp_tests/linear_solvers/test_monotonicity_solver.cpp +++ b/kratos/tests/cpp_tests/linear_solvers/test_monotonicity_solver.cpp @@ -4,22 +4,21 @@ // _|\_\_| \__,_|\__|\___/ ____/ // Multi-Physics // -// License: BSD License -// Kratos default license: kratos/license.txt +// License: BSD License +// Kratos default license: kratos/license.txt // // Main authors: Vicente Mataix Ferrandiz // // System includes -/* External includes */ +// External includes -/* Project includes */ +// Project includes #include "testing/testing.h" #include "includes/kratos_filesystem.h" #include "includes/matrix_market_interface.h" - /* Utility includes */ #include "includes/define.h" #include "containers/model.h" @@ -30,114 +29,109 @@ /* Linear Solver includes */ #include "linear_solvers/monotonicity_preserving_solver.h" +namespace Kratos::Testing +{ + +using SpaceType = TUblasSparseSpace; +using LocalSpaceType = TUblasDenseSpace; +using SparseMatrixType = typename SpaceType::MatrixType; -namespace Kratos +KRATOS_TEST_CASE_IN_SUITE(MonotonictyPreservingSolver, KratosCoreFastSuite) { - namespace Testing - { + Model current_model; + ModelPart& model_part = current_model.CreateModelPart("Main"); + + model_part.SetBufferSize(3); - typedef TUblasSparseSpace SpaceType; - typedef TUblasDenseSpace LocalSpaceType; - typedef typename SpaceType::MatrixType SparseMatrixType; - - - KRATOS_TEST_CASE_IN_SUITE(MonotonictyPreservingSolver, KratosCoreFastSuite) - { - Model current_model; - ModelPart& model_part = current_model.CreateModelPart("Main"); - - model_part.SetBufferSize(3); - - model_part.AddNodalSolutionStepVariable(TEMPERATURE); - - for (std::size_t i = 0; i < 5; i++) { - model_part.CreateNewNode(i+1, 0.0, 0.0, 0.0); - } - - VariableUtils().AddDof(TEMPERATURE, model_part); - - for (std::size_t i = 0; i < model_part.NumberOfNodes(); i++) { - auto it_node = model_part.NodesBegin() + i; - it_node->GetSolutionStepValue(TEMPERATURE) = 20.0*i; - } - - Parameters settings( R"( - { - "solver_type" : "monotonicity_preserving", - "inner_solver_settings" : { - "preconditioner_type" : "amg", - "solver_type" : "amgcl", - "smoother_type" : "ilu0", - "krylov_type" : "lgmres", - "coarsening_type" : "aggregation", - "max_iteration" : 100, - "provide_coordinates" : false, - "gmres_krylov_space_dimension" : 100, - "verbosity" : 1, - "tolerance" : 1e-6, - "scaling" : false, - "block_size" : 1, - "use_block_matrices_if_possible" : true, - "coarse_enough" : 1000, - "max_levels" : -1, - "pre_sweeps" : 1, - "post_sweeps" : 1, - "use_gpgpu" : false - } - - } )" ); - - MonotonicityPreservingSolver linear_solver(settings); - SpaceType::MatrixType rA(5,5); - SpaceType::VectorType rX = ZeroVector(5); - SpaceType::VectorType rB = ZeroVector(5); - ModelPart::DofsArrayType dof_set; - for (std::size_t i = 0; i < model_part.NumberOfNodes(); i++) { - auto it_node = model_part.NodesBegin() + i; - auto p_dof = it_node->pGetDof(TEMPERATURE); - p_dof->SetEquationId(i); - dof_set.push_back(p_dof); - } - rA(0,0) = 1.0; - rA(1,1) = 1.0; - rA(2,2) = 1.0; - rA(3,3) = 1.0; - rA(4,4) = 1.0; - rA(1,0) = 1.0; - rA(0,1) = 1.0; - rA(2,0) = 2.0; - rA(0,2) = 2.0; - rA(3,4) = 3.0; - rA(4,3) = 3.0; - rA(4,0) = -1.0; - rA(0,4) = -1.0; - if (linear_solver.AdditionalPhysicalDataIsNeeded()) { - linear_solver.ProvideAdditionalData(rA, rX, rB, dof_set, model_part); - } - - SpaceType::VectorType reference_b(5); - reference_b[0] = 100.0; - reference_b[1] = -20.0; - reference_b[2] = -80.0; - reference_b[3] = 60.0; - reference_b[4] = -60.0; - - KRATOS_EXPECT_NEAR(rA(1,0), 0.0, 1e-10); - KRATOS_EXPECT_NEAR(rA(0,1), 0.0, 1e-10); - KRATOS_EXPECT_NEAR(rA(2,0), 0.0, 1e-10); - KRATOS_EXPECT_NEAR(rA(0,2), 0.0, 1e-10); - KRATOS_EXPECT_NEAR(rA(3,4), 0.0, 1e-10); - KRATOS_EXPECT_NEAR(rA(4,3), 0.0, 1e-10); - KRATOS_EXPECT_NEAR(rA(4,0), -1.0, 1e-10); - KRATOS_EXPECT_NEAR(rA(0,4), -1.0, 1e-10); - KRATOS_EXPECT_NEAR(rA(0,0), 4.0, 1e-10); - KRATOS_EXPECT_NEAR(rA(1,1), 2.0, 1e-10); - KRATOS_EXPECT_NEAR(rA(2,2), 3.0, 1e-10); - KRATOS_EXPECT_NEAR(rA(3,3), 4.0, 1e-10); - KRATOS_EXPECT_NEAR(rA(4,4), 4.0, 1e-10); - KRATOS_EXPECT_VECTOR_NEAR(rB, reference_b, 1e-10); + model_part.AddNodalSolutionStepVariable(TEMPERATURE); + for (std::size_t i = 0; i < 5; i++) { + model_part.CreateNewNode(i+1, 0.0, 0.0, 0.0); + } + + VariableUtils().AddDof(TEMPERATURE, model_part); + + for (std::size_t i = 0; i < model_part.NumberOfNodes(); i++) { + auto it_node = model_part.NodesBegin() + i; + it_node->GetSolutionStepValue(TEMPERATURE) = 20.0*i; + } + + Parameters settings( R"( + { + "solver_type" : "monotonicity_preserving", + "inner_solver_settings" : { + "preconditioner_type" : "amg", + "solver_type" : "amgcl", + "smoother_type" : "ilu0", + "krylov_type" : "lgmres", + "coarsening_type" : "aggregation", + "max_iteration" : 100, + "provide_coordinates" : false, + "gmres_krylov_space_dimension" : 100, + "verbosity" : 1, + "tolerance" : 1e-6, + "scaling" : false, + "block_size" : 1, + "use_block_matrices_if_possible" : true, + "coarse_enough" : 1000, + "max_levels" : -1, + "pre_sweeps" : 1, + "post_sweeps" : 1, + "use_gpgpu" : false } - } // namespace Testing -} // namespace Kratos. + + } )" ); + + MonotonicityPreservingSolver linear_solver(settings); + SpaceType::MatrixType rA(5,5); + SpaceType::VectorType rX = ZeroVector(5); + SpaceType::VectorType rB = ZeroVector(5); + ModelPart::DofsArrayType dof_set; + for (std::size_t i = 0; i < model_part.NumberOfNodes(); i++) { + auto it_node = model_part.NodesBegin() + i; + auto p_dof = it_node->pGetDof(TEMPERATURE); + p_dof->SetEquationId(i); + dof_set.push_back(p_dof); + } + rA(0,0) = 1.0; + rA(1,1) = 1.0; + rA(2,2) = 1.0; + rA(3,3) = 1.0; + rA(4,4) = 1.0; + rA(1,0) = 1.0; + rA(0,1) = 1.0; + rA(2,0) = 2.0; + rA(0,2) = 2.0; + rA(3,4) = 3.0; + rA(4,3) = 3.0; + rA(4,0) = -1.0; + rA(0,4) = -1.0; + if (linear_solver.AdditionalPhysicalDataIsNeeded()) { + linear_solver.ProvideAdditionalData(rA, rX, rB, dof_set, model_part); + } + + SpaceType::VectorType reference_b(5); + reference_b[0] = 100.0; + reference_b[1] = -20.0; + reference_b[2] = -80.0; + reference_b[3] = 60.0; + reference_b[4] = -60.0; + + KRATOS_EXPECT_NEAR(rA(1,0), 0.0, 1e-10); + KRATOS_EXPECT_NEAR(rA(0,1), 0.0, 1e-10); + KRATOS_EXPECT_NEAR(rA(2,0), 0.0, 1e-10); + KRATOS_EXPECT_NEAR(rA(0,2), 0.0, 1e-10); + KRATOS_EXPECT_NEAR(rA(3,4), 0.0, 1e-10); + KRATOS_EXPECT_NEAR(rA(4,3), 0.0, 1e-10); + KRATOS_EXPECT_NEAR(rA(4,0), -1.0, 1e-10); + KRATOS_EXPECT_NEAR(rA(0,4), -1.0, 1e-10); + KRATOS_EXPECT_NEAR(rA(0,0), 4.0, 1e-10); + KRATOS_EXPECT_NEAR(rA(1,1), 2.0, 1e-10); + KRATOS_EXPECT_NEAR(rA(2,2), 3.0, 1e-10); + KRATOS_EXPECT_NEAR(rA(3,3), 4.0, 1e-10); + KRATOS_EXPECT_NEAR(rA(4,4), 4.0, 1e-10); + KRATOS_EXPECT_VECTOR_NEAR(rB, reference_b, 1e-10); + +} +} // namespace Kratos::Testing. From e5fe79584b21193dab37d8397b05f2e8435e7081 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Thu, 5 Dec 2024 17:41:12 +0100 Subject: [PATCH 089/142] [LinearSolversApplication] Update test suite references for fallback linear solver tests --- .../cpp_tests/linear_solvers/test_fallback_linear_solver.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp b/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp index 908f7e96e2cb..9ad6c2520298 100644 --- a/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp +++ b/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp @@ -82,7 +82,7 @@ using DummyLinearSolverType = DummyLinearSolver; using FallbackLinearSolverType = FallbackLinearSolver; using LinearSolverFactoryType = LinearSolverFactory; -KRATOS_TEST_CASE_IN_SUITE(FallbackLinearSolverConstructorSolvers, AltairExtensionApplicationFastSuite) +KRATOS_TEST_CASE_IN_SUITE(FallbackLinearSolverConstructorSolvers, KratosCoreFastSuite) { // Create the solvers auto p_solver1 = Kratos::make_shared(); @@ -127,7 +127,7 @@ KRATOS_TEST_CASE_IN_SUITE(FallbackLinearSolverConstructorSolvers, AltairExtensio KRATOS_EXPECT_EQ(simple_fallback_solver_2.GetCurrentSolverIndex(), 1); } -KRATOS_TEST_CASE_IN_SUITE(FallbackLinearSolverConstructorParameters, AltairExtensionApplicationFastSuite) +KRATOS_TEST_CASE_IN_SUITE(FallbackLinearSolverConstructorParameters, KratosCoreFastSuite) { // Create the matrix and vectors const std::size_t size = 3; From 4ff73ac86873ba390715c005bdbb2f167cbe890b Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Fri, 6 Dec 2024 10:28:39 +0100 Subject: [PATCH 090/142] [Core][TrilinosApplication] Remove unused constructor from FallbackLinearSolver/TrilinosFallbackLinearSolver and clean up related tests --- .../add_trilinos_linear_solvers_to_python.cpp | 1 - .../test_trilinos_fallback_linear_solver.cpp | 23 +++++----------- .../linear_solvers/fallback_linear_solver.h | 27 ------------------- .../python/add_linear_solvers_to_python.cpp | 1 - .../test_fallback_linear_solver.cpp | 18 +++---------- 5 files changed, 9 insertions(+), 61 deletions(-) diff --git a/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp b/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp index 9ed4cf1cd52b..d94ac64e64c6 100644 --- a/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp +++ b/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp @@ -76,7 +76,6 @@ void AddLinearSolvers(pybind11::module& m) using TrilinosFallbackLinearSolverType = FallbackLinearSolver; py::class_(m, "TrilinosFallbackLinearSolver") .def(py::init()) - .def(py::init()) .def(py::init&, Parameters>()) .def("AddSolver", [](TrilinosFallbackLinearSolverType& rSelf, TrilinosLinearSolverType::Pointer pSolver) { rSelf.AddSolver(pSolver); diff --git a/applications/TrilinosApplication/tests/cpp_tests/linear_solvers/test_trilinos_fallback_linear_solver.cpp b/applications/TrilinosApplication/tests/cpp_tests/linear_solvers/test_trilinos_fallback_linear_solver.cpp index ce0d8a863450..37f164dbacec 100644 --- a/applications/TrilinosApplication/tests/cpp_tests/linear_solvers/test_trilinos_fallback_linear_solver.cpp +++ b/applications/TrilinosApplication/tests/cpp_tests/linear_solvers/test_trilinos_fallback_linear_solver.cpp @@ -18,6 +18,7 @@ #include "testing/testing.h" #include "trilinos_space.h" #include "tests/cpp_tests/trilinos_cpp_test_utilities.h" +#include "tests/cpp_tests/trilinos_fast_suite.h" #include "linear_solvers/fallback_linear_solver.h" namespace Kratos::Testing @@ -82,7 +83,7 @@ using TrilinosDummyLinearSolverType = DummyLinearSolver; using TrilinosLinearSolverFactoryType = LinearSolverFactory; -KRATOS_DISTRIBUTED_TEST_CASE_IN_SUITE(TrilinosFallbackLinearSolverConstructorSolvers, ParallelComputingApplicationFastSuite) +KRATOS_DISTRIBUTED_TEST_CASE_IN_SUITE(TrilinosFallbackLinearSolverConstructorSolvers, KratosTrilinosApplicationMPITestSuite) { // Create the solvers auto p_solver1 = Kratos::make_shared(); @@ -100,33 +101,21 @@ KRATOS_DISTRIBUTED_TEST_CASE_IN_SUITE(TrilinosFallbackLinearSolverConstructorSol auto b = TrilinosCPPTestUtilities::GenerateDummySparseVector(r_comm, size); auto x = TrilinosCPPTestUtilities::GenerateDummySparseVector(r_comm, size); - // Create a simple fallback solver - TrilinosFallbackLinearSolverType simple_fallback_solver_1(p_solver1, p_solver2); - - // Solve the system - bool solved = simple_fallback_solver_1.Solve(A, x, b); - - // Check that the system was solved - KRATOS_EXPECT_TRUE(solved); - - // Check index is 1 (solve 0 failed) - KRATOS_EXPECT_EQ(simple_fallback_solver_1.GetCurrentSolverIndex(), 1); - // Create a simple fallback solver std::vector solvers = {p_solver1, p_solver2}; - TrilinosFallbackLinearSolverType simple_fallback_solver_2(solvers); + TrilinosFallbackLinearSolverType simple_fallback_solver(solvers); // Solve the system - solved = simple_fallback_solver_2.Solve(A, x, b); + const auto solved = simple_fallback_solver.Solve(A, x, b); // Check that the system was solved KRATOS_EXPECT_TRUE(solved); // Check index is 1 (solve 0 failed) - KRATOS_EXPECT_EQ(simple_fallback_solver_2.GetCurrentSolverIndex(), 1); + KRATOS_EXPECT_EQ(simple_fallback_solver.GetCurrentSolverIndex(), 1); } -KRATOS_DISTRIBUTED_TEST_CASE_IN_SUITE(TrilinosFallbackLinearSolverConstructorParameters, ParallelComputingApplicationFastSuite) +KRATOS_DISTRIBUTED_TEST_CASE_IN_SUITE(TrilinosFallbackLinearSolverConstructorParameters, KratosTrilinosApplicationMPITestSuite) { // The data communicator const auto& r_comm = Testing::GetDefaultDataCommunicator(); diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index a74332559280..4fda41589167 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -132,33 +132,6 @@ class FallbackLinearSolver CommonSettingsFromParameters(); } - /** - * @brief Constructor with two solvers - * @param pSolver1 The first LinearSolverPointer to set. - * @param pSolver2 The second LinearSolverPointer to set. - * @param ThisParameters The configuration parameters - */ - FallbackLinearSolver( - LinearSolverPointer pSolver1, - LinearSolverPointer pSolver2, - Parameters ThisParameters = Parameters(R"({})") - ) : mSolvers({pSolver1, pSolver2}), - mParameters(ThisParameters) - { - // Verify that linear solvers are not defined in the parameters - KRATOS_ERROR_IF(mParameters.Has("solvers")) << "The solvers are already defined in the input parameters" << std::endl; - - // Set the default parameters - mParameters.ValidateAndAssignDefaults(GetDefaultParameters()); - - // Fill the parameters with the solvers - FillParametersFromSolver(pSolver1); - FillParametersFromSolver(pSolver2); - - // Set some member variables from the parameters - CommonSettingsFromParameters(); - } - /** * @brief Constructor with a list of solvers * @param rSolvers A vector of LinearSolverPointer to set. diff --git a/kratos/python/add_linear_solvers_to_python.cpp b/kratos/python/add_linear_solvers_to_python.cpp index b6649514440e..acae83e66ce2 100644 --- a/kratos/python/add_linear_solvers_to_python.cpp +++ b/kratos/python/add_linear_solvers_to_python.cpp @@ -241,7 +241,6 @@ void AddLinearSolversToPython(pybind11::module& m) using FallbackLinearSolverType = FallbackLinearSolver; py::class_(m, "FallbackLinearSolver") .def(py::init()) - .def(py::init()) .def(py::init&, Parameters>()) .def("AddSolver", [](FallbackLinearSolverType& rSelf, LinearSolverType::Pointer pSolver) { rSelf.AddSolver(pSolver); diff --git a/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp b/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp index 9ad6c2520298..f2bdf8068ffc 100644 --- a/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp +++ b/kratos/tests/cpp_tests/linear_solvers/test_fallback_linear_solver.cpp @@ -101,30 +101,18 @@ KRATOS_TEST_CASE_IN_SUITE(FallbackLinearSolverConstructorSolvers, KratosCoreFast VectorType b(size); VectorType x(size); - // Create a simple fallback solver - FallbackLinearSolverType simple_fallback_solver_1(p_solver1, p_solver2); - - // Solve the system - bool solved = simple_fallback_solver_1.Solve(A, x, b); - - // Check that the system was solved - KRATOS_EXPECT_TRUE(solved); - - // Check index is 1 (solve 0 failed) - KRATOS_EXPECT_EQ(simple_fallback_solver_1.GetCurrentSolverIndex(), 1); - // Create a simple fallback solver std::vector solvers = {p_solver1, p_solver2}; - FallbackLinearSolverType simple_fallback_solver_2(solvers); + FallbackLinearSolverType simple_fallback_solver(solvers); // Solve the system - solved = simple_fallback_solver_2.Solve(A, x, b); + const auto solved = simple_fallback_solver.Solve(A, x, b); // Check that the system was solved KRATOS_EXPECT_TRUE(solved); // Check index is 1 (solve 0 failed) - KRATOS_EXPECT_EQ(simple_fallback_solver_2.GetCurrentSolverIndex(), 1); + KRATOS_EXPECT_EQ(simple_fallback_solver.GetCurrentSolverIndex(), 1); } KRATOS_TEST_CASE_IN_SUITE(FallbackLinearSolverConstructorParameters, KratosCoreFastSuite) From 7c192de2b72d160564b6e1024f9bd682cf648679 Mon Sep 17 00:00:00 2001 From: Vicente Mataix Ferrandiz Date: Fri, 6 Dec 2024 10:32:42 +0100 Subject: [PATCH 091/142] [LinearSolversApplication] Improve warning messages in FallbackLinearSolver and remove unused sections --- .../linear_solvers/fallback_linear_solver.h | 45 +------------------ 1 file changed, 2 insertions(+), 43 deletions(-) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index 4fda41589167..6d2e76ca5569 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -763,7 +763,7 @@ class FallbackLinearSolver if (mCurrentSolverIndex < mSolvers.size()) { KRATOS_INFO("FallbackLinearSolver") << "Current solver " << GetCurrentSolver()->Info() << " failed with the following settings: " << mParameters["solvers"][mCurrentSolverIndex].PrettyPrintJsonString() << std::endl; } else { - KRATOS_WARNING("FallbackLinearSolver") << "Current solver index is out of bounds." << std::endl; + KRATOS_WARNING("FallbackLinearSolver") << "Solver index cannot be updated as all potential linear solvers has been already tried. Sticking to current solver " << GetCurrentSolver()->Info() << std::endl; return; } @@ -774,7 +774,7 @@ class FallbackLinearSolver if (mCurrentSolverIndex < mSolvers.size()) { KRATOS_INFO("FallbackLinearSolver") << "Switching to new solver " << GetCurrentSolver()->Info() << " with the following settings: " << mParameters["solvers"][mCurrentSolverIndex].PrettyPrintJsonString() << std::endl; } else { - KRATOS_WARNING("FallbackLinearSolver") << "New solver index is out of bounds." << std::endl; + KRATOS_WARNING("FallbackLinearSolver") << "Solver index cannot be updated as all potential linear solvers has been already tried. Sticking to current solver " << GetCurrentSolver()->Info() << std::endl; return; } } @@ -795,47 +795,6 @@ class FallbackLinearSolver } } - ///@} - ///@name Protected Access - ///@{ - - ///@} - ///@name Protected Inquiry - ///@{ - - ///@} - ///@name Protected LifeCycle - ///@{ - - ///@} -private: - ///@name Static Member Variables - ///@{ - - ///@} - ///@name Member Variables - ///@{ - - ///@} - ///@name Private Operators - ///@{ - - ///@} - ///@name Private Operations - ///@{ - - ///@} - ///@name Private Access - ///@{ - - ///@} - ///@name Private Inquiry - ///@{ - - ///@} - ///@name Un accessible methods - ///@{ - ///@} }; // Class FallbackLinearSolver From 1951aab96242060172f75c644ea32bbbeb9ffd19 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Fri, 6 Dec 2024 11:10:14 +0100 Subject: [PATCH 092/142] updating some more classical quadratures --- ...hedron_gauss_legendre_integration_points.h | 106 ++++++++++-------- ...hedron_gauss_legendre_integration_points.h | 14 +-- ...iangle_gauss_legendre_integration_points.h | 34 ++++-- 3 files changed, 90 insertions(+), 64 deletions(-) diff --git a/kratos/integration/hexahedron_gauss_legendre_integration_points.h b/kratos/integration/hexahedron_gauss_legendre_integration_points.h index 34f8793e9c79..50b4b21926de 100644 --- a/kratos/integration/hexahedron_gauss_legendre_integration_points.h +++ b/kratos/integration/hexahedron_gauss_legendre_integration_points.h @@ -12,8 +12,7 @@ // -#if !defined(KRATOS_HEXAHEDRON_GAUSS_LEGENDRE_INTEGRATION_POINTS_H_INCLUDED ) -#define KRATOS_HEXAHEDRON_GAUSS_LEGENDRE_INTEGRATION_POINTS_H_INCLUDED +#pragma once // System includes @@ -48,7 +47,7 @@ class HexahedronGaussLegendreIntegrationPoints1 static const IntegrationPointsArrayType& IntegrationPoints() { static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( 0.00 , 0.00, 0.00 , 8.00 ) + IntegrationPointType( 0.0 , 0.0, 0.0 , 8.0 ) }}; return s_integration_points; } @@ -84,19 +83,27 @@ class HexahedronGaussLegendreIntegrationPoints2 static const IntegrationPointsArrayType& IntegrationPoints() { + static const double inv_sqrt_3 = 1.0 / std::sqrt(3.0); + static const double weight = 1.0; + static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( -1.00/std::sqrt(3.0) , -1.00/std::sqrt(3.0), -1.00/std::sqrt(3.0), 1.00 ), - IntegrationPointType( 1.00/std::sqrt(3.0) , -1.00/std::sqrt(3.0), -1.00/std::sqrt(3.0), 1.00 ), - IntegrationPointType( 1.00/std::sqrt(3.0) , 1.00/std::sqrt(3.0), -1.00/std::sqrt(3.0), 1.00 ), - IntegrationPointType( -1.00/std::sqrt(3.0) , 1.00/std::sqrt(3.0), -1.00/std::sqrt(3.0), 1.00 ), - IntegrationPointType( -1.00/std::sqrt(3.0) , -1.00/std::sqrt(3.0), 1.00/std::sqrt(3.0), 1.00 ), - IntegrationPointType( 1.00/std::sqrt(3.0) , -1.00/std::sqrt(3.0), 1.00/std::sqrt(3.0), 1.00 ), - IntegrationPointType( 1.00/std::sqrt(3.0) , 1.00/std::sqrt(3.0), 1.00/std::sqrt(3.0), 1.00 ), - IntegrationPointType( -1.00/std::sqrt(3.0) , 1.00/std::sqrt(3.0), 1.00/std::sqrt(3.0), 1.00 ) + // z = -inv_sqrt_3 + IntegrationPointType(-inv_sqrt_3, -inv_sqrt_3, -inv_sqrt_3, weight), + IntegrationPointType( inv_sqrt_3, -inv_sqrt_3, -inv_sqrt_3, weight), + IntegrationPointType( inv_sqrt_3, inv_sqrt_3, -inv_sqrt_3, weight), + IntegrationPointType(-inv_sqrt_3, inv_sqrt_3, -inv_sqrt_3, weight), + + // z = inv_sqrt_3 + IntegrationPointType(-inv_sqrt_3, -inv_sqrt_3, inv_sqrt_3, weight), + IntegrationPointType( inv_sqrt_3, -inv_sqrt_3, inv_sqrt_3, weight), + IntegrationPointType( inv_sqrt_3, inv_sqrt_3, inv_sqrt_3, weight), + IntegrationPointType(-inv_sqrt_3, inv_sqrt_3, inv_sqrt_3, weight) }}; + return s_integration_points; } + std::string Info() const { std::stringstream buffer; @@ -128,46 +135,51 @@ class HexahedronGaussLegendreIntegrationPoints3 static const IntegrationPointsArrayType& IntegrationPoints() { - static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( -std::sqrt(3.00/5.00) , -std::sqrt(3.00/5.00), -std::sqrt(3.00/5.00), 125.00/729.00 ), - IntegrationPointType( 0.0 , -std::sqrt(3.00/5.00), -std::sqrt(3.00/5.00), 200.00/729.00 ), - IntegrationPointType( std::sqrt(3.00/5.00) , -std::sqrt(3.00/5.00), -std::sqrt(3.00/5.00), 125.00/729.00 ), - - IntegrationPointType( -std::sqrt(3.00/5.00) , 0.0, -std::sqrt(3.00/5.00), 200.00/729.00 ), - IntegrationPointType( 0.0 , 0.0, -std::sqrt(3.00/5.00), 320.00/729.00 ), - IntegrationPointType( std::sqrt(3.00/5.00) , 0.0, -std::sqrt(3.00/5.00), 200.00/729.00 ), - - IntegrationPointType( -std::sqrt(3.00/5.00) , std::sqrt(3.00/5.00), -std::sqrt(3.00/5.00), 125.00/729.00 ), - IntegrationPointType( 0.0 , std::sqrt(3.00/5.00), -std::sqrt(3.00/5.00), 200.00/729.00 ), - IntegrationPointType( std::sqrt(3.00/5.00) , std::sqrt(3.00/5.00), -std::sqrt(3.00/5.00), 125.00/729.00 ), - - IntegrationPointType( -std::sqrt(3.00/5.00) , -std::sqrt(3.00/5.00), 0.0, 200.00/729.00 ), - IntegrationPointType( 0.0 , -std::sqrt(3.00/5.00), 0.0, 320.00/729.00 ), - IntegrationPointType( std::sqrt(3.00/5.00) , -std::sqrt(3.00/5.00), 0.0, 200.00/729.00 ), - - IntegrationPointType( -std::sqrt(3.00/5.00) , 0.0, 0.0, 320.00/729.00 ), - IntegrationPointType( 0.0 , 0.0, 0.0, 512.00/729.00 ), - IntegrationPointType( std::sqrt(3.00/5.00) , 0.0, 0.0, 320.00/729.00 ), + static const double sqrt_3_5 = std::sqrt(3.00 / 5.00); + static const double weight1 = 125.00 / 729.00; + static const double weight2 = 200.00 / 729.00; + static const double weight3 = 320.00 / 729.00; + static const double weight4 = 512.00 / 729.00; - IntegrationPointType( -std::sqrt(3.00/5.00) , std::sqrt(3.00/5.00), 0.0, 200.00/729.00 ), - IntegrationPointType( 0.0 , std::sqrt(3.00/5.00), 0.0, 320.00/729.00 ), - IntegrationPointType( std::sqrt(3.00/5.00) , std::sqrt(3.00/5.00), 0.0, 200.00/729.00 ), - - IntegrationPointType( -std::sqrt(3.00/5.00) , -std::sqrt(3.00/5.00), std::sqrt(3.00/5.00), 125.00/729.00 ), - IntegrationPointType( 0.0 , -std::sqrt(3.00/5.00), std::sqrt(3.00/5.00), 200.00/729.00 ), - IntegrationPointType( std::sqrt(3.00/5.00) , -std::sqrt(3.00/5.00), std::sqrt(3.00/5.00), 125.00/729.00 ), - - IntegrationPointType( -std::sqrt(3.00/5.00) , 0.0, std::sqrt(3.00/5.00), 200.00/729.00 ), - IntegrationPointType( 0.0 , 0.0, std::sqrt(3.00/5.00), 320.00/729.00 ), - IntegrationPointType( std::sqrt(3.00/5.00) , 0.0, std::sqrt(3.00/5.00), 200.00/729.00 ), - - IntegrationPointType( -std::sqrt(3.00/5.00) , std::sqrt(3.00/5.00), std::sqrt(3.00/5.00), 125.00/729.00 ), - IntegrationPointType( 0.0 , std::sqrt(3.00/5.00), std::sqrt(3.00/5.00), 200.00/729.00 ), - IntegrationPointType( std::sqrt(3.00/5.00) , std::sqrt(3.00/5.00), std::sqrt(3.00/5.00), 125.00/729.00 ) + static const IntegrationPointsArrayType s_integration_points{{ + // z = -sqrt(3/5) + IntegrationPointType(-sqrt_3_5, -sqrt_3_5, -sqrt_3_5, weight1), + IntegrationPointType(0.0, -sqrt_3_5, -sqrt_3_5, weight2), + IntegrationPointType(sqrt_3_5, -sqrt_3_5, -sqrt_3_5, weight1), + IntegrationPointType(-sqrt_3_5, 0.0, -sqrt_3_5, weight2), + IntegrationPointType(0.0, 0.0, -sqrt_3_5, weight3), + IntegrationPointType(sqrt_3_5, 0.0, -sqrt_3_5, weight2), + IntegrationPointType(-sqrt_3_5, sqrt_3_5, -sqrt_3_5, weight1), + IntegrationPointType(0.0, sqrt_3_5, -sqrt_3_5, weight2), + IntegrationPointType(sqrt_3_5, sqrt_3_5, -sqrt_3_5, weight1), + + // z = 0.0 + IntegrationPointType(-sqrt_3_5, -sqrt_3_5, 0.0, weight2), + IntegrationPointType(0.0, -sqrt_3_5, 0.0, weight3), + IntegrationPointType(sqrt_3_5, -sqrt_3_5, 0.0, weight2), + IntegrationPointType(-sqrt_3_5, 0.0, 0.0, weight3), + IntegrationPointType(0.0, 0.0, 0.0, weight4), + IntegrationPointType(sqrt_3_5, 0.0, 0.0, weight3), + IntegrationPointType(-sqrt_3_5, sqrt_3_5, 0.0, weight2), + IntegrationPointType(0.0, sqrt_3_5, 0.0, weight3), + IntegrationPointType(sqrt_3_5, sqrt_3_5, 0.0, weight2), + + // z = sqrt(3/5) + IntegrationPointType(-sqrt_3_5, -sqrt_3_5, sqrt_3_5, weight1), + IntegrationPointType(0.0, -sqrt_3_5, sqrt_3_5, weight2), + IntegrationPointType(sqrt_3_5, -sqrt_3_5, sqrt_3_5, weight1), + IntegrationPointType(-sqrt_3_5, 0.0, sqrt_3_5, weight2), + IntegrationPointType(0.0, 0.0, sqrt_3_5, weight3), + IntegrationPointType(sqrt_3_5, 0.0, sqrt_3_5, weight2), + IntegrationPointType(-sqrt_3_5, sqrt_3_5, sqrt_3_5, weight1), + IntegrationPointType(0.0, sqrt_3_5, sqrt_3_5, weight2), + IntegrationPointType(sqrt_3_5, sqrt_3_5, sqrt_3_5, weight1) }}; + return s_integration_points; } + std::string Info() const { std::stringstream buffer; @@ -453,6 +465,4 @@ class HexahedronGaussLegendreIntegrationPoints5 } // namespace Kratos. -#endif // KRATOS_HEXAHEDRON_GAUSS_LEGENDRE_INTEGRATION_POINTS_H_INCLUDED defined - diff --git a/kratos/integration/tetrahedron_gauss_legendre_integration_points.h b/kratos/integration/tetrahedron_gauss_legendre_integration_points.h index 984be5d848a5..72a408a85509 100644 --- a/kratos/integration/tetrahedron_gauss_legendre_integration_points.h +++ b/kratos/integration/tetrahedron_gauss_legendre_integration_points.h @@ -12,8 +12,7 @@ // -#if !defined(KRATOS_TETRAHEDRON_GAUSS_LEGENDRE_INTEGRATION_POINTS_H_INCLUDED ) -#define KRATOS_TETRAHEDRON_GAUSS_LEGENDRE_INTEGRATION_POINTS_H_INCLUDED +#pragma once // System includes @@ -85,11 +84,12 @@ class TetrahedronGaussLegendreIntegrationPoints2 static const IntegrationPointsArrayType& IntegrationPoints() { + const double one_over_twenty_four = 1.0 / 24.0; static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( 0.58541020,0.13819660,0.13819660 , 1.00 / 24.00 ), - IntegrationPointType( 0.13819660,0.58541020,0.13819660 , 1.00 / 24.00 ), - IntegrationPointType( 0.13819660,0.13819660,0.58541020 , 1.00 / 24.00 ), - IntegrationPointType( 0.13819660,0.13819660,0.13819660 , 1.00 / 24.00 ) + IntegrationPointType( 0.58541020,0.13819660,0.13819660 , one_over_twenty_four ), + IntegrationPointType( 0.13819660,0.58541020,0.13819660 , one_over_twenty_four ), + IntegrationPointType( 0.13819660,0.13819660,0.58541020 , one_over_twenty_four ), + IntegrationPointType( 0.13819660,0.13819660,0.13819660 , one_over_twenty_four ) }}; return s_integration_points; } @@ -275,6 +275,4 @@ class TetrahedronGaussLegendreIntegrationPoints5 } // namespace Kratos. -#endif // KRATOS_TETRAHEDRON_GAUSS_LEGENDRE_INTEGRATION_POINTS_H_INCLUDED defined - diff --git a/kratos/integration/triangle_gauss_legendre_integration_points.h b/kratos/integration/triangle_gauss_legendre_integration_points.h index 76414b5e4c81..014d5781699b 100644 --- a/kratos/integration/triangle_gauss_legendre_integration_points.h +++ b/kratos/integration/triangle_gauss_legendre_integration_points.h @@ -45,8 +45,9 @@ class TriangleGaussLegendreIntegrationPoints1 static const IntegrationPointsArrayType& IntegrationPoints() { + const double one_third = 1.0 / 3.0; static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( 1.00 / 3.00 , 1.00 / 3.00 , 1.00 / 2.00 ) + IntegrationPointType( one_third , one_third , 0.5 ) }}; return s_integration_points; } @@ -83,14 +84,21 @@ class TriangleGaussLegendreIntegrationPoints2 static const IntegrationPointsArrayType& IntegrationPoints() { + // Define auxiliary constants + const double one_sixth = 1.0 / 6.0; + const double two_thirds = 2.0 / 3.0; + const double weight = 1.0 / 6.0; + + // Integration points using the auxiliary constants static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( 1.00 / 6.00 , 1.00 / 6.00 , 1.00 / 6.00 ), - IntegrationPointType( 2.00 / 3.00 , 1.00 / 6.00 , 1.00 / 6.00 ), - IntegrationPointType( 1.00 / 6.00 , 2.00 / 3.00 , 1.00 / 6.00 ) + IntegrationPointType(one_sixth, one_sixth, weight), + IntegrationPointType(two_thirds, one_sixth, weight), + IntegrationPointType(one_sixth, two_thirds, weight) }}; return s_integration_points; } + std::string Info() const { std::stringstream buffer; @@ -123,15 +131,25 @@ class TriangleGaussLegendreIntegrationPoints3 static const IntegrationPointsArrayType& IntegrationPoints() { + // Define auxiliary constants + const double one_fifth = 1.00 / 5.00; + const double three_fifths = 3.00 * one_fifth; + const double one_third = 1.00 / 3.00; + + const double weight_positive = 25.00 / 96.00; + const double weight_negative = -27.00 / 96.00; + + // Integration points using the auxiliary constants static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( 1.00 / 5.00 , 1.00 / 5.00 , 25.00 / 96.00 ), - IntegrationPointType( 3.00 / 5.00 , 1.00 / 5.00 , 25.00 / 96.00 ), - IntegrationPointType( 1.00 / 5.00 , 3.00 / 5.00 , 25.00 / 96.00 ), - IntegrationPointType( 1.00 / 3.00 , 1.00 / 3.00 , -27.00 / 96.00 ) + IntegrationPointType(one_fifth, one_fifth, weight_positive), + IntegrationPointType(three_fifths, one_fifth, weight_positive), + IntegrationPointType(one_fifth, three_fifths, weight_positive), + IntegrationPointType(one_third, one_third, weight_negative) }}; return s_integration_points; } + std::string Info() const { std::stringstream buffer; From e75f5c6c44c35331c8e548694fcec59b51391e57 Mon Sep 17 00:00:00 2001 From: Anne van de Graaf Date: Fri, 6 Dec 2024 11:39:23 +0100 Subject: [PATCH 093/142] [StructuralMechanicsApplication] The Timoshenko beam constitutive law takes into account initial state (#12902) The Timoshenko beam constitutive law now takes into account any initial state when calculating the Cauchy material response. The changes are in line with previous changes for the truss element (see https://github.com/KratosMultiphysics/Kratos/pull/12525). Two new C++ unit tests cover the changed behavior. --- ...moshenko_beam_elastic_constitutive_law.cpp | 3 + ...moshenko_beam_elastic_constitutive_law.cpp | 114 ++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 applications/StructuralMechanicsApplication/tests/cpp_tests/test_timoshenko_beam_elastic_constitutive_law.cpp diff --git a/applications/StructuralMechanicsApplication/custom_constitutive/timoshenko_beam_elastic_constitutive_law.cpp b/applications/StructuralMechanicsApplication/custom_constitutive/timoshenko_beam_elastic_constitutive_law.cpp index f5e4ff25477f..d4e87c6a3057 100644 --- a/applications/StructuralMechanicsApplication/custom_constitutive/timoshenko_beam_elastic_constitutive_law.cpp +++ b/applications/StructuralMechanicsApplication/custom_constitutive/timoshenko_beam_elastic_constitutive_law.cpp @@ -103,6 +103,7 @@ void TimoshenkoBeamElasticConstitutiveLaw::CalculateMaterialResponseCauchy(Const const auto& r_cl_law_options = rValues.GetOptions(); auto &r_material_properties = rValues.GetMaterialProperties(); auto &r_strain_vector = rValues.GetStrainVector(); + AddInitialStrainVectorContribution(r_strain_vector); const auto strain_size = GetStrainSize(); const double axial_strain = r_strain_vector[0]; // E_l @@ -129,6 +130,8 @@ void TimoshenkoBeamElasticConstitutiveLaw::CalculateMaterialResponseCauchy(Const r_generalized_stress_vector[1] = EI * curvature; // M r_generalized_stress_vector[2] = GAs * shear_strain; // V + AddInitialStressVectorContribution(r_generalized_stress_vector); + if (r_cl_law_options.Is(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR)) { auto &r_stress_derivatives = rValues.GetConstitutiveMatrix(); // dN_dEl, dM_dkappa, dV_dGamma_xy if (r_stress_derivatives.size1() != strain_size || r_stress_derivatives.size2() != strain_size) diff --git a/applications/StructuralMechanicsApplication/tests/cpp_tests/test_timoshenko_beam_elastic_constitutive_law.cpp b/applications/StructuralMechanicsApplication/tests/cpp_tests/test_timoshenko_beam_elastic_constitutive_law.cpp new file mode 100644 index 000000000000..c29e388f7471 --- /dev/null +++ b/applications/StructuralMechanicsApplication/tests/cpp_tests/test_timoshenko_beam_elastic_constitutive_law.cpp @@ -0,0 +1,114 @@ +// KRATOS ___| | | | +// \___ \ __| __| | | __| __| | | __| _` | | +// | | | | | ( | | | | ( | | +// _____/ \__|_| \__,_|\___|\__|\__,_|_| \__,_|_| MECHANICS +// +// License: BSD License +// license: StructuralMechanicsApplication/license.txt +// +// Main authors: Anne van de Graaf +// + +#include "structural_mechanics_fast_suite.h" +#include "custom_constitutive/timoshenko_beam_elastic_constitutive_law.h" + +namespace +{ +using namespace Kratos; + +constexpr auto number_of_strain_components = 3; + +Vector MakeStrainVectorForTesting() { + auto result = Vector{number_of_strain_components}; + result[0] = 2.0e-3; // axial strain + result[1] = 3.0e-2; // curvature + result[2] = 4.0e-3; // shear strain + return result; +} + +Properties MakePropertiesForTesting() { + auto result = Properties{}; + result[YOUNG_MODULUS] = 1.0e6; + result[POISSON_RATIO] = 0.2; + result[CROSS_AREA] = 0.2; + result[I33] = 0.5; + result[AREA_EFFECTIVE_Y] = 0.3; + return result; +} + +Vector MakeInitialStrainVectorForTesting() { + auto result = Vector{number_of_strain_components}; + result[0] = 4.0e-3; // initial axial strain + result[1] = 5.0e-2; // initial curvature + result[2] = 2.0e-3; // initial shear strain + return result; +} + +Vector MakeInitialStressVectorForTesting() { + auto result = Vector{number_of_strain_components}; + result[0] = 5000.0; + result[1] = 3000.0; + result[2] = 2000.0; + return result; +} + +} + +namespace Kratos::Testing +{ + +KRATOS_TEST_CASE_IN_SUITE(TimoshenkoBeamElasticConstitutiveLaw_CalculatesCauchyStressVector, KratosStructuralMechanicsFastSuite) { + TimoshenkoBeamElasticConstitutiveLaw law; + ConstitutiveLaw::Parameters parameters; + auto strain_vector = MakeStrainVectorForTesting(); + parameters.SetStrainVector(strain_vector); + auto stress_vector = Vector{ZeroVector{number_of_strain_components}}; + parameters.SetStressVector(stress_vector); + + const auto properties = MakePropertiesForTesting(); + parameters.SetMaterialProperties(properties); + + parameters.GetOptions().Set(ConstitutiveLaw::COMPUTE_STRESS, true); + + law.CalculateMaterialResponseCauchy(parameters); + + auto expected_stress_vector = Vector{number_of_strain_components}; + expected_stress_vector[0] = 400.0; + expected_stress_vector[1] = 15000.0; + expected_stress_vector[2] = 500.0; + + constexpr auto relative_tolerance = 1.0e-6; + KRATOS_EXPECT_VECTOR_RELATIVE_NEAR(parameters.GetStressVector(), expected_stress_vector, relative_tolerance); +} + +KRATOS_TEST_CASE_IN_SUITE(TimoshenkoBeamElasticConstitutiveLaw_CalculatesCauchyStressVector_WithInitialState, KratosStructuralMechanicsFastSuite) { + TimoshenkoBeamElasticConstitutiveLaw law; + ConstitutiveLaw::Parameters parameters; + auto strain_vector = MakeStrainVectorForTesting(); + parameters.SetStrainVector(strain_vector); + auto stress_vector = Vector{ZeroVector{number_of_strain_components}}; + parameters.SetStressVector(stress_vector); + + const auto properties = MakePropertiesForTesting(); + parameters.SetMaterialProperties(properties); + + const auto initial_strain_vector = MakeInitialStrainVectorForTesting(); + const auto initial_stress_vector = MakeInitialStressVectorForTesting(); + const auto p_initial_state = make_intrusive( + initial_strain_vector, initial_stress_vector); + law.SetInitialState(p_initial_state); + + parameters.GetOptions().Set(ConstitutiveLaw::COMPUTE_STRESS, true); + + law.CalculateMaterialResponseCauchy(parameters); + + auto expected_stress_vector = Vector{number_of_strain_components}; + expected_stress_vector[0] = 4600.0; + expected_stress_vector[1] = -7000.0; + expected_stress_vector[2] = 2250.0; + + constexpr auto relative_tolerance = 1.0e-6; + KRATOS_EXPECT_VECTOR_RELATIVE_NEAR(parameters.GetStressVector(), expected_stress_vector, relative_tolerance); +} + +} \ No newline at end of file From f9e95b6b98f938325693cac9ee38dac60f660f31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Fri, 6 Dec 2024 12:10:28 +0100 Subject: [PATCH 094/142] [Doc] Remove legacy documentation files --- docs/pages/Kratos/README.md.old | 45 --------- docs/pages/Kratos/_Sidebar.md.old | 153 ------------------------------ 2 files changed, 198 deletions(-) delete mode 100644 docs/pages/Kratos/README.md.old delete mode 100644 docs/pages/Kratos/_Sidebar.md.old diff --git a/docs/pages/Kratos/README.md.old b/docs/pages/Kratos/README.md.old deleted file mode 100644 index c607e15c41ad..000000000000 --- a/docs/pages/Kratos/README.md.old +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: README -keywords: -tags: [README.md] -sidebar: kratos_sidebar -summary: ---- - -## Welcome to GitHub Pages FROM README - -You can use the [editor on GitHub](https://github.com/roigcarlo/KratosWikiAsDocTest.github.io/edit/gh-pages/index.md) to maintain and preview the content for your website in Markdown files. - -Whenever you commit to this repository, GitHub Pages will run [Jekyll](https://jekyllrb.com/) to rebuild the pages in your site, from the content in your Markdown files. - -### Markdown - -Markdown is a lightweight and easy-to-use syntax for styling your writing. It includes conventions for - -```markdown -Syntax highlighted code block - -# Header 1 -## Header 2 -### Header 3 - -- Bulleted -- List - -1. Numbered -2. List - -**Bold** and _Italic_ and `Code` text - -[Link](url) and ![Image](src) -``` - -For more details see [GitHub Flavored Markdown](https://guides.github.com/features/mastering-markdown/). - -### Jekyll Themes - -Your Pages site will use the layout and styles from the Jekyll theme you have selected in your [repository settings](https://github.com/roigcarlo/KratosWikiAsDocTest.github.io/settings). The name of this theme is saved in the Jekyll `_config.yml` configuration file. - -### Support or Contact - -Having trouble with Pages? Check out our [documentation](https://docs.github.com/categories/github-pages-basics/) or [contact support](https://support.github.com/contact) and we’ll help you sort it out. diff --git a/docs/pages/Kratos/_Sidebar.md.old b/docs/pages/Kratos/_Sidebar.md.old deleted file mode 100644 index b2d39a0761db..000000000000 --- a/docs/pages/Kratos/_Sidebar.md.old +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: _Sidebar -keywords: -tags: [_Sidebar.md] -sidebar: kratos_sidebar -summary: ---- - -## Project information -* [Home][wiki] -* [Overview](https://github.com/KratosMultiphysics/Kratos/wiki/Overview) -* [Copyright and license][licence] -* [Application Cases](https://github.com/KratosMultiphysics/Kratos/wiki/Application-Cases) -* [Management Structure](https://github.com/KratosMultiphysics/Kratos/wiki/Management-Structure) - -## Getting Started -* Getting Kratos (Last compiled Release) - * [Kratos for Linux](https://github.com/KratosMultiphysics/Kratos/wiki/Getting-Kratos-Binaries-for-Linux) - * [Kratos for Windows](https://github.com/KratosMultiphysics/Kratos/wiki/Getting-Kratos-Binaries-for-Windows) - - * [Kratos for GiD](https://github.com/KratosMultiphysics/Kratos/wiki/Getting-Kratos-binaries-(via-GiD)) -* Compiling Kratos - * [See INSTALL.md](https://github.com/KratosMultiphysics/Kratos/blob/master/INSTALL.md) - - - -## Workshop 2019 tutorials -* [Running an example from GiD](https://github.com/KratosMultiphysics/Kratos/wiki/Running-an-example-from-GiD) -* [Kratos input files and I/O](https://github.com/KratosMultiphysics/Kratos/wiki/Kratos-input-files-and-IO) -* [Data management](https://github.com/KratosMultiphysics/Kratos/wiki/Data-management) -* [Solving strategies](https://github.com/KratosMultiphysics/Kratos/wiki/Solving-strategies) -* [Manipulating solution values](https://github.com/KratosMultiphysics/Kratos/wiki/Manipulating-solution-values) -* [Multiphysics](https://github.com/KratosMultiphysics/Kratos/wiki/Multiphysics-example) - -## Developers -* [Style Guide](Style-Guide) -* [Authorship of Kratos files][authorship] -* [Configure .gitignore][gitignore] -* [How to configure clang-format][clangformat] -* [How to use smart pointer in Kratos][smart_ptr] -* [How to define adjoint elements and response functions][adjoint_api] -* [KRATOS_API for Windows Compilation](https://github.com/KratosMultiphysics/Kratos/wiki/KRATOS_API-for-Windows-Compilation) - -**Kratos structure** -* [General Structure][generalstructure] -* [Kratos kernel and application approach][kernelappapr] -* [Input data][inputdata] -* [Mesh node ordering](https://github.com/KratosMultiphysics/Kratos/wiki/Mesh-node-ordering) - -**Conventions** -* [Local Axes Orientation](Local-axes-orientation) - -**Solvers** -* [FEAST Solver][feast] -* [PaStiX Solver][pastix] - -**Debugging, profiling and testing** -* [Compiling Kratos in debug mode][debug] -* [Debugging Kratos using GDB][debuggdb] -* [Cross-debugging Kratos under Windows][crossdebug] -* [Debugging Kratos C++ under Windows][Debugging-c++] -* [Checking memory usage with Valgind][valgrind] -* [Profiling Kratos with MAQAO][maqao] -* [Creating unitary tests][unittest] -* [Using ThreadSanitizer to detect OMP data race bugs][data_race] -* [Debugging Memory with ASAN][asan] - -**HOW TOs** -* [How to create applications](https://github.com/KratosMultiphysics/Kratos/wiki/Creating-a-base-application) -* [Python Tutorials](https://github.com/KratosMultiphysics/Kratos/wiki/Python-Tutorials) -* [Kratos For Dummies (I)][kratosdummies] -* [List of classes and variables accessible via python](https://github.com/KratosMultiphysics/Kratos/wiki/Kratos-classes-accesible-via-python) -* [How to use Logger][logger] -* [How to Create a New Application using cmake][newapp] -* [How to write a JSON configuration file][json] -* [How to Access DataBase][database] -* [How to use quaternions in Kratos][quaternion] -* [How to do Mapping between nonmatching meshes][mapping] -* [How to use Clang-Tidy to automatically correct code][tidyclang] -* [How to use the Constitutive Law class][constitutive_law] -* [How to use Serialization][serialization] -* [How to use GlobalPointerCommunicator][global_pointer_comm] -* [How to use PointerMapCommunicator][pointer_map_comm] -* [How to use the Geometry](https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-the-Geometry) -* [How to use processes for BCs](How-to-use-Processes-In-the-application-of-BCs) -* [How to use Parallel Utilities in futureproofing the code](Parallel-Utilities) -* [Porting to Pybind11 (LEGACY CODE)][pybind11porting] -* [Porting to AMatrix][amatrixporting] -* [How to use Cotire][cotire] -* [Applications: Python-modules][python-modules] -* [How to run multiple cases using PyCOMPSs][multiple-cases-pycompss] -* [How to apply a function to a list of variables](https://github.com/KratosMultiphysics/Kratos/wiki/How-to-apply-a-function-to-a-list-of-variables) -* [How to use Kratos Native sparse linear algebra](https://github.com/KratosMultiphysics/Kratos/wiki/Sparse-Linear-Algebra-(native-Kratos-implementation)) - -**Utilities** -* [MMG remeshing process][mmgprocess] -* [ParMMG remeshing process][parmmgprocess] -* [Model part colors utility][colorsutility] - -**Kratos API** -* [MultiPoint Constraint (MPC) interface][mpc] - -**Kratos Structural Mechanics API** -* [Documentation about the Constitutive Laws][StructuralCL] - -[wiki]: https://github.com/KratosMultiphysics/Kratos/wiki -[cotire]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-Cotire -[Parallel-Utilities]: https://github.com/KratosMultiphysics/Kratos/wiki/Parallel-Utilities -[valgrind]: https://github.com/KratosMultiphysics/Kratos/wiki/Checking-memory-usage-with-Valgrind -[asan]: https://github.com/KratosMultiphysics/Kratos/wiki/Debug-Memory-Using-ASAN -[userinstall]: https://github.com/KratosMultiphysics/Kratos/wiki/Download-Kratos-for-user-purpose -[linuxinstall]: https://github.com/KratosMultiphysics/Kratos/wiki/Linux-Install -[windowsinstall]: https://github.com/KratosMultiphysics/Kratos/wiki/Windows-Install -[macosinstall]: https://github.com/KratosMultiphysics/Kratos/wiki/MacOS-Install -[kernelappapr]: https://github.com/KratosMultiphysics/Kratos/wiki/Editing-Kratos-kernel-and-application-approach -[licence]: https://github.com/KratosMultiphysics/Kratos/wiki/Licence -[generalstructure]: https://github.com/KratosMultiphysics/Kratos/wiki/General-structure -[mmgprocess]: https://github.com/KratosMultiphysics/Kratos/wiki/[Utilities]-MMG-Process -[parmmgprocess]: https://github.com/KratosMultiphysics/Kratos/wiki/%5BUtilities%5D-ParMmg-Process -[authorship]: https://github.com/KratosMultiphysics/Kratos/wiki/Authorship-of-Kratos-files -[kratosdummies]: https://github.com/KratosMultiphysics/Kratos/wiki/Kratos-For-Dummies:-Stationary-heat-transfer -[logger]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-Logger -[newapp]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-Create-a-New-Application-using-cmake -[gitignore]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-make-Git-ignore-the-files-resulting-from-a-compilation-without-conflicts-in-.gitignore -[unittest]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-create-unitary-tests -[json]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-write-a-JSON-configuration-file -[debug]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-Compile-Kratos-in-Debug-mode -[crossdebug]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-cross-debug-Kratos-under-Windows -[Debugging-c++]: https://github.com/KratosMultiphysics/Kratos/wiki/Debugging-Kratos-using-Visual-Studio -[smart_ptr]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-%22Smart-Pointers%22-within-Kratos -[database]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-Access-DataBase -[clangformat]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-configure-clang%E2%80%90format -[maqao]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-profile-Kratos-using-MAQAO -[feast]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-the-FEAST-Solver-in-Kratos%3F -[quaternion]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-quaternions-in-Kratos -[data_race]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-ThreadSanitizer-to-detect-OMP-data-race-bugs -[pastix]:https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-the-PaStiX-solver-in-Kratos -[mapping]:https://github.com/KratosMultiphysics/Kratos/wiki/How-to-do-Mapping-between-nonmatching-meshes -[tidyclang]:https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-Clang-Tidy-to-automatically-correct-code -[constitutive_law]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-the-Constitutive-Law-class -[adjoint_api]: https://github.com/KratosMultiphysics/Kratos/wiki/Adjoint-API -[serialization]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-Serialization -[pybind11porting]: https://github.com/KratosMultiphysics/Kratos/wiki/Porting-to-PyBind11---common-steps -[amatrixporting]: https://github.com/KratosMultiphysics/Kratos/wiki/Porting-to-AMatrix -[python-modules]: https://github.com/KratosMultiphysics/Kratos/wiki/Applications-as-python-modules -[colorsutility]: https://github.com/KratosMultiphysics/Kratos/wiki/%5BUtilities%5D-Colors-utility -[inputdata]: https://github.com/KratosMultiphysics/Kratos/wiki/Input-data -[StructuralCL]: https://github.com/KratosMultiphysics/Kratos/wiki/%5BKratosStructuralMechanicsAPI%5D-Constitutive-laws-in-Structural-Mechanics-Application -[mpc]: https://github.com/KratosMultiphysics/Kratos/wiki/[KratosAPI]-MultiPoint-Constraint-(MPC)-interface -[multiple-cases-pycompss]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-run-multiple-cases-using-PyCOMPSs -[global_pointer_comm]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-PointerCommunicator -[pointer_map_comm]: https://github.com/KratosMultiphysics/Kratos/wiki/How-to-use-PointerMapCommunicator -[debuggdb]: https://github.com/KratosMultiphysics/Kratos/wiki/Debugging-Kratos-Using-GDB \ No newline at end of file From 6974c9b76bafa2f4ff53b66841d635938a038be5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Fri, 6 Dec 2024 12:47:12 +0100 Subject: [PATCH 095/142] [Doc] Adding benchmark documentation --- .../For_Developers/General/Benchmarking.md | 187 ++++++++++++++++++ .../General/images/benchmark.png | Bin 0 -> 16 bytes 2 files changed, 187 insertions(+) create mode 100644 docs/pages/Kratos/For_Developers/General/Benchmarking.md create mode 100644 docs/pages/Kratos/For_Developers/General/images/benchmark.png diff --git a/docs/pages/Kratos/For_Developers/General/Benchmarking.md b/docs/pages/Kratos/For_Developers/General/Benchmarking.md new file mode 100644 index 000000000000..4f8d09b9c9e7 --- /dev/null +++ b/docs/pages/Kratos/For_Developers/General/Benchmarking.md @@ -0,0 +1,187 @@ +--- +title: Benchmarking in Kratos Multiphysics +keywords: Benchmarking, Google Benchmark, Performance Measurement +tags: [Benchmarking] +sidebar: kratos_for_developers +summary: Step-by-step guide on adding and executing benchmarks in Kratos Multiphysics using Google Benchmark. +--- + +## Introduction + +Benchmarking is now supported in **Kratos Multiphysics**, enabling developers to measure and analyze the performance of their code effectively. The system integrates seamlessly with [Google Benchmark](https://github.com/google/benchmark), which is included as an external dependency, similar to the **GTest** suite. + +### Key Features: +- Automatic generation of a binary per benchmark source file located in the `benchmark` directory. +- Benchmark executables are compiled to the binary `benchmark` directory. +- Activated using the `KRATOS_BUILD_BENCHMARK` CMake option (disabled by default). + +### What is Google Benchmark? + +[Google Benchmark](https://github.com/google/benchmark) is a library developed by *Google* for microbenchmarking C++ code. It provides: + +- Precision and reproducibility in measurements. +- Built-in support for statistical analysis of timing data. +- Customizable inputs to benchmarks for more flexible scenarios. +- Support for benchmarking in multi-threaded and single-threaded environments. + +## Writing Benchmarks +​ +### Overview of Google Benchmark API +​ +A *Google Benchmark* consists of a **function** that performs repeated measurements of a specific code snippet. The framework automatically manages: +​ +- Warm-up runs to stabilize performance. +- Statistical aggregation of results (mean, median, standard deviation, etc.). +- Handling of scaling issues with large inputs. +​ +#### Essential Functions: +​ +- `benchmark::State`: Represents the state of the benchmark, used to control iterations. +- `BENCHMARK(...)`: Registers a function as a benchmark. +- `BENCHMARK_MAIN()`: Main entry point for running benchmarks. +​ +#### Benchmark Configuration Options: +​ +1. **Repeats**: Specify the number of iterations with `--benchmark_repetitions=N`. +2. **Time Limit**: Set the time for each benchmark with `--benchmark_min_time=N`. +3. **Custom Arguments**: Pass custom inputs to benchmarks for parameterized testing. + +### Example Benchmark (C++ Code) + +Below is an example showcasing how to benchmark the nearest point calculation on a triangle in *Kratos*: + +~~~cpp +// System includes + +// External includes +#include + +// Project includes +#include "geometries/point.h" +#include "geometries/triangle_3d_3.h" +#include "utilities/geometry_utilities/nearest_point_utilities.h" + +namespace Kratos +{ + +// Sample data for benchmarking +Point::Pointer p_point_1(make_shared( 0.0, 0.0, 0.0)); +Point::Pointer p_point_2(make_shared( 1.0, 0.0, 0.0)); +Point::Pointer p_point_3(make_shared( 0.0, 1.0, 0.0)); + +Triangle3D3 triangle(p_point_1, p_point_3, p_point_2); +Point nearest_point(0.0, 0.0, 0.0); +Point inside_point(0.2, 0.1, 0.00); + +static void BM_TriangleNearestPoint(benchmark::State& state) { + for (auto _ : state) { + NearestPointUtilities::TriangleNearestPoint(inside_point, triangle, nearest_point); + } +} + +// Register the function as a benchmark +BENCHMARK(BM_TriangleNearestPoint); + +} // namespace Kratos + +BENCHMARK_MAIN(); +~~~ + +### Advanced Features of Google Benchmark + +#### Custom Arguments + +Benchmarks can take custom arguments to test specific cases. Example: + +~~~cpp +static void BM_CustomArguments(benchmark::State& state) { + for (auto _ : state) { + int input_size = state.range(0); + // Your code here, e.g., filling arrays of size input_size + } +} + +BENCHMARK(BM_CustomArguments)->Arg(100)->Arg(1000)->Arg(10000); +~~~ + +#### Multithreading Support + +Google Benchmark can run benchmarks in multi-threaded mode: + +~~~cpp +static void BM_MultiThreaded(benchmark::State& state) { + for (auto _ : state) { + // Thread-safe code + } +} + +BENCHMARK(BM_MultiThreaded)->Threads(1)->Threads(2)->Threads(4); +~~~ + +## Running Benchmarks + +### Execution + +Once benchmarks are compiled, executables are created in the `benchmark` directory. Run them directly via the command line: + +``` +./benchmark_name +``` + +### Configuration Options + +- **JSON Output**: Export results in JSON format: + +``` +./benchmark_name --benchmark_format=json --benchmark_out=output.json +``` + +- **Statistical Runs**: Run benchmarks multiple times for statistical accuracy: + +``` +./benchmark_name --benchmark_repetitions=10 +``` + +- **Custom Time Limits**: Specify time per benchmark: + +``` +./benchmark_name --benchmark_min_time=2.0 +``` + +## Comparing Benchmark Results + +The benchmark framework includes a Python utility script to compare results between multiple JSON outputs. This script, located in `kratos/python_scripts/benchmark/generate_plot_google_benchmark.py`, generates visualizations for easier comparison. + +### Example Usage: +To compare two JSON results: +``` +python generate_plot_google_benchmark.py --filenames result1.json result2.json +``` + +### Example Output: +A plot similar to the one below will be generated, showing the performance (in terms of CPU time and real time) of different benchmarks across the compared files. + +![Benchmark Performance Graph](images/benchmark.png) + +## Python Script Explanation + +### Purpose: +The provided Python script consolidates and visualizes benchmarking data from multiple JSON files generated by Google Benchmark. + +#### Script Functionality: +1. **Load JSON Outputs:** Extract benchmark results from each JSON file. +2. **Merge Data:** Combine results into a single pandas DataFrame for analysis. +3. **Generate Plot:** Create a grouped bar chart showing `cpu_time` and `real_time` for each benchmark. + +## About the Google Benchmark Library + +### Benefits + +- Accurate Timing: Adjusts for background noise and other factors. +- Reproducibility: Consistent and repeatable measurements. +- Customizability: Configure inputs, threads, and scaling scenarios. + +### Useful Links + +- [Google Benchmark Documentation](https://github.com/google/benchmark) +- [Google Benchmark Usage Guide](https://github.com/google/benchmark/blob/main/docs/user_guide.md) \ No newline at end of file diff --git a/docs/pages/Kratos/For_Developers/General/images/benchmark.png b/docs/pages/Kratos/For_Developers/General/images/benchmark.png new file mode 100644 index 0000000000000000000000000000000000000000..43ee814751fffd51fe794dd53779ea60661f9454 GIT binary patch literal 16 XcmaFAe{X=FJ1>_MFBby?11}c Date: Fri, 6 Dec 2024 18:48:55 -0600 Subject: [PATCH 096/142] allow calling Info() of ConstitutiveLaw from Python --- kratos/python/add_constitutive_law_to_python.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/kratos/python/add_constitutive_law_to_python.cpp b/kratos/python/add_constitutive_law_to_python.cpp index b4d6ffe56bd3..6b2e94efef59 100644 --- a/kratos/python/add_constitutive_law_to_python.cpp +++ b/kratos/python/add_constitutive_law_to_python.cpp @@ -214,6 +214,7 @@ void AddConstitutiveLawToPython(pybind11::module& m) .def("PushForwardConstitutiveMatrix",&ConstitutiveLaw::PushForwardConstitutiveMatrix) .def("Check",&ConstitutiveLaw::Check) .def("GetLawFeatures",&ConstitutiveLaw::GetLawFeatures) + .def("Info", &ConstitutiveLaw::Info) .def_readonly_static("USE_ELEMENT_PROVIDED_STRAIN", &ConstitutiveLaw::USE_ELEMENT_PROVIDED_STRAIN) .def_readonly_static("COMPUTE_STRESS", &ConstitutiveLaw::COMPUTE_STRESS) .def_readonly_static("COMPUTE_CONSTITUTIVE_TENSOR", &ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR) From 8cb7b9c0c7a00b4455b8eb26244c0190ef93e6d7 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 9 Dec 2024 09:37:54 +0100 Subject: [PATCH 097/142] adding changes --- ...lateral_gauss_lobatto_integration_points.h | 170 +++++++++++------- 1 file changed, 106 insertions(+), 64 deletions(-) diff --git a/kratos/integration/quadrilateral_gauss_lobatto_integration_points.h b/kratos/integration/quadrilateral_gauss_lobatto_integration_points.h index 02f86afa3a9a..96e038d06816 100644 --- a/kratos/integration/quadrilateral_gauss_lobatto_integration_points.h +++ b/kratos/integration/quadrilateral_gauss_lobatto_integration_points.h @@ -8,12 +8,11 @@ // Kratos default license: kratos/license.txt // // Main authors: Josep Maria Carbonell +// Alejandro Cornejo // // -#if !defined(KRATOS_QUADRILATERAL_GAUSS_LOBATTO_INTEGRATION_POINTS_H_INCLUDED ) -#define KRATOS_QUADRILATERAL_GAUSS_LOBATTO_INTEGRATION_POINTS_H_INCLUDED - +#pragma once // System includes @@ -22,92 +21,135 @@ // Project includes #include "integration/quadrature.h" -//TO BE COMPLETED: Only the needed ones have been implemented +// TO BE COMPLETED: Only the needed ones have been implemented namespace Kratos { -class QuadrilateralGaussLobattoIntegrationPoints1 -{ -public: - KRATOS_CLASS_POINTER_DEFINITION(QuadrilateralGaussLobattoIntegrationPoints1); - typedef std::size_t SizeType; + class QuadrilateralGaussLobattoIntegrationPoints1 + { + public: + KRATOS_CLASS_POINTER_DEFINITION(QuadrilateralGaussLobattoIntegrationPoints1); + typedef std::size_t SizeType; - static const unsigned int Dimension = 2; + static const unsigned int Dimension = 2; - typedef IntegrationPoint<2> IntegrationPointType; + typedef IntegrationPoint<2> IntegrationPointType; - typedef std::array IntegrationPointsArrayType; + typedef std::array IntegrationPointsArrayType; - typedef IntegrationPointType::PointType PointType; + typedef IntegrationPointType::PointType PointType; - static SizeType IntegrationPointsNumber() - { - return 2; - } + static SizeType IntegrationPointsNumber() + { + return 2; + } - static const IntegrationPointsArrayType& IntegrationPoints() - { - static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( -1.00 , 0.00, 1.00 ), - IntegrationPointType( 1.00 , 0.00, 1.00 ) - }}; - return s_integration_points; - } - - std::string Info() const + static const IntegrationPointsArrayType &IntegrationPoints() + { + static const IntegrationPointsArrayType s_integration_points{{ + IntegrationPointType(-1.0, 0.0, 1.0), + IntegrationPointType(1.0, 0.0, 1.0)}}; + return s_integration_points; + } + + std::string Info() const + { + std::stringstream buffer; + buffer << "Quadrilateral Gauss-Lobatto integration 1 "; + return buffer.str(); + } + + }; // Class QuadrilateralGaussLobattoIntegrationPoints1 + + class QuadrilateralGaussLobattoIntegrationPoints2 { - std::stringstream buffer; - buffer << "Quadrilateral Gauss-Lobatto integration 1 "; - return buffer.str(); - } + public: + KRATOS_CLASS_POINTER_DEFINITION(QuadrilateralGaussLobattoIntegrationPoints2); + typedef std::size_t SizeType; + static const unsigned int Dimension = 2; -}; // Class QuadrilateralGaussLobattoIntegrationPoints1 + typedef IntegrationPoint<2> IntegrationPointType; -class QuadrilateralGaussLobattoIntegrationPoints2 -{ -public: - KRATOS_CLASS_POINTER_DEFINITION(QuadrilateralGaussLobattoIntegrationPoints2); - typedef std::size_t SizeType; + typedef std::array IntegrationPointsArrayType; - static const unsigned int Dimension = 2; + typedef IntegrationPointType::PointType PointType; - typedef IntegrationPoint<2> IntegrationPointType; + static SizeType IntegrationPointsNumber() + { + return 4; + } - typedef std::array IntegrationPointsArrayType; + static const IntegrationPointsArrayType &IntegrationPoints() + { + static const IntegrationPointsArrayType s_integration_points{{ + IntegrationPointType(-1.0, -1.0, 1.0), + IntegrationPointType(1.0, -1.0, 1.0), + IntegrationPointType(1.0, 1.0, 1.0), + IntegrationPointType(-1.0, 1.0, 1.0)}}; + return s_integration_points; + } - typedef IntegrationPointType::PointType PointType; + std::string Info() const + { + std::stringstream buffer; + buffer << "Quadrilateral Gauss-Lobatto integration 2 "; + return buffer.str(); + } - static SizeType IntegrationPointsNumber() - { - return 4; - } + }; // Class QuadrilateralGaussLobattoIntegrationPoints2 - static const IntegrationPointsArrayType& IntegrationPoints() - { - static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( -1.00 , -1.00, 0.50 ), - IntegrationPointType( 1.00 , -1.00, 0.50 ), - IntegrationPointType( 1.00 , 1.00, 0.50 ), - IntegrationPointType( -1.00 , 1.00, 0.50 ) - }}; - return s_integration_points; - } - - std::string Info() const + class QuadrilateralGaussLobattoIntegrationPoints3 { - std::stringstream buffer; - buffer << "Quadrilateral Gauss-Lobatto integration 2 "; - return buffer.str(); - } + public: + KRATOS_CLASS_POINTER_DEFINITION(QuadrilateralGaussLobattoIntegrationPoints3); + typedef std::size_t SizeType; -}; // Class QuadrilateralGaussLobattoIntegrationPoints2 + static const unsigned int Dimension = 2; + typedef IntegrationPoint<2> IntegrationPointType; + typedef std::array IntegrationPointsArrayType; -} + typedef IntegrationPointType::PointType PointType; + + static SizeType IntegrationPointsNumber() + { + return 9; + } + + static const IntegrationPointsArrayType &IntegrationPoints() + { + const double one_over_nine = 1.0 / 9.0; + const double four_over_nine = 4.0 * one_over_nine; -#endif // KRATOS_QUADRILATERAL_GAUSS_LOBATTO_INTEGRATION_POINTS_H_INCLUDED defined + // Define the integration points and their weights + static const IntegrationPointsArrayType s_integration_points{{ + // Corner points + IntegrationPointType(-1.0, -1.0, one_over_nine), + IntegrationPointType(1.0, -1.0, one_over_nine), + IntegrationPointType(-1.0, 1.0, one_over_nine), + IntegrationPointType(1.0, 1.0, one_over_nine), + // Edge midpoints + IntegrationPointType(0.0, -1.0, four_over_nine), + IntegrationPointType(-1.0, 0.0, four_over_nine), + IntegrationPointType(1.0, 0.0, four_over_nine), + IntegrationPointType(0.0, 1.0, four_over_nine), + // Center point + IntegrationPointType(0.0, 0.0, 16.0 / 9.0)}}; + return s_integration_points; + } + + std::string Info() const + { + std::stringstream buffer; + buffer << "Quadrilateral Gauss-Lobatto integration 3 "; + return buffer.str(); + } + + }; // Class QuadrilateralGaussLobattoIntegrationPoints3 + +} From ded7de0661ba317390eabb37793894ae6ccb6818 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 9 Dec 2024 10:51:20 +0100 Subject: [PATCH 098/142] adding cpp test --- .../test_integration_quadratures.cpp | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp diff --git a/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp b/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp new file mode 100644 index 000000000000..b7a9824a567d --- /dev/null +++ b/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp @@ -0,0 +1,79 @@ +// | / | +// ' / __| _` | __| _ \ __| +// . \ | ( | | ( |\__ ` +// _|\_\_| \__,_|\__|\___/ ____/ +// Multi-Physics +// +// License: BSD License +// Kratos default license: kratos/license.txt +// +// Main authors: Alejandro Cornejo +// + +// System includes + +// External includes + +// Project includes +#include "testing/testing.h" +#include "integration/quadrilateral_gauss_lobatto_integration_points.h" + +namespace Kratos::Testing +{ + +KRATOS_TEST_CASE_IN_SUITE(GaussLobattoQuadrilateralQuadraturesTest, KratosCoreFastSuite) +{ + + // In This test we evaluate the Gauss-Lobatto quadratures for integrating + // f = (x+y) and g = (x+y)^2 over a [-1, 1] quadrilateral + + const auto& r_lobatto_1 = QuadrilateralGaussLobattoIntegrationPoints1(); + const auto& r_lobatto_2 = QuadrilateralGaussLobattoIntegrationPoints2(); + const auto& r_lobatto_3 = QuadrilateralGaussLobattoIntegrationPoints3(); + + // Analytical results, reference + const double integral_f = 0.0; + const double integral_g = 8.0 / 3.0; + + double quadrature_integral_f = 0.0; + double quadrature_integral_g = 0.0; + + // Integral for f with Lobatto 1 + for (IndexType IP = 0; IP < r_lobatto_1.IntegrationPoints().size(); ++IP) { + const auto& r_IP = r_lobatto_1.IntegrationPoints()[IP]; + const double X = r_IP.X(); + const double Y = r_IP.Y(); + const double w = r_IP.Weight(); + + quadrature_integral_f += w * (X + Y); + } + + KRATOS_CHECK_NEAR(quadrature_integral_f, integral_f, 1.0E-6); + quadrature_integral_f = 0.0; + + // Integral for f with Lobatto 2 + for (IndexType IP = 0; IP < r_lobatto_2.IntegrationPoints().size(); ++IP) { + const auto& r_IP = r_lobatto_2.IntegrationPoints()[IP]; + const double X = r_IP.X(); + const double Y = r_IP.Y(); + const double w = r_IP.Weight(); + + quadrature_integral_f += w * (X + Y); + } + KRATOS_CHECK_NEAR(quadrature_integral_f, integral_f, 1.0E-6); + + // Integral for g with Lobatto 3 + for (IndexType IP = 0; IP < r_lobatto_3.IntegrationPoints().size(); ++IP) { + const auto& r_IP = r_lobatto_3.IntegrationPoints()[IP]; + const double X = r_IP.X(); + const double Y = r_IP.Y(); + const double w = r_IP.Weight(); + + quadrature_integral_g += w * (X + Y) * (X + Y); + } + KRATOS_CHECK_NEAR(quadrature_integral_g, integral_g, 1.0E-6); + +} + + +} // namespace Kratos::Testing \ No newline at end of file From e819f3b501e5da01628f368ed927aee130da04bf Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 9 Dec 2024 11:06:42 +0100 Subject: [PATCH 099/142] update in triangle gauss quad --- .../triangle_gauss_legendre_integration_points.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/kratos/integration/triangle_gauss_legendre_integration_points.h b/kratos/integration/triangle_gauss_legendre_integration_points.h index 014d5781699b..c13db0597fca 100644 --- a/kratos/integration/triangle_gauss_legendre_integration_points.h +++ b/kratos/integration/triangle_gauss_legendre_integration_points.h @@ -11,8 +11,7 @@ // // -#if !defined(KRATOS_TRIANGLE_GAUSS_LEGENDRE_INTEGRATION_POINTS_H_INCLUDED ) -#define KRATOS_TRIANGLE_GAUSS_LEGENDRE_INTEGRATION_POINTS_H_INCLUDED +#pragma once // System includes @@ -87,7 +86,7 @@ class TriangleGaussLegendreIntegrationPoints2 // Define auxiliary constants const double one_sixth = 1.0 / 6.0; const double two_thirds = 2.0 / 3.0; - const double weight = 1.0 / 6.0; + const double weight = one_sixth; // Integration points using the auxiliary constants static const IntegrationPointsArrayType s_integration_points{{ @@ -285,6 +284,3 @@ class TriangleGaussLegendreIntegrationPoints5 } // namespace Kratos. -#endif // KRATOS_TRIANGLE_GAUSS_LEGENDRE_INTEGRATION_POINTS_H_INCLUDED defined - - From e60c8cb651a3f9bdccb1bc335504552d6e4a753a Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 9 Dec 2024 11:13:26 +0100 Subject: [PATCH 100/142] adding quadrture for triang --- ...riangle_gauss_lobatto_integration_points.h | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 kratos/integration/triangle_gauss_lobatto_integration_points.h diff --git a/kratos/integration/triangle_gauss_lobatto_integration_points.h b/kratos/integration/triangle_gauss_lobatto_integration_points.h new file mode 100644 index 000000000000..734a1b825a18 --- /dev/null +++ b/kratos/integration/triangle_gauss_lobatto_integration_points.h @@ -0,0 +1,118 @@ +// | / | +// ' / __| _` | __| _ \ __| +// . \ | ( | | ( |\__ ` +// _|\_\_| \__,_|\__|\___/ ____/ +// Multi-Physics +// +// License: BSD License +// Kratos default license: kratos/license.txt +// +// Main authors: Alejandro Cornejo +// +// + + +#pragma once + +// System includes + +// External includes + +// Project includes +#include "integration/quadrature.h" + +namespace Kratos +{ + +class TriangleGaussLobattoIntegrationPoints1 +{ +public: + KRATOS_CLASS_POINTER_DEFINITION(TriangleGaussRadauIntegrationPoints1); + typedef std::size_t SizeType; + + static const unsigned int Dimension = 2; + + typedef IntegrationPoint<2> IntegrationPointType; + + typedef std::array IntegrationPointsArrayType; + + typedef IntegrationPointType::PointType PointType; + + static SizeType IntegrationPointsNumber() + { + return 1; + } + + static const IntegrationPointsArrayType& IntegrationPoints() + { + const double one_third = 1.0 / 3.0; + static const IntegrationPointsArrayType s_integration_points{{ + IntegrationPointType( one_third , one_third , 0.5 ) + }}; + return s_integration_points; + } + + std::string Info() const + { + std::stringstream buffer; + buffer << "Triangle Gauss-Lobatto quadrature 1 (1 points, degree of precision = 1) "; + return buffer.str(); + } + + +}; // Class TriangleGaussLobattoIntegrationPoints1 + + +class TriangleGaussLobattoIntegrationPoints2 +{ +public: + KRATOS_CLASS_POINTER_DEFINITION(TriangleGaussLobattoIntegrationPoints2); + typedef std::size_t SizeType; + + static const unsigned int Dimension = 2; + + typedef IntegrationPoint<2> IntegrationPointType; + + typedef std::array IntegrationPointsArrayType; + + typedef IntegrationPointType::PointType PointType; + + static SizeType IntegrationPointsNumber() + { + return 3; + } + + static const IntegrationPointsArrayType& IntegrationPoints() + { + const double one_over_six = 1.0 / 6.0; + static const IntegrationPointsArrayType s_integration_points{{ + IntegrationPointType( 0.0, 0.0 , one_over_six ), + IntegrationPointType( 1.0, 0.0 , one_over_six ), + IntegrationPointType( 0.0, 1.0 , one_over_six ) + }}; + return s_integration_points; + } + + std::string Info() const + { + std::stringstream buffer; + buffer << "Triangle Gauss-Radau quadrature 2 (4 points, degree of precision = 3)"; + return buffer.str(); + } + + +}; // Class TriangleGaussLobattoIntegrationPoints2 + +///@name Type Definitions +///@{ + + +///@} +///@name Input and output +///@{ + + +///@} + + +} // namespace Kratos. From 5ebc747b31c94e628af32a630d3119e02cec4d6d Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 9 Dec 2024 12:10:07 +0100 Subject: [PATCH 101/142] add test --- ...riangle_gauss_lobatto_integration_points.h | 45 ++----------------- .../test_integration_quadratures.cpp | 26 +++++++++++ 2 files changed, 29 insertions(+), 42 deletions(-) diff --git a/kratos/integration/triangle_gauss_lobatto_integration_points.h b/kratos/integration/triangle_gauss_lobatto_integration_points.h index 734a1b825a18..ec82992c790d 100644 --- a/kratos/integration/triangle_gauss_lobatto_integration_points.h +++ b/kratos/integration/triangle_gauss_lobatto_integration_points.h @@ -27,46 +27,7 @@ namespace Kratos class TriangleGaussLobattoIntegrationPoints1 { public: - KRATOS_CLASS_POINTER_DEFINITION(TriangleGaussRadauIntegrationPoints1); - typedef std::size_t SizeType; - - static const unsigned int Dimension = 2; - - typedef IntegrationPoint<2> IntegrationPointType; - - typedef std::array IntegrationPointsArrayType; - - typedef IntegrationPointType::PointType PointType; - - static SizeType IntegrationPointsNumber() - { - return 1; - } - - static const IntegrationPointsArrayType& IntegrationPoints() - { - const double one_third = 1.0 / 3.0; - static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( one_third , one_third , 0.5 ) - }}; - return s_integration_points; - } - - std::string Info() const - { - std::stringstream buffer; - buffer << "Triangle Gauss-Lobatto quadrature 1 (1 points, degree of precision = 1) "; - return buffer.str(); - } - - -}; // Class TriangleGaussLobattoIntegrationPoints1 - - -class TriangleGaussLobattoIntegrationPoints2 -{ -public: - KRATOS_CLASS_POINTER_DEFINITION(TriangleGaussLobattoIntegrationPoints2); + KRATOS_CLASS_POINTER_DEFINITION(TriangleGaussLobattoIntegrationPoints1); typedef std::size_t SizeType; static const unsigned int Dimension = 2; @@ -96,12 +57,12 @@ class TriangleGaussLobattoIntegrationPoints2 std::string Info() const { std::stringstream buffer; - buffer << "Triangle Gauss-Radau quadrature 2 (4 points, degree of precision = 3)"; + buffer << "Triangle Gauss-Lobatto quadrature 1 (3 points, degree of precision = 1)"; return buffer.str(); } -}; // Class TriangleGaussLobattoIntegrationPoints2 +}; // Class TriangleGaussLobattoIntegrationPoints1 ///@name Type Definitions ///@{ diff --git a/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp b/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp index b7a9824a567d..3d74765ae206 100644 --- a/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp +++ b/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp @@ -17,6 +17,7 @@ // Project includes #include "testing/testing.h" #include "integration/quadrilateral_gauss_lobatto_integration_points.h" +#include "integration/triangle_gauss_lobatto_integration_points.h" namespace Kratos::Testing { @@ -75,5 +76,30 @@ KRATOS_TEST_CASE_IN_SUITE(GaussLobattoQuadrilateralQuadraturesTest, KratosCoreFa } +KRATOS_TEST_CASE_IN_SUITE(GaussLobattoQuadrilateralQuadraturesTest, KratosCoreFastSuite) +{ + + // In This test we evaluate the Gauss-Lobatto quadratures for integrating + // f = (x+y) [0, 1]x[0, 1-x] triangle + + const auto& r_lobatto_1 = TriangleGaussLobattoIntegrationPoints1(); + + // Analytical results, reference + const double integral_f = 1.0 / 3.0; + + double quadrature_integral_f = 0.0; + + // Integral for f with Lobatto 1 + for (IndexType IP = 0; IP < r_lobatto_1.IntegrationPoints().size(); ++IP) { + const auto& r_IP = r_lobatto_1.IntegrationPoints()[IP]; + const double X = r_IP.X(); + const double Y = r_IP.Y(); + const double w = r_IP.Weight(); + + quadrature_integral_f += w * (X + Y); + } + + KRATOS_CHECK_NEAR(quadrature_integral_f, integral_f, 1.0E-6); +} } // namespace Kratos::Testing \ No newline at end of file From 2b8d80e24454cfe1086a9273a44a1f813c24a881 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 9 Dec 2024 12:11:24 +0100 Subject: [PATCH 102/142] detail --- .../cpp_tests/integration/test_integration_quadratures.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp b/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp index 3d74765ae206..95d2a9c4a239 100644 --- a/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp +++ b/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp @@ -79,12 +79,12 @@ KRATOS_TEST_CASE_IN_SUITE(GaussLobattoQuadrilateralQuadraturesTest, KratosCoreFa KRATOS_TEST_CASE_IN_SUITE(GaussLobattoQuadrilateralQuadraturesTest, KratosCoreFastSuite) { - // In This test we evaluate the Gauss-Lobatto quadratures for integrating - // f = (x+y) [0, 1]x[0, 1-x] triangle + // In This test we evaluate the Gauss-Lobatto quadrature for integrating + // f = (x+y) over a [0, 1]x[0, 1-x] triangle const auto& r_lobatto_1 = TriangleGaussLobattoIntegrationPoints1(); - // Analytical results, reference + // Analytical result, reference const double integral_f = 1.0 / 3.0; double quadrature_integral_f = 0.0; From d85714e709a62db054f31a963ebedb21494451c3 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 9 Dec 2024 12:17:48 +0100 Subject: [PATCH 103/142] change name test --- .../cpp_tests/integration/test_integration_quadratures.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp b/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp index 95d2a9c4a239..3f0ead176d5e 100644 --- a/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp +++ b/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp @@ -76,7 +76,7 @@ KRATOS_TEST_CASE_IN_SUITE(GaussLobattoQuadrilateralQuadraturesTest, KratosCoreFa } -KRATOS_TEST_CASE_IN_SUITE(GaussLobattoQuadrilateralQuadraturesTest, KratosCoreFastSuite) +KRATOS_TEST_CASE_IN_SUITE(GaussLobattoTriangleQuadraturesTest, KratosCoreFastSuite) { // In This test we evaluate the Gauss-Lobatto quadrature for integrating From 4dec7ec24a9db3cd488db32e4236d5c582e2614b Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 9 Dec 2024 12:44:08 +0100 Subject: [PATCH 104/142] correcting the quadrature --- ...ahedron_gauss_lobatto_integration_points.h | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/kratos/integration/hexahedron_gauss_lobatto_integration_points.h b/kratos/integration/hexahedron_gauss_lobatto_integration_points.h index 3a427d8695c5..b9a11431cb5a 100644 --- a/kratos/integration/hexahedron_gauss_lobatto_integration_points.h +++ b/kratos/integration/hexahedron_gauss_lobatto_integration_points.h @@ -50,10 +50,10 @@ class HexahedronGaussLobattoIntegrationPoints1 static const IntegrationPointsArrayType& IntegrationPoints() { static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( -1.00 , -1.00, 0.00, 1.00 ), - IntegrationPointType( 1.00 , -1.00, 0.00, 1.00 ), - IntegrationPointType( 1.00 , 1.00, 0.00, 1.00 ), - IntegrationPointType( -1.00 , 1.00, 0.00, 1.00 ) + IntegrationPointType( -1.0 , -1.0, 0.0, 1.0 ), + IntegrationPointType( 1.0 , -1.0, 0.0, 1.0 ), + IntegrationPointType( 1.0 , 1.0, 0.0, 1.0 ), + IntegrationPointType( -1.0 , 1.0, 0.0, 1.0 ) }}; return s_integration_points; } @@ -90,14 +90,14 @@ class HexahedronGaussLobattoIntegrationPoints2 static const IntegrationPointsArrayType& IntegrationPoints() { static const IntegrationPointsArrayType s_integration_points{{ - IntegrationPointType( -1.00 , -1.00, -1.00, 0.50 ), - IntegrationPointType( 1.00 , -1.00, -1.00, 0.50 ), - IntegrationPointType( 1.00 , 1.00, -1.00, 0.50 ), - IntegrationPointType( -1.00 , 1.00, -1.00, 0.50 ), - IntegrationPointType( -1.00 , -1.00, 1.00, 0.50 ), - IntegrationPointType( 1.00 , -1.00, 1.00, 0.50 ), - IntegrationPointType( 1.00 , 1.00, 1.00, 0.50 ), - IntegrationPointType( -1.00 , 1.00, 1.00, 0.50 ) + IntegrationPointType( -1.0 , -1.0, -1.0, 1.0 ), + IntegrationPointType( 1.0 , -1.0, -1.0, 1.0 ), + IntegrationPointType( 1.0 , 1.0, -1.0, 1.0 ), + IntegrationPointType( -1.0 , 1.0, -1.0, 1.0 ), + IntegrationPointType( -1.0 , -1.0, 1.0, 1.0 ), + IntegrationPointType( 1.0 , -1.0, 1.0, 1.0 ), + IntegrationPointType( 1.0 , 1.0, 1.0, 1.0 ), + IntegrationPointType( -1.0 , 1.0, 1.0, 1.0 ) }}; return s_integration_points; } From d23d859f6e032b1213ea7432acfedde8f9d61e3b Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 9 Dec 2024 12:52:49 +0100 Subject: [PATCH 105/142] adding test --- .../test_integration_quadratures.cpp | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp b/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp index b7a9824a567d..fa1950d49328 100644 --- a/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp +++ b/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp @@ -17,6 +17,7 @@ // Project includes #include "testing/testing.h" #include "integration/quadrilateral_gauss_lobatto_integration_points.h" +#include "integration/hexahedron_gauss_lobatto_integration_points.h" namespace Kratos::Testing { @@ -75,5 +76,31 @@ KRATOS_TEST_CASE_IN_SUITE(GaussLobattoQuadrilateralQuadraturesTest, KratosCoreFa } +KRATOS_TEST_CASE_IN_SUITE(GaussLobattoHexaQuadraturesTest, KratosCoreFastSuite) +{ + + // In This test we evaluate the Gauss-Lobatto quadratures for integrating + // f = (x+y+z+5) over a [-1, 1] hexa + + const auto& r_lobatto = HexahedronGaussLobattoIntegrationPoints2(); + + // Analytical results, reference + const double integral_f = 40.0; + + double quadrature_integral_f = 0.0; + + // Integral for f with Lobatto 1 + for (IndexType IP = 0; IP < r_lobatto.IntegrationPoints().size(); ++IP) { + const auto& r_IP = r_lobatto.IntegrationPoints()[IP]; + const double X = r_IP.X(); + const double Y = r_IP.Y(); + const double Z = r_IP.Z(); + const double w = r_IP.Weight(); + + quadrature_integral_f += w * (X + Y + Z + 5.0); + } + + KRATOS_CHECK_NEAR(quadrature_integral_f, integral_f, 1.0E-6); +} } // namespace Kratos::Testing \ No newline at end of file From 72a90cbe783ade1faa207c0003e343ad057e30b8 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 9 Dec 2024 12:58:32 +0100 Subject: [PATCH 106/142] update tab --- kratos/integration/triangle_gauss_lobatto_integration_points.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos/integration/triangle_gauss_lobatto_integration_points.h b/kratos/integration/triangle_gauss_lobatto_integration_points.h index ec82992c790d..229041ce458e 100644 --- a/kratos/integration/triangle_gauss_lobatto_integration_points.h +++ b/kratos/integration/triangle_gauss_lobatto_integration_points.h @@ -5,7 +5,7 @@ // Multi-Physics // // License: BSD License -// Kratos default license: kratos/license.txt +// Kratos default license: kratos/license.txt // // Main authors: Alejandro Cornejo // From b6ce4927f5d3fbb2f9f99895ceced8348acf89e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Mon, 9 Dec 2024 14:09:21 +0100 Subject: [PATCH 107/142] Remove evil tabs --- kratos/integration/triangle_gauss_lobatto_integration_points.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kratos/integration/triangle_gauss_lobatto_integration_points.h b/kratos/integration/triangle_gauss_lobatto_integration_points.h index 229041ce458e..66296e599f76 100644 --- a/kratos/integration/triangle_gauss_lobatto_integration_points.h +++ b/kratos/integration/triangle_gauss_lobatto_integration_points.h @@ -4,14 +4,13 @@ // _|\_\_| \__,_|\__|\___/ ____/ // Multi-Physics // -// License: BSD License +// License: BSD License // Kratos default license: kratos/license.txt // // Main authors: Alejandro Cornejo // // - #pragma once // System includes From cba04fe209f618692acfbb3fe06b5dff4e7c59a3 Mon Sep 17 00:00:00 2001 From: AlejandroCornejo Date: Mon, 9 Dec 2024 16:15:29 +0100 Subject: [PATCH 108/142] adding gtest after conflict --- .../test_integration_quadratures.cpp | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp b/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp index fa1950d49328..55aee9545e7c 100644 --- a/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp +++ b/kratos/tests/cpp_tests/integration/test_integration_quadratures.cpp @@ -18,6 +18,7 @@ #include "testing/testing.h" #include "integration/quadrilateral_gauss_lobatto_integration_points.h" #include "integration/hexahedron_gauss_lobatto_integration_points.h" +#include "integration/triangle_gauss_lobatto_integration_points.h" namespace Kratos::Testing { @@ -103,4 +104,30 @@ KRATOS_TEST_CASE_IN_SUITE(GaussLobattoHexaQuadraturesTest, KratosCoreFastSuite) KRATOS_CHECK_NEAR(quadrature_integral_f, integral_f, 1.0E-6); } +KRATOS_TEST_CASE_IN_SUITE(GaussLobattoTriangleQuadraturesTest, KratosCoreFastSuite) +{ + + // In This test we evaluate the Gauss-Lobatto quadrature for integrating + // f = (x+y) over a [0, 1]x[0, 1-x] triangle + + const auto& r_lobatto_1 = TriangleGaussLobattoIntegrationPoints1(); + + // Analytical result, reference + const double integral_f = 1.0 / 3.0; + + double quadrature_integral_f = 0.0; + + // Integral for f with Lobatto 1 + for (IndexType IP = 0; IP < r_lobatto_1.IntegrationPoints().size(); ++IP) { + const auto& r_IP = r_lobatto_1.IntegrationPoints()[IP]; + const double X = r_IP.X(); + const double Y = r_IP.Y(); + const double w = r_IP.Weight(); + + quadrature_integral_f += w * (X + Y); + } + + KRATOS_CHECK_NEAR(quadrature_integral_f, integral_f, 1.0E-6); +} + } // namespace Kratos::Testing \ No newline at end of file From 8acf05e7de60c3bb8f6643e321d236d617430d2e Mon Sep 17 00:00:00 2001 From: IAntonau Date: Mon, 9 Dec 2024 19:24:06 +0000 Subject: [PATCH 109/142] [OptApp] License File update (#12829) * update * apply recommendation * spelling * minor update --------- Co-authored-by: IAntonau Co-authored-by: Suneth Warnakulasuriya <7856520+sunethwarna@users.noreply.github.com> --- .../OptimizationApplication/license.txt | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/applications/OptimizationApplication/license.txt b/applications/OptimizationApplication/license.txt index dc8c7c070eb3..27e96af16560 100644 --- a/applications/OptimizationApplication/license.txt +++ b/applications/OptimizationApplication/license.txt @@ -1,21 +1,27 @@ Kratos Optimization Application A library based on: Kratos Multi-Physics -Copyright (c) 2022, Reza Najian Asl, Chair of Structural Analysis, Technical University of Munich +Copyright (c) 2024 + Reza Najian Asl * + Suneth Warnakulasuriya * + Ihar Antonau ** + Roland Wüchner * + * Chair of Structural Analysis (Technical University of Munich) + ** Institute of Structural Analysis (Technical University of Braunschweig) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - All advertising materials mentioning features or use of this software must display the following acknowledgement: + - All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes Kratos Optimization technology. - Neither the name of the TUM nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From 17d4ca0eed3cee49a1dab970ff9615f02d00a84a Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Tue, 10 Dec 2024 17:53:59 +0100 Subject: [PATCH 110/142] Backwards compatibility --- .../conjugate_heat_transfer_solver.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/applications/ConvectionDiffusionApplication/python_scripts/conjugate_heat_transfer_solver.py b/applications/ConvectionDiffusionApplication/python_scripts/conjugate_heat_transfer_solver.py index 0f679e95031a..6ff8a37e07f8 100644 --- a/applications/ConvectionDiffusionApplication/python_scripts/conjugate_heat_transfer_solver.py +++ b/applications/ConvectionDiffusionApplication/python_scripts/conjugate_heat_transfer_solver.py @@ -13,6 +13,9 @@ # Importing the base class from KratosMultiphysics.python_solver import PythonSolver +# Importing Kratos utilities +from KratosMultiphysics.kratos_utilities import IssueDeprecationWarning + def CreateSolver(main_model_part, custom_settings): return ConjugateHeatTransferSolver(main_model_part, custom_settings) @@ -160,6 +163,22 @@ def ImportModelPart(self): # Import the fluid domain in the fluid dynamics solver self.fluid_solver.ImportModelPart() + #TODO: Remove this after the deprecation period + # Keep this for a while for retrocompatibility (ConnectivityPreserveModeler must be called at the stage modelers section) + if not self.settings["fluid_domain_solver_settings"]["fluid_solver_settings"]["model_import_settings"]["input_type"].GetString() == "use_input_model_part": + IssueDeprecationWarning("ConjugateHeatTransferSolver", "Using the old I/O at the solver level. Please use the geometry-based one with modelers.") + modeler = KratosMultiphysics.ConnectivityPreserveModeler() + if(self.domain_size == 2): + modeler.GenerateModelPart(self.fluid_solver.main_model_part, + self.fluid_thermal_solver.main_model_part, + "Element2D3N", + "LineCondition2D2N") + else: + modeler.GenerateModelPart(self.fluid_solver.main_model_part, + self.fluid_thermal_solver.main_model_part, + "Element3D4N", + "SurfaceCondition3D3N") + # Set the saved convection diffusion settings to the new thermal model part self.fluid_thermal_solver.main_model_part.ProcessInfo.SetValue(KratosMultiphysics.CONVECTION_DIFFUSION_SETTINGS, self.fluid_convection_diffusion_settings_aux_copy) self.fluid_convection_diffusion_settings_aux_copy = None @@ -376,6 +395,7 @@ def _set_up_dirichlet_coupling_boundary(self): for node in self._get_dirichlet_coupling_interface().Nodes: node.Fix(KratosMultiphysics.TEMPERATURE) + #TODO: Use MappingApplication in here def _set_up_mappers(self): # Set mappers settings mappers_settings = self.settings["coupling_settings"]["mappers_settings"] From 8ce0657ec60aed2312f6bc9011b1d16ffe8b9beb Mon Sep 17 00:00:00 2001 From: matekelemen Date: Wed, 11 Dec 2024 10:06:10 +0100 Subject: [PATCH 111/142] update vexcl --- external_libraries/vexcl/.travis.yml | 5 +-- .../vexcl/tests/context_setup.hpp | 27 ++++++++++------ .../vexcl/vexcl/backend/common.hpp | 32 +++++++++++++++++-- .../vexcl/vexcl/backend/jit/device_vector.hpp | 1 + 4 files changed, 49 insertions(+), 16 deletions(-) diff --git a/external_libraries/vexcl/.travis.yml b/external_libraries/vexcl/.travis.yml index 89df72727a30..1bd371c3a097 100644 --- a/external_libraries/vexcl/.travis.yml +++ b/external_libraries/vexcl/.travis.yml @@ -43,14 +43,12 @@ addons: packages: - opencl-headers - lcov - - clinfo homebrew: packages: - boost - libomp - cmake - lcov - - clinfo cache: directories: @@ -58,7 +56,6 @@ cache: script: - cmake --version - - clinfo - mkdir -p build && cd build - cmake -DVEXCL_TEST_COVERAGE=ON -DVEXCL_BUILD_TESTS=ON -DVEXCL_BUILD_EXAMPLES=ON -DVEXCL_BACKEND=${VEXCL_BACKEND} -DVEXCL_JIT_COMPILER_FLAGS=${VEXCL_JIT_COMPILER_FLAGS} .. - make -j2 @@ -69,5 +66,5 @@ script: after_success: - lcov --directory tests --base-directory ../vexcl --capture --output-file coverage.info - - lcov --remove coverage.info '/usr*' '*/cl.hpp' -o coverage.info + - lcov --remove coverage.info '/usr*' '*/cl.hpp' '*/boost/*' -o coverage.info - bash <(curl -s https://codecov.io/bash) diff --git a/external_libraries/vexcl/tests/context_setup.hpp b/external_libraries/vexcl/tests/context_setup.hpp index fb9d59048f0c..2e7502843051 100644 --- a/external_libraries/vexcl/tests/context_setup.hpp +++ b/external_libraries/vexcl/tests/context_setup.hpp @@ -1,12 +1,21 @@ #ifndef CONTEXT_SETUP_HPP #define CONTEXT_SETUP_HPP +#include +#include #include #include "random_vector.hpp" struct ContextSetup { - ContextSetup() : context(vex::Filter::DoublePrecision && vex::Filter::Env) - { + ContextSetup() { + try { + context = std::make_shared(vex::Filter::DoublePrecision && vex::Filter::Env); + } catch(const vex::backend::error &e) { + std::cerr << "Failed to initialize compute context" << std::endl; + std::cerr << "Error: " << e << std::endl; + throw; + } + unsigned seed = static_cast(time(0)); std::cout << "seed: " << seed << std::endl; @@ -15,24 +24,24 @@ struct ContextSetup { #ifndef VEXCL_BACKEND_JIT // If there is only one device in context, duplicate the command queues // in order to properly test multi-device capabilities. - if (context.queue().size() == 1) { + if (context->queue().size() == 1) { vex::Context second(vex::Filter::DoublePrecision && vex::Filter::Env); - std::vector c = context.context(); - std::vector q = context.queue(); + std::vector c = context->context(); + std::vector q = context->queue(); c.push_back(second.context(0)); q.push_back(second.queue(0)); - context = vex::Context(c, q); - vex::StaticContext<>::set(context); + context = std::make_shared(c, q); + vex::StaticContext<>::set(*context); } #endif - std::cout << context << std::endl; + std::cout << *context << std::endl; } - vex::Context context; + std::shared_ptr context; }; struct ContextReference { diff --git a/external_libraries/vexcl/vexcl/backend/common.hpp b/external_libraries/vexcl/vexcl/backend/common.hpp index 375716f80831..fb53715ca51e 100644 --- a/external_libraries/vexcl/vexcl/backend/common.hpp +++ b/external_libraries/vexcl/vexcl/backend/common.hpp @@ -244,16 +244,42 @@ class sha1_hasher { } operator std::string() { - unsigned int digest[5]; + boost::uuids::detail::sha1::digest_type digest; h.get_digest(digest); - + return serialize_digest(digest); + } + private: + // Before boost 1.86.0, boost::uuids::detail::sha1 used to be unsigned int[5]. + std::string serialize_digest(unsigned int digest[5]) const { std::ostringstream buf; for(int i = 0; i < 5; ++i) buf << std::hex << std::setfill('0') << std::setw(8) << digest[i]; + return buf.str(); + } + + // Since boost 1.86.0, boost::uuids::detail::sha1 has been unsigned char[20]. + std::string serialize_digest(unsigned char digest[20]) const { + // Convert digest to a string representation of 5 integers in hexadecimal format + // (digest_type used to be unsigned int[5]). The reason for boost's change is to + // fix a bug related to endianness, but to conform to old VexCL behavior, bytes + // are reordered if necessary (whether conformance is required is up for debate). + std::ostringstream buf; + #if (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) || defined(__BIG_ENDIAN__) || defined(__BIG_ENDIAN) || defined(_BIG_ENDIAN) + const int int_size = sizeof(int); + for (int i=int_size; i<=20; i+=int_size) { + for (int j=i-1; j>=i-int_size; --j) { + buf << std::hex << std::setfill('0') << std::setw(2) << (int)digest[j]; + } + } + #else + for (unsigned i=0; i<20; ++i) { + buf << std::hex << std::setfill('0') << std::setw(2) << (int)digest[i]; + } + #endif return buf.str(); } - private: + boost::uuids::detail::sha1 h; }; diff --git a/external_libraries/vexcl/vexcl/backend/jit/device_vector.hpp b/external_libraries/vexcl/vexcl/backend/jit/device_vector.hpp index 1883b0997467..7128e909edbd 100644 --- a/external_libraries/vexcl/vexcl/backend/jit/device_vector.hpp +++ b/external_libraries/vexcl/vexcl/backend/jit/device_vector.hpp @@ -32,6 +32,7 @@ THE SOFTWARE. */ #include +#include namespace vex { namespace backend { From a8fc6421d13f15b6579866da1426e1e1192854ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Wed, 11 Dec 2024 14:58:45 +0100 Subject: [PATCH 112/142] Do not expose set methods --- .../add_trilinos_linear_solvers_to_python.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp b/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp index d94ac64e64c6..af0439cd7579 100644 --- a/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp +++ b/applications/TrilinosApplication/custom_python/add_trilinos_linear_solvers_to_python.cpp @@ -77,16 +77,16 @@ void AddLinearSolvers(pybind11::module& m) py::class_(m, "TrilinosFallbackLinearSolver") .def(py::init()) .def(py::init&, Parameters>()) - .def("AddSolver", [](TrilinosFallbackLinearSolverType& rSelf, TrilinosLinearSolverType::Pointer pSolver) { - rSelf.AddSolver(pSolver); - }) - .def("AddSolver", [](TrilinosFallbackLinearSolverType& rSelf, const Parameters ThisParameters) { - rSelf.AddSolver(ThisParameters); - }) + // .def("AddSolver", [](TrilinosFallbackLinearSolverType& rSelf, TrilinosLinearSolverType::Pointer pSolver) { + // rSelf.AddSolver(pSolver); + // }) + // .def("AddSolver", [](TrilinosFallbackLinearSolverType& rSelf, const Parameters ThisParameters) { + // rSelf.AddSolver(ThisParameters); + // }) .def("GetSolvers", &TrilinosFallbackLinearSolverType::GetSolvers) - .def("SetSolvers", &TrilinosFallbackLinearSolverType::SetSolvers) + // .def("SetSolvers", &TrilinosFallbackLinearSolverType::SetSolvers) .def("GetResetSolverEachTry", &TrilinosFallbackLinearSolverType::GetResetSolverEachTry) - .def("SetResetSolverIndexEachTry", &TrilinosFallbackLinearSolverType::SetResetSolverIndexEachTry) + // .def("SetResetSolverIndexEachTry", &TrilinosFallbackLinearSolverType::SetResetSolverIndexEachTry) .def("GetParameters", &TrilinosFallbackLinearSolverType::GetParameters) .def("GetCurrentSolverIndex", &TrilinosFallbackLinearSolverType::GetCurrentSolverIndex) .def("ClearCurrentSolverIndex", &TrilinosFallbackLinearSolverType::ClearCurrentSolverIndex) From 49e389ea898ed977f911dc3badf240ff1b070fd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Wed, 11 Dec 2024 15:27:05 +0100 Subject: [PATCH 113/142] Missing core comments --- kratos/python/add_linear_solvers_to_python.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kratos/python/add_linear_solvers_to_python.cpp b/kratos/python/add_linear_solvers_to_python.cpp index acae83e66ce2..85429b69dbcf 100644 --- a/kratos/python/add_linear_solvers_to_python.cpp +++ b/kratos/python/add_linear_solvers_to_python.cpp @@ -242,16 +242,16 @@ void AddLinearSolversToPython(pybind11::module& m) py::class_(m, "FallbackLinearSolver") .def(py::init()) .def(py::init&, Parameters>()) - .def("AddSolver", [](FallbackLinearSolverType& rSelf, LinearSolverType::Pointer pSolver) { - rSelf.AddSolver(pSolver); - }) - .def("AddSolver", [](FallbackLinearSolverType& rSelf, const Parameters ThisParameters) { - rSelf.AddSolver(ThisParameters); - }) + // .def("AddSolver", [](FallbackLinearSolverType& rSelf, LinearSolverType::Pointer pSolver) { + // rSelf.AddSolver(pSolver); + // }) + // .def("AddSolver", [](FallbackLinearSolverType& rSelf, const Parameters ThisParameters) { + // rSelf.AddSolver(ThisParameters); + // }) .def("GetSolvers", &FallbackLinearSolverType::GetSolvers) - .def("SetSolvers", &FallbackLinearSolverType::SetSolvers) + // .def("SetSolvers", &FallbackLinearSolverType::SetSolvers) .def("GetResetSolverEachTry", &FallbackLinearSolverType::GetResetSolverEachTry) - .def("SetResetSolverIndexEachTry", &FallbackLinearSolverType::SetResetSolverIndexEachTry) + // .def("SetResetSolverIndexEachTry", &FallbackLinearSolverType::SetResetSolverIndexEachTry) .def("GetParameters", &FallbackLinearSolverType::GetParameters) .def("GetCurrentSolverIndex", &FallbackLinearSolverType::GetCurrentSolverIndex) .def("ClearCurrentSolverIndex", &FallbackLinearSolverType::ClearCurrentSolverIndex) From dff57908785fdb02b3a7d7ac35e5730bc4368f17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Wed, 11 Dec 2024 17:46:04 +0100 Subject: [PATCH 114/142] Move to protected --- .../linear_solvers/fallback_linear_solver.h | 120 +++++++++--------- 1 file changed, 62 insertions(+), 58 deletions(-) diff --git a/kratos/linear_solvers/fallback_linear_solver.h b/kratos/linear_solvers/fallback_linear_solver.h index 6d2e76ca5569..eb31c7531bae 100644 --- a/kratos/linear_solvers/fallback_linear_solver.h +++ b/kratos/linear_solvers/fallback_linear_solver.h @@ -397,35 +397,6 @@ class FallbackLinearSolver } } - /** - * @brief Add a linear solver to the collection. - * @details This function adds a linear solver to the collection without extending parameters. - * @param pSolver Pointer to the linear solver to be added. - */ - void AddSolver(LinearSolverPointer pSolver) - { - // Increase the solvers vector - mSolvers.push_back(pSolver); - - // Extend the parameters - FillParametersFromSolver(pSolver); - } - - /** - * @brief Add a linear solver to the collection with additional parameters. - * @details This function adds a linear solver to the collection and extends the parameters. - * @param ThisParameters Parameters associated with the linear solver. - */ - void AddSolver(const Parameters ThisParameters) - { - // Create the solver - auto p_solver = ConstructLinearSolverFromSettings(ThisParameters); - mSolvers.push_back(p_solver); - - // Add the new solver parameters to the collection - mParameters["solvers"].Append(ThisParameters); - } - ///@} ///@name Access ///@{ @@ -439,25 +410,6 @@ class FallbackLinearSolver return mSolvers; } - /** - * @brief Set the Solvers list. - * @param rSolvers A vector of LinearSolverPointer to set. - */ - void SetSolvers(const std::vector& rSolvers) - { - // Assign the solvers - mSolvers = rSolvers; - - // Remove solvers and add again - mParameters.RemoveValue("solvers"); - mParameters.AddEmptyArray("solvers"); - - // Fill the parameters with the solvers - for (auto& p_solver : mSolvers) { - FillParametersFromSolver(p_solver); - } - } - /** * @brief Check if the solver index should be reset for each try. * @return true If the solver index is reset for each try. @@ -468,16 +420,6 @@ class FallbackLinearSolver return mResetSolverEachTry; } - /** - * @brief Set whether the solver index should be reset for each try. - * @param Reset Flag indicating whether to reset the solver index each try. - */ - void SetResetSolverIndexEachTry(const bool Reset) - { - mResetSolverEachTry = Reset; - mParameters["reset_solver_each_try"].SetBool(Reset); - } - /** * @brief Get the Parameters. * @return Parameters copy to the Parameters object. @@ -653,6 +595,35 @@ class FallbackLinearSolver ///@name Protected Operations ///@{ + /** + * @brief Add a linear solver to the collection. + * @details This function adds a linear solver to the collection without extending parameters. + * @param pSolver Pointer to the linear solver to be added. + */ + void AddSolver(LinearSolverPointer pSolver) + { + // Increase the solvers vector + mSolvers.push_back(pSolver); + + // Extend the parameters + FillParametersFromSolver(pSolver); + } + + /** + * @brief Add a linear solver to the collection with additional parameters. + * @details This function adds a linear solver to the collection and extends the parameters. + * @param ThisParameters Parameters associated with the linear solver. + */ + void AddSolver(const Parameters ThisParameters) + { + // Create the solver + auto p_solver = ConstructLinearSolverFromSettings(ThisParameters); + mSolvers.push_back(p_solver); + + // Add the new solver parameters to the collection + mParameters["solvers"].Append(ThisParameters); + } + /** * @brief Constructs a linear solver based on the provided settings. * @details This function is responsible for instantiating a linear solver object using the configuration specified in the `Settings` parameter. It leverages a factory pattern to select and construct the appropriate solver type based on the parameters provided. The selection process considers the solver type, tolerance, maximum iterations, and other solver-specific parameters contained within `Settings`. @@ -795,6 +766,39 @@ class FallbackLinearSolver } } + ///@} + ///@name Protected Access + ///@{ + + /** + * @brief Set the Solvers list. + * @param rSolvers A vector of LinearSolverPointer to set. + */ + void SetSolvers(const std::vector& rSolvers) + { + // Assign the solvers + mSolvers = rSolvers; + + // Remove solvers and add again + mParameters.RemoveValue("solvers"); + mParameters.AddEmptyArray("solvers"); + + // Fill the parameters with the solvers + for (auto& p_solver : mSolvers) { + FillParametersFromSolver(p_solver); + } + } + + /** + * @brief Set whether the solver index should be reset for each try. + * @param Reset Flag indicating whether to reset the solver index each try. + */ + void SetResetSolverIndexEachTry(const bool Reset) + { + mResetSolverEachTry = Reset; + mParameters["reset_solver_each_try"].SetBool(Reset); + } + ///@} }; // Class FallbackLinearSolver From ade16f781d51c0d254260dd9d33b3226793072d4 Mon Sep 17 00:00:00 2001 From: Carlos Roig Date: Thu, 12 Dec 2024 11:10:25 +0100 Subject: [PATCH 115/142] Adding suggestions to import failures --- kratos/python_interface/__init__.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/kratos/python_interface/__init__.py b/kratos/python_interface/__init__.py index 225b455f6c8b..3b1009f7e708 100644 --- a/kratos/python_interface/__init__.py +++ b/kratos/python_interface/__init__.py @@ -32,7 +32,28 @@ class KratosPaths(object): # import core library (Kratos.so) sys.path.append(KratosPaths.kratos_libs) sys.path.append(KratosPaths.kratos_module_libs) -from Kratos import * + +try: + from Kratos import * +except ImportError as e: + var_name = { + "posix": "LD_LIBRARY_PATH or DYLD_LIBRARY_PATH", + "nt": "PATH" + } + + if os.name in var_name.keys(): + print(f"Unable to find KratosCore. Please make sure that your {var_name[os.name]} environment variable includes the path to the Kratos libraries.") + else: + print(f"Unable to find KratosCore. Your OS is unknown and we cannot provide further info. Please open an issue at https://github.com/KratosMultiphysics/Kratos") + + raise e + +except OSError as e: + if os.name == 'nt': + print("Please download the latest Microsfot Visual C++ Redistributable from https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist") + else: + print("Please make sure that the Kratos libraries are compiled for your system.") + raise e Kernel.RegisterPythonVersion() From 528f84a5b83bb2fdc517faeed297f6a16856396f Mon Sep 17 00:00:00 2001 From: Carlos Roig Date: Thu, 12 Dec 2024 11:21:21 +0100 Subject: [PATCH 116/142] Adding opt-out for mpi --- kratos/python_interface/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kratos/python_interface/__init__.py b/kratos/python_interface/__init__.py index 225b455f6c8b..4ad404a4f213 100644 --- a/kratos/python_interface/__init__.py +++ b/kratos/python_interface/__init__.py @@ -57,10 +57,11 @@ def __ModuleInitDetail(): or "MPI_LOCALNRANKS" in os.environ # Recent mpich detected ) mpi_requested = "--using-mpi" in sys.argv[1:] # Forcing MPI initialization through command-line flag + mpi_disabled = "--not-using-mpi" in sys.argv[1:] # Forcing MPI disabled through command-line flag using_mpi = False - if mpi_detected or mpi_requested: + if (mpi_detected or mpi_requested) and not mpi_disabled: from KratosMultiphysics.kratos_utilities import IsMPIAvailable if IsMPIAvailable(): import KratosMultiphysics.mpi From 33a6e64f2c502d5dd0c59b8a66015983abc1b428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 12 Dec 2024 14:21:26 +0100 Subject: [PATCH 117/142] Rename centos configure to rocky --- .github/workflows/{centos_configure.sh => rocky_configure.sh} | 4 ---- 1 file changed, 4 deletions(-) rename .github/workflows/{centos_configure.sh => rocky_configure.sh} (93%) diff --git a/.github/workflows/centos_configure.sh b/.github/workflows/rocky_configure.sh similarity index 93% rename from .github/workflows/centos_configure.sh rename to .github/workflows/rocky_configure.sh index 3ea200faf36f..1ba54e353fa9 100644 --- a/.github/workflows/centos_configure.sh +++ b/.github/workflows/rocky_configure.sh @@ -35,14 +35,10 @@ rm -rf "${KRATOS_BUILD}/${KRATOS_BUILD_TYPE}/CMakeFiles" echo "Kratos build type is ${KRATOS_BUILD_TYPE}" -# Enable devtoolset-8 -source scl_source enable devtoolset-8 - # Configure cmake -H"${KRATOS_SOURCE}" -B"${KRATOS_BUILD}/${KRATOS_BUILD_TYPE}" \ ${KRATOS_CMAKE_OPTIONS_FLAGS} \ -DUSE_MPI=OFF \ --DPYBIND11_PYTHON_VERSION="3.8" \ -DCMAKE_CXX_FLAGS="${KRATOS_CMAKE_CXX_FLAGS} -O0 -Wall" \ -DCMAKE_UNITY_BUILD=ON \ From d8866d299356c76823e22c3bf65c596e05cd74e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 12 Dec 2024 14:21:43 +0100 Subject: [PATCH 118/142] Rename centos to rocky apps --- .../{ci_apps_centos.json => ci_apps_rocky.json} | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) rename .github/workflows/{ci_apps_centos.json => ci_apps_rocky.json} (96%) diff --git a/.github/workflows/ci_apps_centos.json b/.github/workflows/ci_apps_rocky.json similarity index 96% rename from .github/workflows/ci_apps_centos.json rename to .github/workflows/ci_apps_rocky.json index eade026fe027..eef5568be6a9 100644 --- a/.github/workflows/ci_apps_centos.json +++ b/.github/workflows/ci_apps_rocky.json @@ -1,9 +1,9 @@ -[ - "FluidDynamicsApplication", - "MappingApplication", - "StructuralMechanicsApplication", - "MeshingApplication", - "LinearSolversApplication", - "ConstitutiveLawsApplication", - "CoSimulationApplication" +[ + "FluidDynamicsApplication", + "MappingApplication", + "StructuralMechanicsApplication", + "MeshingApplication", + "LinearSolversApplication", + "ConstitutiveLawsApplication", + "CoSimulationApplication" ] \ No newline at end of file From 7fdd99edb7974c993b5f7d02ba150ffe89245111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 12 Dec 2024 14:22:11 +0100 Subject: [PATCH 119/142] Adding TODO --- kratos/python/add_other_utilities_to_python.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kratos/python/add_other_utilities_to_python.cpp b/kratos/python/add_other_utilities_to_python.cpp index 7a79ec9f7b39..28f0a63e3df7 100644 --- a/kratos/python/add_other_utilities_to_python.cpp +++ b/kratos/python/add_other_utilities_to_python.cpp @@ -73,7 +73,9 @@ namespace Kratos::Python { /** - * @brief A thin wrapper for GetSortedListOfFileNameData. The reason for having the wrapper is to replace the original lambda implementation as it causes gcc 4.8 to generate bad code on Centos7 which leads to memory corruption. + * @brief A thin wrapper for GetSortedListOfFileNameData. + * @note The reason for having the wrapper is to replace the original lambda implementation as it causes gcc 4.8 to generate bad code on Centos7 which leads to memory corruption. + * @todo Now that Centos support is dropped this cna be removed */ pybind11::list GetSortedListOfFileNameDataHelper( std::vector& rFileNameDataList, From ea8d235c6ab865c85cce06e9ba7e2bcb8a161325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 12 Dec 2024 14:22:32 +0100 Subject: [PATCH 120/142] Remove legacy centos checks --- CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f202808aeb6..d10d2aec1e14 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -304,9 +304,6 @@ if(KRATOS_BUILD_TESTING MATCHES ON) # retrieve a copy of the current directory's `COMPILE_OPTIONS` get_directory_property(kratos_root_compile_options COMPILE_OPTIONS) - # Disable warnings (needed by centos. We should all love centos, it clearly needs some affection) - add_compile_options(-w) - FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip From 8a4dd3e5ea68ee5a13e63b9e4d4fad66e7b1d11b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 12 Dec 2024 14:23:25 +0100 Subject: [PATCH 121/142] Prepare CI for Rocky linux --- .github/workflows/ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6e9f526db0a9..93923078003a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -301,17 +301,17 @@ jobs: python kratos/python_scripts/testing/run_python_tests.py -l nightly -c python - centos: + rocky: runs-on: ubuntu-latest needs: changed-files env: KRATOS_BUILD_TYPE: Custom KRATOS_CI_CHANGED_FILES: ${{needs.changed-files.outputs.files}} - KRATOS_CI_APPLICATIONS: ".github/workflows/ci_apps_centos.json" + KRATOS_CI_APPLICATIONS: ".github/workflows/ci_apps_rocky.json" ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true container: - image: kratosmultiphysics/kratos-image-ci-centos7:latest + image: kratosmultiphysics/kratos-image-ci-rockylinux-8:latest options: --user 1001 steps: @@ -322,13 +322,13 @@ jobs: - name: CI configuration shell: bash - run: python3.8 kratos/python_scripts/testing/ci_utilities.py + run: python3 kratos/python_scripts/testing/ci_utilities.py - name: Build run: | export KRATOS_CMAKE_CXX_FLAGS="-Werror -Wno-deprecated-declarations -Wignored-qualifiers" - cp .github/workflows/centos_configure.sh centos_configure.sh - bash centos_configure.sh + cp .github/workflows/rocky_configure.sh rocky_configure.sh + bash rocky_configure.sh - name: Running C++ tests run: | From a10f9f2081aaf2e8716749736d869cb040b25e46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 12 Dec 2024 14:47:09 +0100 Subject: [PATCH 122/142] Revert for Intel Compiler Legacy --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d10d2aec1e14..528c85c63e2b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -304,6 +304,9 @@ if(KRATOS_BUILD_TESTING MATCHES ON) # retrieve a copy of the current directory's `COMPILE_OPTIONS` get_directory_property(kratos_root_compile_options COMPILE_OPTIONS) + # Disable warnings (needed by Intel Compiler Legacy) + add_compile_options(-w) + FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip From 42e042523b120105bf44a2cfe5281878ed6343b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 12 Dec 2024 15:02:10 +0100 Subject: [PATCH 123/142] Update consistently CI --- .github/workflows/ci.yml | 2 +- .github/workflows/nightly_build.yml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 93923078003a..c995e46cf389 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -322,7 +322,7 @@ jobs: - name: CI configuration shell: bash - run: python3 kratos/python_scripts/testing/ci_utilities.py + run: python3.8 kratos/python_scripts/testing/ci_utilities.py - name: Build run: | diff --git a/.github/workflows/nightly_build.yml b/.github/workflows/nightly_build.yml index 17477f97f089..359be36ef152 100644 --- a/.github/workflows/nightly_build.yml +++ b/.github/workflows/nightly_build.yml @@ -6,7 +6,7 @@ on: - '.github/workflows/nightly_build.yml' - '.github/workflows/configure.sh' - '.github/workflows/configure.cmd' - - '.github/workflows/centos_configure.sh' + - '.github/workflows/rocky_configure.sh' schedule: - cron: '0 1 * * *' @@ -208,13 +208,13 @@ jobs: set PATH=%PATH%;%GITHUB_WORKSPACE%/bin/%KRATOS_BUILD_TYPE%/libs python kratos/python_scripts/testing/run_tests.py -l nightly -c python - centos-nightly: + rocky-nightly: runs-on: ubuntu-latest env: KRATOS_BUILD_TYPE: Custom container: - image: kratosmultiphysics/kratos-image-ci-centos7:latest + image: kratosmultiphysics/kratos-image-ci-rockylinux-8:latest options: --user 1001 steps: @@ -227,8 +227,8 @@ jobs: - name: Build run: | - cp .github/workflows/centos_configure.sh centos_configure.sh - bash centos_configure.sh + cp .github/workflows/rocky_configure.sh rocky_configure.sh + bash rocky_configure.sh - name: Running nightly tests run: | From 3ab0a9094aab192f7b9b529c731dba2f33474fad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 12 Dec 2024 15:02:27 +0100 Subject: [PATCH 124/142] Partial revert python version --- .github/workflows/rocky_configure.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/rocky_configure.sh b/.github/workflows/rocky_configure.sh index 1ba54e353fa9..188898fea564 100644 --- a/.github/workflows/rocky_configure.sh +++ b/.github/workflows/rocky_configure.sh @@ -39,6 +39,7 @@ echo "Kratos build type is ${KRATOS_BUILD_TYPE}" cmake -H"${KRATOS_SOURCE}" -B"${KRATOS_BUILD}/${KRATOS_BUILD_TYPE}" \ ${KRATOS_CMAKE_OPTIONS_FLAGS} \ -DUSE_MPI=OFF \ +-DPYBIND11_PYTHON_VERSION="3.8" \ -DCMAKE_CXX_FLAGS="${KRATOS_CMAKE_CXX_FLAGS} -O0 -Wall" \ -DCMAKE_UNITY_BUILD=ON \ From 127e39632fcc4af459ef2a0fd39cb87f806a7b4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 12 Dec 2024 15:02:57 +0100 Subject: [PATCH 125/142] Download manually boost (for now) --- .github/workflows/rocky_configure.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.github/workflows/rocky_configure.sh b/.github/workflows/rocky_configure.sh index 188898fea564..07db0e718c60 100644 --- a/.github/workflows/rocky_configure.sh +++ b/.github/workflows/rocky_configure.sh @@ -19,6 +19,27 @@ export KRATOS_APP_DIR="${KRATOS_SOURCE}/applications" export PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE:-"/usr/bin/python3"} export KRATOS_INSTALL_PYTHON_USING_LINKS=ON +# Boost setup +BOOST_VERSION="1.86.0" +BOOST_DIR_NAME="boost_1_86_0" +BOOST_TARBALL_URL="https://archives.boost.io/release/${BOOST_VERSION}/source/${BOOST_DIR_NAME}.tar.gz" +BOOST_DOWNLOAD_DIR="${KRATOS_SOURCE}/external_libraries" +BOOST_EXTRACT_DIR="${BOOST_DOWNLOAD_DIR}/${BOOST_DIR_NAME}" + +# Download and extract Boost if not already done +mkdir -p "${BOOST_DOWNLOAD_DIR}" +if [ ! -d "${BOOST_EXTRACT_DIR}" ]; then + echo "Downloading Boost ${BOOST_VERSION}..." + curl -L "${BOOST_TARBALL_URL}" -o "${BOOST_DOWNLOAD_DIR}/${BOOST_DIR_NAME}.tar.gz" + echo "Extracting Boost..." + tar -xzf "${BOOST_DOWNLOAD_DIR}/${BOOST_DIR_NAME}.tar.gz" -C "${BOOST_DOWNLOAD_DIR}" +fi + +# Define BOOST_ROOT +export BOOST_ROOT="${BOOST_EXTRACT_DIR}" +echo "BOOST_ROOT is set to ${BOOST_ROOT}" + +# Add applications add_app ${KRATOS_APP_DIR}/FluidDynamicsApplication; add_app ${KRATOS_APP_DIR}/MappingApplication; add_app ${KRATOS_APP_DIR}/StructuralMechanicsApplication; @@ -40,6 +61,7 @@ cmake -H"${KRATOS_SOURCE}" -B"${KRATOS_BUILD}/${KRATOS_BUILD_TYPE}" \ ${KRATOS_CMAKE_OPTIONS_FLAGS} \ -DUSE_MPI=OFF \ -DPYBIND11_PYTHON_VERSION="3.8" \ +-DBOOST_ROOT="${BOOST_ROOT}" \ -DCMAKE_CXX_FLAGS="${KRATOS_CMAKE_CXX_FLAGS} -O0 -Wall" \ -DCMAKE_UNITY_BUILD=ON \ From b62bdad520d05a5b404abef5c9e6650921e8f021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= Date: Thu, 12 Dec 2024 16:32:58 +0100 Subject: [PATCH 126/142] Update script for running nightly tests --- .github/workflows/nightly_build.yml | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly_build.yml b/.github/workflows/nightly_build.yml index 359be36ef152..6b35439f24cd 100644 --- a/.github/workflows/nightly_build.yml +++ b/.github/workflows/nightly_build.yml @@ -131,13 +131,20 @@ jobs: bash configure.sh rm -r ${GITHUB_WORKSPACE}/build + - name: Running C++ tests + run: | + source /opt/intel/oneapi/setvars.sh + export PYTHONPATH=${PYTHONPATH}:${GITHUB_WORKSPACE}/bin/${KRATOS_BUILD_TYPE} + export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GITHUB_WORKSPACE}/bin/${KRATOS_BUILD_TYPE}/libs + python3 kratos/python_scripts/testing/run_cpp_tests.py + - name: Running tests shell: bash run: | source /opt/intel/oneapi/setvars.sh export PYTHONPATH=${PYTHONPATH}:${GITHUB_WORKSPACE}/bin/${KRATOS_BUILD_TYPE} export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GITHUB_WORKSPACE}/bin/${KRATOS_BUILD_TYPE}/libs - python3 kratos/python_scripts/testing/run_tests.py -l nightly -c python3 + python3 kratos/python_scripts/testing/run_python_tests.py -l nightly -c python3 - name: Running Python MPI tests (2 Cores) shell: bash @@ -201,12 +208,18 @@ jobs: copy .\.github\workflows\configure.cmd configure.cmd + - name: Running C++ tests + run: | + set PYTHONPATH=%PYTHONPATH%;%GITHUB_WORKSPACE%/bin/%KRATOS_BUILD_TYPE% + set PATH=%PATH%;%GITHUB_WORKSPACE%/bin/%KRATOS_BUILD_TYPE%/libs + python kratos/python_scripts/testing/run_cpp_tests.py + - name: Running nightly tests shell: cmd run: | set PYTHONPATH=%PYTHONPATH%;%GITHUB_WORKSPACE%/bin/%KRATOS_BUILD_TYPE% set PATH=%PATH%;%GITHUB_WORKSPACE%/bin/%KRATOS_BUILD_TYPE%/libs - python kratos/python_scripts/testing/run_tests.py -l nightly -c python + python kratos/python_scripts/testing/run_python_tests.py -l nightly -c python rocky-nightly: runs-on: ubuntu-latest @@ -230,8 +243,14 @@ jobs: cp .github/workflows/rocky_configure.sh rocky_configure.sh bash rocky_configure.sh + - name: Running C++ tests + run: | + export PYTHONPATH=${PYTHONPATH}:${GITHUB_WORKSPACE}/bin/Custom + export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GITHUB_WORKSPACE}/bin/Custom/libs + python3.8 kratos/python_scripts/testing/run_cpp_tests.py + - name: Running nightly tests run: | export PYTHONPATH=${PYTHONPATH}:${GITHUB_WORKSPACE}/bin/Custom export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GITHUB_WORKSPACE}/bin/Custom/libs - python3.8 kratos/python_scripts/testing/run_tests.py -l nightly -c python3.8 + python3.8 kratos/python_scripts/testing/run_python_tests.py -l nightly -c python3.8 From 75db57c163507c8e59cb5480c4760565b74f1894 Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Thu, 12 Dec 2024 18:28:28 +0100 Subject: [PATCH 127/142] Weakly compressible data container --- .../weakly_compressible_navier_stokes_data.h | 2 ++ .../custom_elements/embedded_fluid_element.cpp | 2 +- .../custom_elements/embedded_fluid_element_discontinuous.cpp | 2 +- .../FluidDynamicsApplication/custom_elements/fluid_element.cpp | 2 +- .../custom_elements/weakly_compressible_navier_stokes.cpp | 2 +- .../FluidDynamicsApplication/fluid_dynamics_application.h | 2 +- .../weakly_compressible_navier_stokes_cpp_template.cpp | 2 +- 7 files changed, 8 insertions(+), 6 deletions(-) rename applications/FluidDynamicsApplication/{custom_utilities => custom_elements/data_containers/weakly_compressible_navier_stokes}/weakly_compressible_navier_stokes_data.h (98%) diff --git a/applications/FluidDynamicsApplication/custom_utilities/weakly_compressible_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h similarity index 98% rename from applications/FluidDynamicsApplication/custom_utilities/weakly_compressible_navier_stokes_data.h rename to applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h index 83fb0705c168..ea534149d2d8 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/weakly_compressible_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h @@ -49,6 +49,8 @@ using NodalVectorData = typename FluidElementData::NodalVe using ShapeFunctionsType = typename FluidElementData::ShapeFunctionsType; using MatrixRowType = typename FluidElementData::MatrixRowType; +static constexpr std::size_t BlockSize = TDim + 1; + ///@} ///@name Public Members ///@{ diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp index f85d49c80e71..0b3f00616b3b 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp @@ -7,7 +7,7 @@ #include "custom_utilities/embedded_data.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/time_integrated_qsvms_data.h" -#include "custom_utilities/weakly_compressible_navier_stokes_data.h" +#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "modified_shape_functions/triangle_2d_3_modified_shape_functions.h" #include "modified_shape_functions/tetrahedra_3d_4_modified_shape_functions.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp index 08262ab8fb70..e6adc5244506 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp @@ -7,7 +7,7 @@ #include "utilities/element_size_calculator.h" #include "custom_utilities/embedded_discontinuous_data.h" #include "custom_utilities/time_integrated_qsvms_data.h" -#include "custom_utilities/weakly_compressible_navier_stokes_data.h" +#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "modified_shape_functions/triangle_2d_3_modified_shape_functions.h" #include "modified_shape_functions/tetrahedra_3d_4_modified_shape_functions.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp index 8204a2c31a1e..60e8a680099b 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp @@ -23,7 +23,7 @@ #include "custom_utilities/symbolic_stokes_data.h" #include "custom_utilities/two_fluid_navier_stokes_data.h" #include "custom_utilities/two_fluid_navier_stokes_alpha_method_data.h" -#include "custom_utilities/weakly_compressible_navier_stokes_data.h" +#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/vorticity_utilities.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp b/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp index 73d806db63b5..e6664c4cdfb5 100644 --- a/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp @@ -21,7 +21,7 @@ // Application includes #include "weakly_compressible_navier_stokes.h" -#include "custom_utilities/weakly_compressible_navier_stokes_data.h" +#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/fluid_dynamics_application.h b/applications/FluidDynamicsApplication/fluid_dynamics_application.h index 666272653238..ae2a2dd01e0f 100644 --- a/applications/FluidDynamicsApplication/fluid_dynamics_application.h +++ b/applications/FluidDynamicsApplication/fluid_dynamics_application.h @@ -90,7 +90,7 @@ #include "custom_utilities/symbolic_stokes_data.h" #include "custom_utilities/two_fluid_navier_stokes_data.h" #include "custom_utilities/two_fluid_navier_stokes_alpha_method_data.h" -#include "custom_utilities/weakly_compressible_navier_stokes_data.h" +#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "custom_constitutive/bingham_3d_law.h" #include "custom_constitutive/euler_2d_law.h" diff --git a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp index 56284066c345..a5c19b56a5aa 100644 --- a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp +++ b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp @@ -21,7 +21,7 @@ // Application includes #include "weakly_compressible_navier_stokes.h" -#include "custom_utilities/weakly_compressible_navier_stokes_data.h" +#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" namespace Kratos { From b0445618e387e84019d5e79a50293b75be2ff7ff Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Thu, 12 Dec 2024 18:39:35 +0100 Subject: [PATCH 128/142] QSVMS data container --- applications/FluidDynamicsApplication/custom_elements/d_vms.cpp | 2 +- .../data_containers/qs_vms/qs_vms_data.h} | 0 .../FluidDynamicsApplication/custom_elements/fluid_element.cpp | 2 +- .../FluidDynamicsApplication/custom_elements/qs_vms.cpp | 2 +- .../custom_utilities/qsvms_dem_coupled_data.h | 2 +- .../custom_utilities/time_integrated_qsvms_data.h | 2 +- .../FluidDynamicsApplication/fluid_dynamics_application.h | 2 +- 7 files changed, 6 insertions(+), 6 deletions(-) rename applications/FluidDynamicsApplication/{custom_utilities/qsvms_data.h => custom_elements/data_containers/qs_vms/qs_vms_data.h} (100%) diff --git a/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp b/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp index a73166a5bc1a..f3d603fb7d47 100644 --- a/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp @@ -14,7 +14,7 @@ #include "includes/cfd_variables.h" #include "includes/checks.h" -#include "custom_utilities/qsvms_data.h" +#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" #include "custom_utilities/qsvms_dem_coupled_data.h" //#include "custom_utilities/time_integrated_qsvms_data.h" #include "custom_utilities/fluid_element_utilities.h" diff --git a/applications/FluidDynamicsApplication/custom_utilities/qsvms_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h similarity index 100% rename from applications/FluidDynamicsApplication/custom_utilities/qsvms_data.h rename to applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h diff --git a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp index 60e8a680099b..a54f611734f6 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp @@ -15,7 +15,7 @@ #include "includes/checks.h" #include "data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h" -#include "custom_utilities/qsvms_data.h" +#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" #include "custom_utilities/time_integrated_qsvms_data.h" #include "custom_utilities/qsvms_dem_coupled_data.h" #include "custom_utilities/fic_data.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp b/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp index 228f179dda98..db27da5d2472 100644 --- a/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp @@ -14,7 +14,7 @@ #include "includes/cfd_variables.h" #include "includes/checks.h" -#include "custom_utilities/qsvms_data.h" +#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" #include "custom_utilities/time_integrated_qsvms_data.h" #include "custom_utilities/qsvms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" diff --git a/applications/FluidDynamicsApplication/custom_utilities/qsvms_dem_coupled_data.h b/applications/FluidDynamicsApplication/custom_utilities/qsvms_dem_coupled_data.h index b1c40a3e903f..31368e69f15e 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/qsvms_dem_coupled_data.h +++ b/applications/FluidDynamicsApplication/custom_utilities/qsvms_dem_coupled_data.h @@ -25,7 +25,7 @@ // Application includes #include "fluid_dynamics_application_variables.h" #include "custom_utilities/fluid_element_data.h" -#include "custom_utilities/qsvms_data.h" +#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_utilities/time_integrated_qsvms_data.h b/applications/FluidDynamicsApplication/custom_utilities/time_integrated_qsvms_data.h index cb0c6a7d8ea2..033e43476c15 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/time_integrated_qsvms_data.h +++ b/applications/FluidDynamicsApplication/custom_utilities/time_integrated_qsvms_data.h @@ -14,7 +14,7 @@ #define KRATOS_TIME_INTEGRATED_QSVMS_DATA_H #include "fluid_dynamics_application_variables.h" -#include "custom_utilities/qsvms_data.h" +#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/fluid_dynamics_application.h b/applications/FluidDynamicsApplication/fluid_dynamics_application.h index ae2a2dd01e0f..f268776c85d0 100644 --- a/applications/FluidDynamicsApplication/fluid_dynamics_application.h +++ b/applications/FluidDynamicsApplication/fluid_dynamics_application.h @@ -82,7 +82,7 @@ #include "custom_elements/two_fluid_navier_stokes_alpha_method.h" #include "custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h" -#include "custom_utilities/qsvms_data.h" +#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" #include "custom_utilities/time_integrated_qsvms_data.h" #include "custom_utilities/qsvms_dem_coupled_data.h" #include "custom_utilities/fic_data.h" From 2d04321f6aac3a10c3af733d8aaeb870eaa630df Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Thu, 12 Dec 2024 18:52:08 +0100 Subject: [PATCH 129/142] Base and FIC element data --- .../axisymmetric_navier_stokes_data.h | 2 +- .../data_containers/fic}/fic_data.h | 2 +- .../data_containers}/fluid_element_data.cpp | 0 .../data_containers}/fluid_element_data.h | 3 +++ .../custom_elements/data_containers/qs_vms/qs_vms_data.h | 2 +- .../weakly_compressible_navier_stokes_data.h | 4 +--- .../FluidDynamicsApplication/custom_elements/fic.cpp | 2 +- .../custom_elements/fluid_element.cpp | 2 +- .../custom_elements/fluid_element.h | 2 +- .../custom_utilities/embedded_data.h | 2 +- .../custom_utilities/embedded_discontinuous_data.h | 2 +- .../custom_utilities/fluid_element_utilities.h | 2 +- .../custom_utilities/qsvms_dem_coupled_data.h | 2 +- .../custom_utilities/symbolic_stokes_data.h | 2 +- .../custom_utilities/time_integrated_fic_data.h | 2 +- .../two_fluid_navier_stokes_alpha_method_data.h | 2 +- .../custom_utilities/two_fluid_navier_stokes_data.h | 6 +++--- .../FluidDynamicsApplication/fluid_dynamics_application.h | 2 +- .../tests/cpp_tests/test_fluid_element_data.cpp | 2 +- 19 files changed, 22 insertions(+), 21 deletions(-) rename applications/FluidDynamicsApplication/{custom_utilities => custom_elements/data_containers/fic}/fic_data.h (97%) rename applications/FluidDynamicsApplication/{custom_utilities => custom_elements/data_containers}/fluid_element_data.cpp (100%) rename applications/FluidDynamicsApplication/{custom_utilities => custom_elements/data_containers}/fluid_element_data.h (98%) diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h index 75b071f8894b..b43020a70137 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h @@ -22,7 +22,7 @@ // Application includes #include "fluid_dynamics_application_variables.h" -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_utilities/fic_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h similarity index 97% rename from applications/FluidDynamicsApplication/custom_utilities/fic_data.h rename to applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h index 565c9b53bcc1..c3aae8f59b99 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/fic_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h @@ -15,7 +15,7 @@ #define KRATOS_FIC_DATA_H #include "fluid_dynamics_application_variables.h" -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_utilities/fluid_element_data.cpp b/applications/FluidDynamicsApplication/custom_elements/data_containers/fluid_element_data.cpp similarity index 100% rename from applications/FluidDynamicsApplication/custom_utilities/fluid_element_data.cpp rename to applications/FluidDynamicsApplication/custom_elements/data_containers/fluid_element_data.cpp diff --git a/applications/FluidDynamicsApplication/custom_utilities/fluid_element_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/fluid_element_data.h similarity index 98% rename from applications/FluidDynamicsApplication/custom_utilities/fluid_element_data.h rename to applications/FluidDynamicsApplication/custom_elements/data_containers/fluid_element_data.h index 7f8f968bb19e..40b7f3fc436a 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/fluid_element_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/fluid_element_data.h @@ -57,6 +57,9 @@ class KRATOS_API(FLUID_DYNAMICS_APPLICATION) FluidElementData /// Number of nodes of the element. constexpr static unsigned int NumNodes = TNumNodes; + /// Number of local unknowns (assuming velocity and pressure) + constexpr static unsigned int BlockSize = TDim + 1; + /// Size of the strain and stress vectors (in Voigt notation) for the formulation constexpr static unsigned int StrainSize = (TDim-1)*3; // 3 in 2D, 6 in 3D diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h index 359920ad12a1..f25a683ce151 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h @@ -14,7 +14,7 @@ #define KRATOS_QSVMS_DATA_H #include "fluid_dynamics_application_variables.h" -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h index ea534149d2d8..fb82a1d6965a 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h @@ -25,7 +25,7 @@ // Application includes #include "fluid_dynamics_application_variables.h" -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" namespace Kratos { @@ -49,8 +49,6 @@ using NodalVectorData = typename FluidElementData::NodalVe using ShapeFunctionsType = typename FluidElementData::ShapeFunctionsType; using MatrixRowType = typename FluidElementData::MatrixRowType; -static constexpr std::size_t BlockSize = TDim + 1; - ///@} ///@name Public Members ///@{ diff --git a/applications/FluidDynamicsApplication/custom_elements/fic.cpp b/applications/FluidDynamicsApplication/custom_elements/fic.cpp index 053c5b609e0c..45570791d4c0 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fic.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/fic.cpp @@ -15,7 +15,7 @@ #include "includes/cfd_variables.h" #include "includes/checks.h" -#include "custom_utilities/fic_data.h" +#include "custom_elements/data_containers/fic/fic_data.h" #include "custom_utilities/time_integrated_fic_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "utilities/element_size_calculator.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp index a54f611734f6..ddb3b643a288 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp @@ -18,7 +18,7 @@ #include "custom_elements/data_containers/qs_vms/qs_vms_data.h" #include "custom_utilities/time_integrated_qsvms_data.h" #include "custom_utilities/qsvms_dem_coupled_data.h" -#include "custom_utilities/fic_data.h" +#include "custom_elements/data_containers/fic/fic_data.h" #include "custom_utilities/time_integrated_fic_data.h" #include "custom_utilities/symbolic_stokes_data.h" #include "custom_utilities/two_fluid_navier_stokes_data.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/fluid_element.h b/applications/FluidDynamicsApplication/custom_elements/fluid_element.h index ebeaf5396f7d..9a3ab7e2006b 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fluid_element.h +++ b/applications/FluidDynamicsApplication/custom_elements/fluid_element.h @@ -21,7 +21,7 @@ #include "geometries/geometry.h" #include "includes/cfd_variables.h" -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "fluid_dynamics_application_variables.h" diff --git a/applications/FluidDynamicsApplication/custom_utilities/embedded_data.h b/applications/FluidDynamicsApplication/custom_utilities/embedded_data.h index b18e58785b45..ce0686536cc6 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/embedded_data.h +++ b/applications/FluidDynamicsApplication/custom_utilities/embedded_data.h @@ -14,7 +14,7 @@ #define KRATOS_EMBEDDED_DATA_H #include "fluid_dynamics_application_variables.h" -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_utilities/embedded_discontinuous_data.h b/applications/FluidDynamicsApplication/custom_utilities/embedded_discontinuous_data.h index 99f3e7f626c3..ce683468236c 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/embedded_discontinuous_data.h +++ b/applications/FluidDynamicsApplication/custom_utilities/embedded_discontinuous_data.h @@ -14,7 +14,7 @@ #define KRATOS_EMBEDDED_DISCONTINUOUS_DATA_H #include "fluid_dynamics_application_variables.h" -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_utilities/fluid_element_utilities.h b/applications/FluidDynamicsApplication/custom_utilities/fluid_element_utilities.h index 4064ed85f649..6390e73ace9b 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/fluid_element_utilities.h +++ b/applications/FluidDynamicsApplication/custom_utilities/fluid_element_utilities.h @@ -20,7 +20,7 @@ #include "includes/define.h" // Application includes -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" namespace Kratos diff --git a/applications/FluidDynamicsApplication/custom_utilities/qsvms_dem_coupled_data.h b/applications/FluidDynamicsApplication/custom_utilities/qsvms_dem_coupled_data.h index 31368e69f15e..ffe6c8662f8e 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/qsvms_dem_coupled_data.h +++ b/applications/FluidDynamicsApplication/custom_utilities/qsvms_dem_coupled_data.h @@ -24,7 +24,7 @@ // Application includes #include "fluid_dynamics_application_variables.h" -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "custom_elements/data_containers/qs_vms/qs_vms_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_utilities/symbolic_stokes_data.h b/applications/FluidDynamicsApplication/custom_utilities/symbolic_stokes_data.h index 9a872ce75a7a..55f43f64dbc7 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/symbolic_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_utilities/symbolic_stokes_data.h @@ -22,7 +22,7 @@ // Application includes #include "fluid_dynamics_application_variables.h" -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_utilities/time_integrated_fic_data.h b/applications/FluidDynamicsApplication/custom_utilities/time_integrated_fic_data.h index 9f4eb850fd8b..1575e677a9a0 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/time_integrated_fic_data.h +++ b/applications/FluidDynamicsApplication/custom_utilities/time_integrated_fic_data.h @@ -14,7 +14,7 @@ #define KRATOS_TIME_INTEGRATED_FIC_DATA_H #include "fluid_dynamics_application_variables.h" -#include "custom_utilities/fic_data.h" +#include "custom_elements/data_containers/fic/fic_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_utilities/two_fluid_navier_stokes_alpha_method_data.h b/applications/FluidDynamicsApplication/custom_utilities/two_fluid_navier_stokes_alpha_method_data.h index 23ccd912c5d2..7398cd75eb3f 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/two_fluid_navier_stokes_alpha_method_data.h +++ b/applications/FluidDynamicsApplication/custom_utilities/two_fluid_navier_stokes_alpha_method_data.h @@ -17,7 +17,7 @@ #include "includes/constitutive_law.h" #include "fluid_dynamics_application_variables.h" -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/fluid_element_utilities.h" diff --git a/applications/FluidDynamicsApplication/custom_utilities/two_fluid_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_utilities/two_fluid_navier_stokes_data.h index f99a2e922792..0d204bdc61a2 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/two_fluid_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_utilities/two_fluid_navier_stokes_data.h @@ -17,7 +17,7 @@ #include "includes/constitutive_law.h" #include "fluid_dynamics_application_variables.h" -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/fluid_element_utilities.h" @@ -128,7 +128,7 @@ void Initialize(const Element& rElement, const ProcessInfo& rProcessInfo) overri this->FillFromProcessInfo(DeltaTime,DELTA_TIME,rProcessInfo); this->FillFromProcessInfo(DynamicTau,DYNAMIC_TAU,rProcessInfo); this->FillFromProcessInfo(VolumeError,VOLUME_ERROR,rProcessInfo); - + const Vector& BDFVector = rProcessInfo[BDF_COEFFICIENTS]; bdf0 = BDFVector[0]; bdf1 = BDFVector[1]; @@ -328,7 +328,7 @@ void CalculateEffectiveViscosityAtGaussPoint() } } DynamicViscosity = dynamic_viscosity / navg; - + if (SmagorinskyConstant > 0.0) { const double strain_rate_norm = ComputeStrainNorm(); diff --git a/applications/FluidDynamicsApplication/fluid_dynamics_application.h b/applications/FluidDynamicsApplication/fluid_dynamics_application.h index f268776c85d0..68dc7d40ff2b 100644 --- a/applications/FluidDynamicsApplication/fluid_dynamics_application.h +++ b/applications/FluidDynamicsApplication/fluid_dynamics_application.h @@ -85,7 +85,7 @@ #include "custom_elements/data_containers/qs_vms/qs_vms_data.h" #include "custom_utilities/time_integrated_qsvms_data.h" #include "custom_utilities/qsvms_dem_coupled_data.h" -#include "custom_utilities/fic_data.h" +#include "custom_elements/data_containers/fic/fic_data.h" #include "custom_utilities/time_integrated_fic_data.h" #include "custom_utilities/symbolic_stokes_data.h" #include "custom_utilities/two_fluid_navier_stokes_data.h" diff --git a/applications/FluidDynamicsApplication/tests/cpp_tests/test_fluid_element_data.cpp b/applications/FluidDynamicsApplication/tests/cpp_tests/test_fluid_element_data.cpp index c055ecee6b49..b1b6439bde71 100644 --- a/applications/FluidDynamicsApplication/tests/cpp_tests/test_fluid_element_data.cpp +++ b/applications/FluidDynamicsApplication/tests/cpp_tests/test_fluid_element_data.cpp @@ -19,7 +19,7 @@ #include "includes/cfd_variables.h" // Application includes -#include "custom_utilities/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "tests/cpp_tests/fluid_dynamics_fast_suite.h" namespace Kratos { From 49308835085f02648f0ce017fb7a784e17e45303 Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Thu, 12 Dec 2024 18:56:03 +0100 Subject: [PATCH 130/142] Embedded data containers --- .../data_containers/embedded_data.h | 124 ++++++++++++++++++ .../embedded_discontinuous_data.h | 0 .../embedded_fluid_element.cpp | 2 +- .../custom_elements/embedded_fluid_element.h | 2 +- .../embedded_fluid_element_discontinuous.cpp | 2 +- .../embedded_fluid_element_discontinuous.h | 2 +- 6 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h rename applications/FluidDynamicsApplication/{custom_utilities => custom_elements/data_containers}/embedded_discontinuous_data.h (100%) diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h new file mode 100644 index 000000000000..ce0686536cc6 --- /dev/null +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h @@ -0,0 +1,124 @@ +// | / | +// ' / __| _` | __| _ \ __| +// . \ | ( | | ( |\__ ` +// _|\_\_| \__,_|\__|\___/ ____/ +// Multi-Physics +// +// License: BSD License +// Kratos default license: kratos/license.txt +// +// Main authors: Jordi Cotela +// + +#if !defined(KRATOS_EMBEDDED_DATA_H) +#define KRATOS_EMBEDDED_DATA_H + +#include "fluid_dynamics_application_variables.h" +#include "custom_elements/data_containers/fluid_element_data.h" + +namespace Kratos { + +///@addtogroup FluidDynamicsApplication +///@{ + +///@name Kratos classes +///@{ + +template< class TFluidData > +class EmbeddedData : public TFluidData +{ +public: + +///@name Type Definitions +///@{ + +using NodalScalarData = typename TFluidData::NodalScalarData; +using NodalVectorData = typename TFluidData::NodalVectorData; + +typedef GeometryData::ShapeFunctionsGradientsType ShapeFunctionsGradientsType; +typedef std::vector> InterfaceNormalsType; + +///@} +///@name Public Members +///@{ + +bool IsSlip; + +double SlipLength; +double PenaltyCoefficient; + +NodalScalarData Distance; + +Matrix PositiveSideN; +ShapeFunctionsGradientsType PositiveSideDNDX; +Vector PositiveSideWeights; + +Matrix PositiveInterfaceN; +ShapeFunctionsGradientsType PositiveInterfaceDNDX; +Vector PositiveInterfaceWeights; +InterfaceNormalsType PositiveInterfaceUnitNormals; + +std::vector< size_t > PositiveIndices; +std::vector< size_t > NegativeIndices; + +size_t NumPositiveNodes; +size_t NumNegativeNodes; + +///@} +///@name Public Operations +///@{ + +void Initialize( + const Element& rElement, + const ProcessInfo& rProcessInfo) override +{ + TFluidData::Initialize(rElement, rProcessInfo); + const Geometry& r_geometry = rElement.GetGeometry(); + this->FillFromHistoricalNodalData(Distance, DISTANCE, r_geometry); + + NumPositiveNodes = 0; + NumNegativeNodes = 0; + + IsSlip = rElement.Is(SLIP) ? true : false; +} + +/** + * @brief Fills the boundary condition data fields + * This method needs to be called in cut elements. It fills the data structure fields related to the boundary + * condition imposition (slip length for the slip formulation and penalty coefficient for both formulations). + * @param rProcessInfo + */ +void InitializeBoundaryConditionData(const ProcessInfo &rProcessInfo) +{ + if (IsSlip){ + this->FillFromProcessInfo(SlipLength, SLIP_LENGTH, rProcessInfo); + } + this->FillFromProcessInfo(PenaltyCoefficient, PENALTY_COEFFICIENT, rProcessInfo); +} + +static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) +{ + const Geometry< Node >& r_geometry = rElement.GetGeometry(); + for (unsigned int i = 0; i < TFluidData::NumNodes; i++) { + KRATOS_CHECK_VARIABLE_IN_NODAL_DATA(DISTANCE,r_geometry[i]); + } + + int out = TFluidData::Check(rElement,rProcessInfo); + return out; +} + +bool IsCut() { + return (NumPositiveNodes > 0) && (NumNegativeNodes > 0); +} + +///@} + +}; + +///@} + +///@} + +} + +#endif \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_utilities/embedded_discontinuous_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h similarity index 100% rename from applications/FluidDynamicsApplication/custom_utilities/embedded_discontinuous_data.h rename to applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp index 0b3f00616b3b..752107e6d4b6 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp @@ -4,7 +4,7 @@ #include "custom_elements/qs_vms.h" #include "custom_elements/weakly_compressible_navier_stokes.h" -#include "custom_utilities/embedded_data.h" +#include "custom_elements/data_containers/embedded_data.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/time_integrated_qsvms_data.h" #include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.h b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.h index c738e7909cf0..681a6106bd3e 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.h +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.h @@ -23,7 +23,7 @@ #include "includes/cfd_variables.h" #include "custom_elements/fluid_element.h" -#include "custom_utilities/embedded_data.h" +#include "custom_elements/data_containers/embedded_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp index e6adc5244506..69eea4660b08 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp @@ -5,7 +5,7 @@ #include "custom_elements/weakly_compressible_navier_stokes.h" #include "utilities/element_size_calculator.h" -#include "custom_utilities/embedded_discontinuous_data.h" +#include "custom_elements/data_containers/embedded_discontinuous_data.h" #include "custom_utilities/time_integrated_qsvms_data.h" #include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.h b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.h index 5f8c41f833bd..b8fa3b4d96da 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.h +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.h @@ -23,7 +23,7 @@ #include "includes/cfd_variables.h" #include "custom_elements/fluid_element.h" -#include "custom_utilities/embedded_discontinuous_data.h" +#include "custom_elements/data_containers/embedded_discontinuous_data.h" namespace Kratos { From 1c9cdc7cadb58d9c8f48769c280d260c902e0b6f Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Thu, 12 Dec 2024 19:00:55 +0100 Subject: [PATCH 131/142] QSVMS DEM coupled data --- .../custom_elements/alternative_d_vms_dem_coupled.cpp | 2 +- .../custom_elements/alternative_qs_vms_dem_coupled.cpp | 2 +- applications/FluidDynamicsApplication/custom_elements/d_vms.cpp | 2 +- .../custom_elements/d_vms_dem_coupled.cpp | 2 +- .../qs_vms_dem_coupled/qs_vms_dem_coupled_data.h} | 0 .../FluidDynamicsApplication/custom_elements/fluid_element.cpp | 2 +- .../FluidDynamicsApplication/custom_elements/qs_vms.cpp | 2 +- .../custom_elements/qs_vms_dem_coupled.cpp | 2 +- .../FluidDynamicsApplication/fluid_dynamics_application.h | 2 +- .../cpp_tests/test_alternative_qs_vms_dem_coupled_element.cpp | 2 +- 10 files changed, 9 insertions(+), 9 deletions(-) rename applications/FluidDynamicsApplication/{custom_utilities/qsvms_dem_coupled_data.h => custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h} (100%) diff --git a/applications/FluidDynamicsApplication/custom_elements/alternative_d_vms_dem_coupled.cpp b/applications/FluidDynamicsApplication/custom_elements/alternative_d_vms_dem_coupled.cpp index 5a3c11015b60..5f94018fd6fc 100644 --- a/applications/FluidDynamicsApplication/custom_elements/alternative_d_vms_dem_coupled.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/alternative_d_vms_dem_coupled.cpp @@ -18,7 +18,7 @@ // Aplication includes #include "alternative_d_vms_dem_coupled.h" -#include "custom_utilities/qsvms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "fluid_dynamics_application_variables.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/alternative_qs_vms_dem_coupled.cpp b/applications/FluidDynamicsApplication/custom_elements/alternative_qs_vms_dem_coupled.cpp index 48bbf8b2c40b..8db456af6ea6 100644 --- a/applications/FluidDynamicsApplication/custom_elements/alternative_qs_vms_dem_coupled.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/alternative_qs_vms_dem_coupled.cpp @@ -17,7 +17,7 @@ // Aplication includes #include "alternative_qs_vms_dem_coupled.h" -#include "custom_utilities/qsvms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "fluid_dynamics_application_variables.h" #include "utilities/sparse_matrix_multiplication_utility.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp b/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp index f3d603fb7d47..2e038f8e5165 100644 --- a/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp @@ -15,7 +15,7 @@ #include "includes/checks.h" #include "custom_elements/data_containers/qs_vms/qs_vms_data.h" -#include "custom_utilities/qsvms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" //#include "custom_utilities/time_integrated_qsvms_data.h" #include "custom_utilities/fluid_element_utilities.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/d_vms_dem_coupled.cpp b/applications/FluidDynamicsApplication/custom_elements/d_vms_dem_coupled.cpp index 19b1e91047a9..de1d418844b2 100644 --- a/applications/FluidDynamicsApplication/custom_elements/d_vms_dem_coupled.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/d_vms_dem_coupled.cpp @@ -18,7 +18,7 @@ // Aplication includes #include "d_vms_dem_coupled.h" -#include "custom_utilities/qsvms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "fluid_dynamics_application_variables.h" diff --git a/applications/FluidDynamicsApplication/custom_utilities/qsvms_dem_coupled_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h similarity index 100% rename from applications/FluidDynamicsApplication/custom_utilities/qsvms_dem_coupled_data.h rename to applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h diff --git a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp index ddb3b643a288..bb699405aab9 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp @@ -17,7 +17,7 @@ #include "data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h" #include "custom_elements/data_containers/qs_vms/qs_vms_data.h" #include "custom_utilities/time_integrated_qsvms_data.h" -#include "custom_utilities/qsvms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_elements/data_containers/fic/fic_data.h" #include "custom_utilities/time_integrated_fic_data.h" #include "custom_utilities/symbolic_stokes_data.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp b/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp index db27da5d2472..037d285215ae 100644 --- a/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp @@ -16,7 +16,7 @@ #include "custom_elements/data_containers/qs_vms/qs_vms_data.h" #include "custom_utilities/time_integrated_qsvms_data.h" -#include "custom_utilities/qsvms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "custom_utilities/fluid_element_time_integration_detail.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/qs_vms_dem_coupled.cpp b/applications/FluidDynamicsApplication/custom_elements/qs_vms_dem_coupled.cpp index 51431713f28c..020ef6d5f283 100644 --- a/applications/FluidDynamicsApplication/custom_elements/qs_vms_dem_coupled.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/qs_vms_dem_coupled.cpp @@ -17,7 +17,7 @@ // Aplication includes #include "qs_vms_dem_coupled.h" -#include "custom_utilities/qsvms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "fluid_dynamics_application_variables.h" diff --git a/applications/FluidDynamicsApplication/fluid_dynamics_application.h b/applications/FluidDynamicsApplication/fluid_dynamics_application.h index 68dc7d40ff2b..56011bfe4f93 100644 --- a/applications/FluidDynamicsApplication/fluid_dynamics_application.h +++ b/applications/FluidDynamicsApplication/fluid_dynamics_application.h @@ -84,7 +84,7 @@ #include "custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h" #include "custom_elements/data_containers/qs_vms/qs_vms_data.h" #include "custom_utilities/time_integrated_qsvms_data.h" -#include "custom_utilities/qsvms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_elements/data_containers/fic/fic_data.h" #include "custom_utilities/time_integrated_fic_data.h" #include "custom_utilities/symbolic_stokes_data.h" diff --git a/applications/FluidDynamicsApplication/tests/cpp_tests/test_alternative_qs_vms_dem_coupled_element.cpp b/applications/FluidDynamicsApplication/tests/cpp_tests/test_alternative_qs_vms_dem_coupled_element.cpp index b91803f583ad..67a48f24eafa 100644 --- a/applications/FluidDynamicsApplication/tests/cpp_tests/test_alternative_qs_vms_dem_coupled_element.cpp +++ b/applications/FluidDynamicsApplication/tests/cpp_tests/test_alternative_qs_vms_dem_coupled_element.cpp @@ -21,7 +21,7 @@ // Application includes #include "custom_constitutive/newtonian_2d_law.h" #include "custom_elements/alternative_qs_vms_dem_coupled.h" -#include "custom_utilities/qsvms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "tests/cpp_tests/fluid_dynamics_fast_suite.h" namespace Kratos { From 998dff591d7c1a96d12543a89ca8362c1ca5391b Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Thu, 12 Dec 2024 19:07:07 +0100 Subject: [PATCH 132/142] Time integrated elements --- .../FluidDynamicsApplication/custom_elements/d_vms.cpp | 2 +- .../time_integrated_fic}/time_integrated_fic_data.h | 0 .../time_integrated_qs_vms/time_integrated_qs_vms_data.h} | 0 .../custom_elements/embedded_fluid_element.cpp | 2 +- .../custom_elements/embedded_fluid_element_discontinuous.cpp | 2 +- applications/FluidDynamicsApplication/custom_elements/fic.cpp | 2 +- .../custom_elements/fluid_element.cpp | 4 ++-- .../FluidDynamicsApplication/custom_elements/qs_vms.cpp | 2 +- .../FluidDynamicsApplication/fluid_dynamics_application.h | 4 ++-- 9 files changed, 9 insertions(+), 9 deletions(-) rename applications/FluidDynamicsApplication/{custom_utilities => custom_elements/data_containers/time_integrated_fic}/time_integrated_fic_data.h (100%) rename applications/FluidDynamicsApplication/{custom_utilities/time_integrated_qsvms_data.h => custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h} (100%) diff --git a/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp b/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp index 2e038f8e5165..3cc6f130d8c9 100644 --- a/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp @@ -16,7 +16,7 @@ #include "custom_elements/data_containers/qs_vms/qs_vms_data.h" #include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" -//#include "custom_utilities/time_integrated_qsvms_data.h" +//#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" #include "custom_utilities/fluid_element_utilities.h" namespace Kratos diff --git a/applications/FluidDynamicsApplication/custom_utilities/time_integrated_fic_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h similarity index 100% rename from applications/FluidDynamicsApplication/custom_utilities/time_integrated_fic_data.h rename to applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h diff --git a/applications/FluidDynamicsApplication/custom_utilities/time_integrated_qsvms_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h similarity index 100% rename from applications/FluidDynamicsApplication/custom_utilities/time_integrated_qsvms_data.h rename to applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp index 752107e6d4b6..976568d111ff 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp @@ -6,7 +6,7 @@ #include "custom_elements/data_containers/embedded_data.h" #include "utilities/element_size_calculator.h" -#include "custom_utilities/time_integrated_qsvms_data.h" +#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" #include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "modified_shape_functions/triangle_2d_3_modified_shape_functions.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp index 69eea4660b08..3b15623136c4 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp @@ -6,7 +6,7 @@ #include "utilities/element_size_calculator.h" #include "custom_elements/data_containers/embedded_discontinuous_data.h" -#include "custom_utilities/time_integrated_qsvms_data.h" +#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" #include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "modified_shape_functions/triangle_2d_3_modified_shape_functions.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/fic.cpp b/applications/FluidDynamicsApplication/custom_elements/fic.cpp index 45570791d4c0..729f740e357a 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fic.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/fic.cpp @@ -16,7 +16,7 @@ #include "includes/checks.h" #include "custom_elements/data_containers/fic/fic_data.h" -#include "custom_utilities/time_integrated_fic_data.h" +#include "custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/fluid_element_time_integration_detail.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp index bb699405aab9..bcaf9b1bcd71 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp @@ -16,10 +16,10 @@ #include "data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h" #include "custom_elements/data_containers/qs_vms/qs_vms_data.h" -#include "custom_utilities/time_integrated_qsvms_data.h" +#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" #include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_elements/data_containers/fic/fic_data.h" -#include "custom_utilities/time_integrated_fic_data.h" +#include "custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h" #include "custom_utilities/symbolic_stokes_data.h" #include "custom_utilities/two_fluid_navier_stokes_data.h" #include "custom_utilities/two_fluid_navier_stokes_alpha_method_data.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp b/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp index 037d285215ae..c18ba4c6e1b9 100644 --- a/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp @@ -15,7 +15,7 @@ #include "includes/checks.h" #include "custom_elements/data_containers/qs_vms/qs_vms_data.h" -#include "custom_utilities/time_integrated_qsvms_data.h" +#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" #include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "custom_utilities/fluid_element_time_integration_detail.h" diff --git a/applications/FluidDynamicsApplication/fluid_dynamics_application.h b/applications/FluidDynamicsApplication/fluid_dynamics_application.h index 56011bfe4f93..e607473da926 100644 --- a/applications/FluidDynamicsApplication/fluid_dynamics_application.h +++ b/applications/FluidDynamicsApplication/fluid_dynamics_application.h @@ -83,10 +83,10 @@ #include "custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h" #include "custom_elements/data_containers/qs_vms/qs_vms_data.h" -#include "custom_utilities/time_integrated_qsvms_data.h" +#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" #include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_elements/data_containers/fic/fic_data.h" -#include "custom_utilities/time_integrated_fic_data.h" +#include "custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h" #include "custom_utilities/symbolic_stokes_data.h" #include "custom_utilities/two_fluid_navier_stokes_data.h" #include "custom_utilities/two_fluid_navier_stokes_alpha_method_data.h" From 81170f6da7894888d189cf01c309c7b78509afeb Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Thu, 12 Dec 2024 19:15:56 +0100 Subject: [PATCH 133/142] Remaining changes --- .../data_containers/stokes/stokes_data.h} | 0 .../two_fluid_navier_stokes_data.h | 0 ...wo_fluid_navier_stokes_alpha_method_data.h | 0 .../custom_elements/fluid_element.cpp | 6 +- .../custom_elements/symbolic_stokes.cpp | 2 +- .../two_fluid_navier_stokes.cpp | 4 +- .../two_fluid_navier_stokes_alpha_method.cpp | 2 +- .../custom_utilities/embedded_data.h | 124 ------------------ .../fluid_dynamics_application.h | 6 +- .../symbolic_stokes_cpp_template.cpp | 2 +- ...id_navier_stokes_alpha_method_template.cpp | 4 +- .../two_fluid_navier_stokes_template.cpp | 4 +- 12 files changed, 15 insertions(+), 139 deletions(-) rename applications/FluidDynamicsApplication/{custom_utilities/symbolic_stokes_data.h => custom_elements/data_containers/stokes/stokes_data.h} (100%) rename applications/FluidDynamicsApplication/{custom_utilities => custom_elements/data_containers/two_fluid_navier_stokes}/two_fluid_navier_stokes_data.h (100%) rename applications/FluidDynamicsApplication/{custom_utilities => custom_elements/data_containers/two_fluid_navier_stokes_alpha_method}/two_fluid_navier_stokes_alpha_method_data.h (100%) delete mode 100644 applications/FluidDynamicsApplication/custom_utilities/embedded_data.h diff --git a/applications/FluidDynamicsApplication/custom_utilities/symbolic_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h similarity index 100% rename from applications/FluidDynamicsApplication/custom_utilities/symbolic_stokes_data.h rename to applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h diff --git a/applications/FluidDynamicsApplication/custom_utilities/two_fluid_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h similarity index 100% rename from applications/FluidDynamicsApplication/custom_utilities/two_fluid_navier_stokes_data.h rename to applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h diff --git a/applications/FluidDynamicsApplication/custom_utilities/two_fluid_navier_stokes_alpha_method_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h similarity index 100% rename from applications/FluidDynamicsApplication/custom_utilities/two_fluid_navier_stokes_alpha_method_data.h rename to applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h diff --git a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp index bcaf9b1bcd71..66ec1334e046 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp @@ -20,9 +20,9 @@ #include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_elements/data_containers/fic/fic_data.h" #include "custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h" -#include "custom_utilities/symbolic_stokes_data.h" -#include "custom_utilities/two_fluid_navier_stokes_data.h" -#include "custom_utilities/two_fluid_navier_stokes_alpha_method_data.h" +#include "custom_elements/data_containers/stokes/stokes_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" #include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/vorticity_utilities.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/symbolic_stokes.cpp b/applications/FluidDynamicsApplication/custom_elements/symbolic_stokes.cpp index 3b5328d742c7..543c9f2bf981 100644 --- a/applications/FluidDynamicsApplication/custom_elements/symbolic_stokes.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/symbolic_stokes.cpp @@ -18,7 +18,7 @@ // Application includes #include "symbolic_stokes.h" -#include "custom_utilities/symbolic_stokes_data.h" +#include "custom_elements/data_containers/stokes/stokes_data.h" #include "custom_utilities/fluid_element_utilities.h" namespace Kratos diff --git a/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes.cpp b/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes.cpp index c2bcf1934c0b..8f0173662051 100644 --- a/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes.cpp @@ -12,8 +12,8 @@ // #include "two_fluid_navier_stokes.h" -#include "custom_utilities/two_fluid_navier_stokes_data.h" -#include "custom_utilities/two_fluid_navier_stokes_alpha_method_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes_alpha_method.cpp b/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes_alpha_method.cpp index b36cea0a6ec8..5e21ddaaeb6a 100644 --- a/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes_alpha_method.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes_alpha_method.cpp @@ -12,7 +12,7 @@ // #include "two_fluid_navier_stokes_alpha_method.h" -#include "custom_utilities/two_fluid_navier_stokes_alpha_method_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_utilities/embedded_data.h b/applications/FluidDynamicsApplication/custom_utilities/embedded_data.h deleted file mode 100644 index ce0686536cc6..000000000000 --- a/applications/FluidDynamicsApplication/custom_utilities/embedded_data.h +++ /dev/null @@ -1,124 +0,0 @@ -// | / | -// ' / __| _` | __| _ \ __| -// . \ | ( | | ( |\__ ` -// _|\_\_| \__,_|\__|\___/ ____/ -// Multi-Physics -// -// License: BSD License -// Kratos default license: kratos/license.txt -// -// Main authors: Jordi Cotela -// - -#if !defined(KRATOS_EMBEDDED_DATA_H) -#define KRATOS_EMBEDDED_DATA_H - -#include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/fluid_element_data.h" - -namespace Kratos { - -///@addtogroup FluidDynamicsApplication -///@{ - -///@name Kratos classes -///@{ - -template< class TFluidData > -class EmbeddedData : public TFluidData -{ -public: - -///@name Type Definitions -///@{ - -using NodalScalarData = typename TFluidData::NodalScalarData; -using NodalVectorData = typename TFluidData::NodalVectorData; - -typedef GeometryData::ShapeFunctionsGradientsType ShapeFunctionsGradientsType; -typedef std::vector> InterfaceNormalsType; - -///@} -///@name Public Members -///@{ - -bool IsSlip; - -double SlipLength; -double PenaltyCoefficient; - -NodalScalarData Distance; - -Matrix PositiveSideN; -ShapeFunctionsGradientsType PositiveSideDNDX; -Vector PositiveSideWeights; - -Matrix PositiveInterfaceN; -ShapeFunctionsGradientsType PositiveInterfaceDNDX; -Vector PositiveInterfaceWeights; -InterfaceNormalsType PositiveInterfaceUnitNormals; - -std::vector< size_t > PositiveIndices; -std::vector< size_t > NegativeIndices; - -size_t NumPositiveNodes; -size_t NumNegativeNodes; - -///@} -///@name Public Operations -///@{ - -void Initialize( - const Element& rElement, - const ProcessInfo& rProcessInfo) override -{ - TFluidData::Initialize(rElement, rProcessInfo); - const Geometry& r_geometry = rElement.GetGeometry(); - this->FillFromHistoricalNodalData(Distance, DISTANCE, r_geometry); - - NumPositiveNodes = 0; - NumNegativeNodes = 0; - - IsSlip = rElement.Is(SLIP) ? true : false; -} - -/** - * @brief Fills the boundary condition data fields - * This method needs to be called in cut elements. It fills the data structure fields related to the boundary - * condition imposition (slip length for the slip formulation and penalty coefficient for both formulations). - * @param rProcessInfo - */ -void InitializeBoundaryConditionData(const ProcessInfo &rProcessInfo) -{ - if (IsSlip){ - this->FillFromProcessInfo(SlipLength, SLIP_LENGTH, rProcessInfo); - } - this->FillFromProcessInfo(PenaltyCoefficient, PENALTY_COEFFICIENT, rProcessInfo); -} - -static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) -{ - const Geometry< Node >& r_geometry = rElement.GetGeometry(); - for (unsigned int i = 0; i < TFluidData::NumNodes; i++) { - KRATOS_CHECK_VARIABLE_IN_NODAL_DATA(DISTANCE,r_geometry[i]); - } - - int out = TFluidData::Check(rElement,rProcessInfo); - return out; -} - -bool IsCut() { - return (NumPositiveNodes > 0) && (NumNegativeNodes > 0); -} - -///@} - -}; - -///@} - -///@} - -} - -#endif \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/fluid_dynamics_application.h b/applications/FluidDynamicsApplication/fluid_dynamics_application.h index e607473da926..4c6a696d9a7a 100644 --- a/applications/FluidDynamicsApplication/fluid_dynamics_application.h +++ b/applications/FluidDynamicsApplication/fluid_dynamics_application.h @@ -87,9 +87,9 @@ #include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_elements/data_containers/fic/fic_data.h" #include "custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h" -#include "custom_utilities/symbolic_stokes_data.h" -#include "custom_utilities/two_fluid_navier_stokes_data.h" -#include "custom_utilities/two_fluid_navier_stokes_alpha_method_data.h" +#include "custom_elements/data_containers/stokes/stokes_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" #include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "custom_constitutive/bingham_3d_law.h" diff --git a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/symbolic_stokes_cpp_template.cpp b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/symbolic_stokes_cpp_template.cpp index e639dda48e7f..38bf0d67aa28 100644 --- a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/symbolic_stokes_cpp_template.cpp +++ b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/symbolic_stokes_cpp_template.cpp @@ -18,7 +18,7 @@ // Application includes #include "symbolic_stokes.h" -#include "custom_utilities/symbolic_stokes_data.h" +#include "custom_elements/data_containers/stokes/stokes_data.h" #include "custom_utilities/fluid_element_utilities.h" namespace Kratos diff --git a/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_alpha_method_template.cpp b/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_alpha_method_template.cpp index d70c2ebfbdc6..5b41e03ed768 100644 --- a/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_alpha_method_template.cpp +++ b/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_alpha_method_template.cpp @@ -12,7 +12,7 @@ // #include "two_fluid_navier_stokes_alpha_method.h" -#include "custom_utilities/two_fluid_navier_stokes_alpha_method_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" namespace Kratos { @@ -112,7 +112,7 @@ void TwoFluidNavierStokesAlphaMethod::Calculate( ShapeFunctionDerivativesArrayType shape_derivatives; this->CalculateGeometryData(gauss_weights, shape_functions, shape_derivatives); const unsigned int number_of_gauss_points = gauss_weights.size(); - rOutput = 0.0; + rOutput = 0.0; if (rVariable == ARTIFICIAL_DYNAMIC_VISCOSITY) { diff --git a/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_template.cpp b/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_template.cpp index dd6b07780173..76de5936d085 100644 --- a/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_template.cpp +++ b/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_template.cpp @@ -12,8 +12,8 @@ // #include "two_fluid_navier_stokes.h" -#include "custom_utilities/two_fluid_navier_stokes_data.h" -#include "custom_utilities/two_fluid_navier_stokes_alpha_method_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" namespace Kratos { From 51b3e46f653dcaf2a0fd363fa283e794abae5a36 Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Thu, 12 Dec 2024 19:35:23 +0100 Subject: [PATCH 134/142] Moving BlockSize to data container --- .../axisymmetric_navier_stokes_data.h | 2 ++ .../custom_elements/data_containers/embedded_data.h | 2 ++ .../data_containers/embedded_discontinuous_data.h | 3 +++ .../custom_elements/data_containers/fic/fic_data.h | 2 ++ .../custom_elements/data_containers/fluid_element_data.h | 3 --- .../custom_elements/data_containers/qs_vms/qs_vms_data.h | 2 ++ .../qs_vms_dem_coupled/qs_vms_dem_coupled_data.h | 3 +-- .../custom_elements/data_containers/stokes/stokes_data.h | 2 ++ .../time_integrated_fic/time_integrated_fic_data.h | 2 ++ .../time_integrated_qs_vms/time_integrated_qs_vms_data.h | 2 ++ .../two_fluid_navier_stokes/two_fluid_navier_stokes_data.h | 2 ++ .../two_fluid_navier_stokes_alpha_method_data.h | 2 ++ .../weakly_compressible_navier_stokes_data.h | 2 ++ .../FluidDynamicsApplication/custom_elements/fluid_element.h | 2 +- 14 files changed, 25 insertions(+), 6 deletions(-) diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h index b43020a70137..c6dfea60dd31 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h @@ -48,6 +48,8 @@ using NodalVectorData = typename FluidElementData::NodalVe using ShapeFunctionsType = typename FluidElementData::ShapeFunctionsType; using MatrixRowType = typename FluidElementData::MatrixRowType; +static constexpr std::size_t BlockSize = TDim + 1; + ///@} ///@name Public Members ///@{ diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h index ce0686536cc6..af38acbb796e 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h @@ -38,6 +38,8 @@ using NodalVectorData = typename TFluidData::NodalVectorData; typedef GeometryData::ShapeFunctionsGradientsType ShapeFunctionsGradientsType; typedef std::vector> InterfaceNormalsType; +static constexpr std::size_t BlockSize = TFluidData::BlockSize; + ///@} ///@name Public Members ///@{ diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h index ce683468236c..25a3fd5f5fe6 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h @@ -38,6 +38,9 @@ using NodalVectorData = typename TFluidData::NodalVectorData; typedef GeometryData::ShapeFunctionsGradientsType ShapeFunctionsGradientsType; typedef std::vector> InterfaceNormalsType; +/// Number of nodal unknowns (taken from underlying element data) +static constexpr std::size_t BlockSize = TFluidData::BlockSize; + /// Number of edges of the element (simplex elements are assumed) constexpr static std::size_t NumEdges = (TFluidData::NumNodes == 3) ? 3 : 6; diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h index c3aae8f59b99..0892057805e1 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h @@ -36,6 +36,8 @@ class FICData : public FluidElementData::NodalScalarData; using NodalVectorData = typename FluidElementData::NodalVectorData; +static constexpr std::size_t BlockSize = TDim + 1; + ///@} ///@name Public Members ///@{ diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/fluid_element_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/fluid_element_data.h index 40b7f3fc436a..7f8f968bb19e 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/fluid_element_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/fluid_element_data.h @@ -57,9 +57,6 @@ class KRATOS_API(FLUID_DYNAMICS_APPLICATION) FluidElementData /// Number of nodes of the element. constexpr static unsigned int NumNodes = TNumNodes; - /// Number of local unknowns (assuming velocity and pressure) - constexpr static unsigned int BlockSize = TDim + 1; - /// Size of the strain and stress vectors (in Voigt notation) for the formulation constexpr static unsigned int StrainSize = (TDim-1)*3; // 3 in 2D, 6 in 3D diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h index f25a683ce151..4d832cb5f982 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h @@ -36,6 +36,8 @@ class QSVMSData : public FluidElementData::NodalScalarData; using NodalVectorData = typename FluidElementData::NodalVectorData; +static constexpr std::size_t BlockSize = TDim + 1; + ///@} ///@name Public Members ///@{ diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h index ffe6c8662f8e..d5e4df4e1394 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h @@ -46,8 +46,7 @@ class QSVMSDEMCoupledData : public QSVMSData::NodalScalarData; diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h index 55f43f64dbc7..1b8a3bf4c0d7 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h @@ -46,6 +46,8 @@ using NodalVectorData = typename FluidElementData::NodalV using ShapeFunctionsType = typename FluidElementData::ShapeFunctionsType; using MatrixRowType = typename FluidElementData::MatrixRowType; +static constexpr std::size_t BlockSize = TDim + 1; + ///@} ///@name Public Members ///@{ diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h index 1575e677a9a0..14075e40d076 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h @@ -35,6 +35,8 @@ class TimeIntegratedFICData : public FICData using NodalScalarData = typename FluidElementData::NodalScalarData; using NodalVectorData = typename FluidElementData::NodalVectorData; +static constexpr std::size_t BlockSize = TDim + 1; + ///@} ///@name Public Members ///@{ diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h index 033e43476c15..f34108f6a624 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h @@ -35,6 +35,8 @@ class TimeIntegratedQSVMSData : public QSVMSData using NodalScalarData = typename FluidElementData::NodalScalarData; using NodalVectorData = typename FluidElementData::NodalVectorData; +static constexpr std::size_t BlockSize = TDim + 1; + ///@} ///@name Public Members ///@{ diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h index 0d204bdc61a2..ceaa2bc1e7a1 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h @@ -45,6 +45,8 @@ using MatrixRowType = typename FluidElementData::MatrixRo typedef Geometry GeometryType; typedef GeometryType::ShapeFunctionsGradientsType ShapeFunctionsGradientsType; +static constexpr std::size_t BlockSize = TDim + 1; + ///@} ///@name Public Members ///@{ diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h index 7398cd75eb3f..dfaf01c1eeb7 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h @@ -45,6 +45,8 @@ using MatrixRowType = typename FluidElementData::MatrixRo typedef Geometry GeometryType; typedef GeometryType::ShapeFunctionsGradientsType ShapeFunctionsGradientsType; +static constexpr std::size_t BlockSize = TDim + 1; + ///@} ///@name Public Members ///@{ diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h index fb82a1d6965a..e7a8267d7baf 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h @@ -49,6 +49,8 @@ using NodalVectorData = typename FluidElementData::NodalVe using ShapeFunctionsType = typename FluidElementData::ShapeFunctionsType; using MatrixRowType = typename FluidElementData::MatrixRowType; +static constexpr std::size_t BlockSize = TDim + 1; + ///@} ///@name Public Members ///@{ diff --git a/applications/FluidDynamicsApplication/custom_elements/fluid_element.h b/applications/FluidDynamicsApplication/custom_elements/fluid_element.h index 9a3ab7e2006b..47c941fb8151 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fluid_element.h +++ b/applications/FluidDynamicsApplication/custom_elements/fluid_element.h @@ -106,7 +106,7 @@ class FluidElement : public Element static constexpr unsigned int NumNodes = TElementData::NumNodes; - static constexpr unsigned int BlockSize = Dim + 1; + static constexpr unsigned int BlockSize = TElementData::BlockSize; static constexpr unsigned int LocalSize = NumNodes * BlockSize; From 08efdf2c1201abcd70fe8bdffa0e78621671f49e Mon Sep 17 00:00:00 2001 From: Suneth Warnakulasuriya Date: Fri, 13 Dec 2024 01:38:37 +0100 Subject: [PATCH 135/142] ad recursive methods to handle entity properties --- .../custom_utilities/optimization_utils.cpp | 103 ++++++++++++++++-- .../custom_utilities/optimization_utils.h | 8 +- 2 files changed, 100 insertions(+), 11 deletions(-) diff --git a/applications/OptimizationApplication/custom_utilities/optimization_utils.cpp b/applications/OptimizationApplication/custom_utilities/optimization_utils.cpp index 6771ff9591a1..13a0d9188d83 100644 --- a/applications/OptimizationApplication/custom_utilities/optimization_utils.cpp +++ b/applications/OptimizationApplication/custom_utilities/optimization_utils.cpp @@ -27,6 +27,57 @@ namespace Kratos { +namespace OptimizationHelperUtils { + +Properties::Pointer CloneProperties( + IndexType& rPropertiesId, + const Properties& rOriginProperties, + ModelPart& rModelPart, + const bool IsRecursive) +{ + KRATOS_TRY + + // first create the base properties + auto p_cloned_properties = rModelPart.CreateNewProperties(rPropertiesId); + // assign the base property values from the origin properties + *p_cloned_properties = rOriginProperties; + p_cloned_properties->SetId(rPropertiesId); + ++rPropertiesId; + + if (IsRecursive) { + const auto& r_origin_sub_properties_list = rOriginProperties.GetSubProperties(); + for (IndexType i_prop = 0; i_prop < r_origin_sub_properties_list.size(); ++i_prop) { + auto& p_cloned_sub_property = *((p_cloned_properties->GetSubProperties().begin() + i_prop).base()); + p_cloned_sub_property = CloneProperties( + rPropertiesId, *(r_origin_sub_properties_list.begin() + i_prop), + rModelPart, IsRecursive); + } + } + + return p_cloned_properties; + + KRATOS_CATCH(""); +} + +template +void UpdatePropertiesVariableRecursively( + Properties& rProperties, + const Variable& rVariable, + const TDataType& rValue) +{ + KRATOS_TRY + + rProperties.SetValue(rVariable, rValue); + + for (auto& r_sub_properties : rProperties.GetSubProperties()) { + UpdatePropertiesVariableRecursively(r_sub_properties, rVariable, rValue); + } + + KRATOS_CATCH(""); +} + +} // namespace OptimizationHelperUtils + template GeometryData::KratosGeometryType OptimizationUtils::GetContainerEntityGeometryType( const TContainerType& rContainer, @@ -89,7 +140,8 @@ bool OptimizationUtils::IsVariableExistsInAtLeastOneContainerProperties( template void OptimizationUtils::CreateEntitySpecificPropertiesForContainer( ModelPart& rModelPart, - TContainerType& rContainer) + TContainerType& rContainer, + const bool IsRecursive) { KRATOS_TRY @@ -101,20 +153,32 @@ void OptimizationUtils::CreateEntitySpecificPropertiesForContainer( return pProperties->Id(); }); - properties_id = std::max(element_properties_id, properties_id); + properties_id = std::max(element_properties_id, properties_id) + 1; - // creation of properties is done in serial for (auto& r_entity : rContainer) { - auto p_properties = rModelPart.CreateNewProperties(++properties_id); - const auto& element_properties = r_entity.GetProperties(); - *p_properties = element_properties; - p_properties->SetId(properties_id); - r_entity.SetProperties(p_properties); + r_entity.SetProperties(OptimizationHelperUtils::CloneProperties( + properties_id, r_entity.GetProperties(), rModelPart, IsRecursive)); } KRATOS_CATCH(""); } +template +void OptimizationUtils::UpdatePropertiesVariableWithRootValueRecursively( + TContainerType& rContainer, + const Variable& rVariable) +{ + KRATOS_TRY + + block_for_each(rContainer, [&rVariable](auto& rEntity) { + auto& r_properties = rEntity.GetProperties(); + const auto& r_root_value = r_properties[rVariable]; + OptimizationHelperUtils::UpdatePropertiesVariableRecursively(r_properties, rVariable, r_root_value); + }); + + KRATOS_CATCH(""); +} + template<> KRATOS_API(OPTIMIZATION_APPLICATION) IndexType OptimizationUtils::GetVariableDimension( const Variable& rVariable, @@ -200,11 +264,30 @@ std::vector> OptimizationUtils::GetComponentWiseModelPar } // template instantiations +#ifndef KRATOS_OPTIMIZATION_UTILS_UPDATE_PROPERTIES_VARIABLE_RECURSIVELY +#define KRATOS_OPTIMIZATION_UTILS_UPDATE_PROPERTIES_VARIABLE_RECURSIVELY(CONTAINER_TYPE) \ +template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::UpdatePropertiesVariableWithRootValueRecursively(CONTAINER_TYPE&, const Variable&); \ +template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::UpdatePropertiesVariableWithRootValueRecursively(CONTAINER_TYPE&, const Variable&); \ +template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::UpdatePropertiesVariableWithRootValueRecursively(CONTAINER_TYPE&, const Variable&); \ +template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::UpdatePropertiesVariableWithRootValueRecursively>(CONTAINER_TYPE&, const Variable>&); \ +template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::UpdatePropertiesVariableWithRootValueRecursively>(CONTAINER_TYPE&, const Variable>&); \ +template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::UpdatePropertiesVariableWithRootValueRecursively>(CONTAINER_TYPE&, const Variable>&); \ +template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::UpdatePropertiesVariableWithRootValueRecursively>(CONTAINER_TYPE&, const Variable>&); \ +template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::UpdatePropertiesVariableWithRootValueRecursively(CONTAINER_TYPE&, const Variable&); \ +template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::UpdatePropertiesVariableWithRootValueRecursively(CONTAINER_TYPE&, const Variable&); \ + +#endif + +KRATOS_OPTIMIZATION_UTILS_UPDATE_PROPERTIES_VARIABLE_RECURSIVELY(ModelPart::ConditionsContainerType); +KRATOS_OPTIMIZATION_UTILS_UPDATE_PROPERTIES_VARIABLE_RECURSIVELY(ModelPart::ElementsContainerType); + +#undef KRATOS_OPTIMIZATION_UTILS_UPDATE_PROPERTIES_VARIABLE_RECURSIVELY + template KRATOS_API(OPTIMIZATION_APPLICATION) GeometryData::KratosGeometryType OptimizationUtils::GetContainerEntityGeometryType(const ModelPart::ConditionsContainerType&, const DataCommunicator&); template KRATOS_API(OPTIMIZATION_APPLICATION) GeometryData::KratosGeometryType OptimizationUtils::GetContainerEntityGeometryType(const ModelPart::ElementsContainerType&, const DataCommunicator&); -template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::CreateEntitySpecificPropertiesForContainer(ModelPart&, ModelPart::ConditionsContainerType&); -template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::CreateEntitySpecificPropertiesForContainer(ModelPart&, ModelPart::ElementsContainerType&); +template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::CreateEntitySpecificPropertiesForContainer(ModelPart&, ModelPart::ConditionsContainerType&, const bool); +template KRATOS_API(OPTIMIZATION_APPLICATION) void OptimizationUtils::CreateEntitySpecificPropertiesForContainer(ModelPart&, ModelPart::ElementsContainerType&, const bool); template KRATOS_API(OPTIMIZATION_APPLICATION) bool OptimizationUtils::IsVariableExistsInAllContainerProperties(const ModelPart::ConditionsContainerType&, const Variable&, const DataCommunicator& rDataCommunicator); template KRATOS_API(OPTIMIZATION_APPLICATION) bool OptimizationUtils::IsVariableExistsInAllContainerProperties(const ModelPart::ElementsContainerType&, const Variable&, const DataCommunicator& rDataCommunicator); diff --git a/applications/OptimizationApplication/custom_utilities/optimization_utils.h b/applications/OptimizationApplication/custom_utilities/optimization_utils.h index ce5c0007831f..af2831a3deb7 100644 --- a/applications/OptimizationApplication/custom_utilities/optimization_utils.h +++ b/applications/OptimizationApplication/custom_utilities/optimization_utils.h @@ -84,7 +84,13 @@ class KRATOS_API(OPTIMIZATION_APPLICATION) OptimizationUtils template static void CreateEntitySpecificPropertiesForContainer( ModelPart& rModelPart, - TContainerType& rContainer); + TContainerType& rContainer, + const bool IsRecursive); + + template + static void UpdatePropertiesVariableWithRootValueRecursively( + TContainerType& rContainer, + const Variable& rVariable); template static IndexType GetVariableDimension( From 3714ebdf58aa667908afa613d372e3b31992dac0 Mon Sep 17 00:00:00 2001 From: Suneth Warnakulasuriya Date: Fri, 13 Dec 2024 01:38:45 +0100 Subject: [PATCH 136/142] expose to python --- .../custom_python/add_custom_utilities_to_python.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/applications/OptimizationApplication/custom_python/add_custom_utilities_to_python.cpp b/applications/OptimizationApplication/custom_python/add_custom_utilities_to_python.cpp index e55f7388abec..a775dcb27651 100644 --- a/applications/OptimizationApplication/custom_python/add_custom_utilities_to_python.cpp +++ b/applications/OptimizationApplication/custom_python/add_custom_utilities_to_python.cpp @@ -105,6 +105,11 @@ void CollectiveExpressionFromPythonArray( KRATOS_CATCH(""); } +void AddContainerSpecificMethods() +{ + +} + } // namespace Detail void AddCustomUtilitiesToPython(pybind11::module& m) @@ -186,8 +191,10 @@ void AddCustomUtilitiesToPython(pybind11::module& m) .def("IsVariableExistsInAtLeastOneContainerProperties", &OptimizationUtils::IsVariableExistsInAtLeastOneContainerProperties>) .def("AreAllEntitiesOfSameGeometryType", [](ModelPart::ConditionsContainerType& rContainer, const DataCommunicator& rDataCommunicator) { return OptimizationUtils::GetContainerEntityGeometryType(rContainer, rDataCommunicator) != GeometryData::KratosGeometryType::Kratos_generic_type; } ) .def("AreAllEntitiesOfSameGeometryType", [](ModelPart::ElementsContainerType& rContainer, const DataCommunicator& rDataCommunicator) { return OptimizationUtils::GetContainerEntityGeometryType(rContainer, rDataCommunicator) != GeometryData::KratosGeometryType::Kratos_generic_type; } ) - .def("CreateEntitySpecificPropertiesForContainer", &OptimizationUtils::CreateEntitySpecificPropertiesForContainer) - .def("CreateEntitySpecificPropertiesForContainer", &OptimizationUtils::CreateEntitySpecificPropertiesForContainer) + .def("CreateEntitySpecificPropertiesForContainer", &OptimizationUtils::CreateEntitySpecificPropertiesForContainer, py::arg("model_part"), py::arg("container"), py::arg("is_recursive")) + .def("CreateEntitySpecificPropertiesForContainer", &OptimizationUtils::CreateEntitySpecificPropertiesForContainer, py::arg("model_part"), py::arg("container"), py::arg("is_recursive")) + .def("UpdatePropertiesVariableWithRootValueRecursively", &OptimizationUtils::UpdatePropertiesVariableWithRootValueRecursively, py::arg("container"), py::arg("variable")) + .def("UpdatePropertiesVariableWithRootValueRecursively", &OptimizationUtils::UpdatePropertiesVariableWithRootValueRecursively, py::arg("container"), py::arg("variable")) .def("GetVariableDimension", &OptimizationUtils::GetVariableDimension) .def("GetVariableDimension", &OptimizationUtils::GetVariableDimension>) .def("SetSolutionStepVariablesList", &OptimizationUtils::SetSolutionStepVariablesList, py::arg("destination_model_part"), py::arg("origin_model_part")) From 81f723e849d392b915d27c5a7f7d490703621928 Mon Sep 17 00:00:00 2001 From: Suneth Warnakulasuriya Date: Fri, 13 Dec 2024 01:38:58 +0100 Subject: [PATCH 137/142] update controls --- .../material/material_properties_control.py | 12 +++++++--- .../controls/material/simp_control.py | 23 ++++++++++++------- .../thickness/shell_thickness_control.py | 15 ++++++++---- .../controls/material_properties_control.py | 16 +++++++++---- 4 files changed, 45 insertions(+), 21 deletions(-) diff --git a/applications/OptimizationApplication/python_scripts/controls/material/material_properties_control.py b/applications/OptimizationApplication/python_scripts/controls/material/material_properties_control.py index a18e032bb838..9603512ee186 100644 --- a/applications/OptimizationApplication/python_scripts/controls/material/material_properties_control.py +++ b/applications/OptimizationApplication/python_scripts/controls/material/material_properties_control.py @@ -29,8 +29,9 @@ def __init__(self, name: str, model: Kratos.Model, parameters: Kratos.Parameters super().__init__(name) default_settings = Kratos.Parameters("""{ - "model_part_names" : [""], - "control_variable_name": "" + "model_part_names" : [""], + "control_variable_name" : "", + "consider_recursive_property_update": false }""") parameters.ValidateAndAssignDefaults(default_settings) @@ -49,11 +50,13 @@ def __init__(self, name: str, model: Kratos.Model, parameters: Kratos.Parameters self.model_part_operation = ModelPartOperation(self.model, ModelPartOperation.OperationType.UNION, f"control_{self.GetName()}", controlled_model_part_names, False) self.model_part: Optional[Kratos.ModelPart] = None + self.consider_recursive_property_update = parameters["consider_recursive_property_update"].GetBool() + def Initialize(self) -> None: self.model_part = self.model_part_operation.GetModelPart() if not KratosOA.OptAppModelPartUtils.CheckModelPartStatus(self.model_part, "element_specific_properties_created"): - KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(self.model_part, self.model_part.Elements) + KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(self.model_part, self.model_part.Elements, self.consider_recursive_property_update) KratosOA.OptAppModelPartUtils.LogModelPartStatus(self.model_part, "element_specific_properties_created") def Check(self) -> None: @@ -102,6 +105,9 @@ def Update(self, control_field: ContainerExpressionTypes) -> bool: if Kratos.Expression.Utils.NormL2(unfiltered_control_field - control_field) > 1e-9: KratosOA.PropertiesVariableExpressionIO.Write(control_field, self.controlled_physical_variable) + + if self.consider_recursive_property_update: + KratosOA.OptimizationUtils.UpdatePropertiesVariableWithRootValueRecursively(control_field.GetContainer(), self.controlled_physical_variable) return True return False diff --git a/applications/OptimizationApplication/python_scripts/controls/material/simp_control.py b/applications/OptimizationApplication/python_scripts/controls/material/simp_control.py index a16a166f05d7..632f88ed04a5 100644 --- a/applications/OptimizationApplication/python_scripts/controls/material/simp_control.py +++ b/applications/OptimizationApplication/python_scripts/controls/material/simp_control.py @@ -65,13 +65,14 @@ def __init__(self, name: str, model: Kratos.Model, parameters: Kratos.Parameters self.optimization_problem = optimization_problem default_settings = Kratos.Parameters("""{ - "controlled_model_part_names" : [""], - "output_all_fields" : true, - "echo_level" : 0, - "density_projection_settings" : {}, - "young_modulus_projection_settings": {}, - "filter_settings" : {}, - "list_of_materials" : [ + "controlled_model_part_names" : [""], + "output_all_fields" : true, + "echo_level" : 0, + "consider_recursive_property_update": false, + "density_projection_settings" : {}, + "young_modulus_projection_settings" : {}, + "filter_settings" : {}, + "list_of_materials" : [ { "density" : 1.0, "young_modulus": 1.0 @@ -97,6 +98,8 @@ def __init__(self, name: str, model: Kratos.Model, parameters: Kratos.Parameters self.model_part_operation = ModelPartOperation(self.model, ModelPartOperation.OperationType.UNION, f"control_{self.GetName()}", controlled_model_names_parts, False) self.model_part: 'typing.Optional[Kratos.ModelPart]' = None + self.consider_recursive_property_update = parameters["consider_recursive_property_update"].GetBool() + # filtering settings self.filter = FilterFactory(self.model, self.model_part_operation.GetModelPartFullName(), Kratos.DENSITY, Kratos.Globals.DataLocation.Element, parameters["filter_settings"]) @@ -108,7 +111,7 @@ def Initialize(self) -> None: # Creating element specific properties for Youngs Modulus and Density if not KratosOA.OptAppModelPartUtils.CheckModelPartStatus(self.model_part, "element_specific_properties_created"): - KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(self.model_part, self.model_part.Elements) + KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(self.model_part, self.model_part.Elements, self.consider_recursive_property_update) KratosOA.OptAppModelPartUtils.LogModelPartStatus(self.model_part, "element_specific_properties_created") self.filter.SetComponentDataView(ComponentDataView(self, self.optimization_problem)) @@ -203,10 +206,14 @@ def _UpdateAndOutputFields(self, update: ContainerExpressionTypes) -> None: density = self.density_projection.ProjectForward(self.simp_physical_phi) KratosOA.PropertiesVariableExpressionIO.Write(density, Kratos.DENSITY) + if self.consider_recursive_property_update: + KratosOA.OptimizationUtils.UpdatePropertiesVariableWithRootValueRecursively(density.GetContainer(), Kratos.DENSITY) self.un_buffered_data.SetValue("DENSITY", density.Clone(), overwrite=True) youngs_modulus = self.young_modulus_projection.ProjectForward(self.simp_physical_phi) KratosOA.PropertiesVariableExpressionIO.Write(youngs_modulus, Kratos.YOUNG_MODULUS) + if self.consider_recursive_property_update: + KratosOA.OptimizationUtils.UpdatePropertiesVariableWithRootValueRecursively(youngs_modulus.GetContainer(), Kratos.YOUNG_MODULUS) self.un_buffered_data.SetValue("YOUNG_MODULUS", youngs_modulus.Clone(), overwrite=True) # now calculate the total sensitivities of density w.r.t. phi diff --git a/applications/OptimizationApplication/python_scripts/controls/thickness/shell_thickness_control.py b/applications/OptimizationApplication/python_scripts/controls/thickness/shell_thickness_control.py index 3719a959c54a..c20b5df3fa4f 100644 --- a/applications/OptimizationApplication/python_scripts/controls/thickness/shell_thickness_control.py +++ b/applications/OptimizationApplication/python_scripts/controls/thickness/shell_thickness_control.py @@ -36,10 +36,11 @@ def __init__(self, name: str, model: Kratos.Model, parameters: Kratos.Parameters self.optimization_problem = optimization_problem default_settings = Kratos.Parameters("""{ - "controlled_model_part_names" : [], - "filter_settings" : {}, - "output_all_fields" : false, - "physical_thicknesses" : [], + "controlled_model_part_names" : [], + "filter_settings" : {}, + "output_all_fields" : false, + "physical_thicknesses" : [], + "consider_recursive_property_update": false, "thickness_projection_settings": {} }""") @@ -59,6 +60,8 @@ def __init__(self, name: str, model: Kratos.Model, parameters: Kratos.Parameters self.thickness_projection = CreateProjection(parameters["thickness_projection_settings"], self.optimization_problem) + self.consider_recursive_property_update = parameters["consider_recursive_property_update"].GetBool() + num_phys_thick = len(self.physical_thicknesses) if num_phys_thick == 0: raise RuntimeError("The physical_thicknesses can not be empty, at least min and max should be provided.") @@ -68,7 +71,7 @@ def Initialize(self) -> None: self.model_part = self.model_part_operation.GetModelPart() if not KratosOA.OptAppModelPartUtils.CheckModelPartStatus(self.model_part, "element_specific_properties_created"): - KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(self.model_part, self.model_part.Elements) + KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(self.model_part, self.model_part.Elements, self.consider_recursive_property_update) KratosOA.OptAppModelPartUtils.LogModelPartStatus(self.model_part, "element_specific_properties_created") # initialize the filter @@ -160,6 +163,8 @@ def _UpdateAndOutputFields(self, update: ContainerExpressionTypes) -> None: projected_filtered_thickness_field = self.thickness_projection.ProjectForward(self.physical_phi_field) # now update physical field KratosOA.PropertiesVariableExpressionIO.Write(projected_filtered_thickness_field, Kratos.THICKNESS) + if self.consider_recursive_property_update: + KratosOA.OptimizationUtils.UpdatePropertiesVariableWithRootValueRecursively(projected_filtered_thickness_field.GetContainer(), Kratos.THICKNESS) # compute and stroe projection derivatives for consistent filtering of the sensitivities self.projection_derivative_field = self.thickness_projection.ForwardProjectionGradient(self.physical_phi_field) diff --git a/applications/SystemIdentificationApplication/python_scripts/controls/material_properties_control.py b/applications/SystemIdentificationApplication/python_scripts/controls/material_properties_control.py index 52163cc2da60..613f0f9eb1cb 100644 --- a/applications/SystemIdentificationApplication/python_scripts/controls/material_properties_control.py +++ b/applications/SystemIdentificationApplication/python_scripts/controls/material_properties_control.py @@ -33,10 +33,11 @@ def __init__(self, name: str, model: Kratos.Model, parameters: Kratos.Parameters super().__init__(name) default_settings = Kratos.Parameters("""{ - "control_variable_name" : "", - "control_variable_bounds": [0.0, 0.0], - "output_all_fields" : false, - "filter_settings" : {}, + "control_variable_name" : "", + "control_variable_bounds" : [0.0, 0.0], + "output_all_fields" : false, + "consider_recursive_property_update": false, + "filter_settings" : {}, "model_part_names": [ { "primal_model_part_name" : "PLEASE_PROVIDE_MODEL_PART_NAME", @@ -74,6 +75,9 @@ def __init__(self, name: str, model: Kratos.Model, parameters: Kratos.Parameters [param["adjoint_model_part_name"].GetString() for param in controlled_model_part_names], False) + self.consider_recursive_property_update = parameters["consider_recursive_property_update"].GetBool() + + # filter needs to be based on the primal model part # because, filter may keep pointers for the elements to get their center positions # for filtering. The adjoint model part may re-assign adjoint elements based on @@ -92,7 +96,7 @@ def Initialize(self) -> None: self.adjoint_model_part = self.adjoint_model_part_operation.GetModelPart() if not KratosOA.OptAppModelPartUtils.CheckModelPartStatus(self.primal_model_part, "element_specific_properties_created"): - KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(self.primal_model_part, self.primal_model_part.Elements) + KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(self.primal_model_part, self.primal_model_part.Elements, self.consider_recursive_property_update) KratosOA.OptAppModelPartUtils.LogModelPartStatus(self.primal_model_part, "element_specific_properties_created") if self.primal_model_part != self.adjoint_model_part: @@ -184,6 +188,8 @@ def _UpdateAndOutputFields(self, update: ContainerExpressionTypes) -> None: # now update physical field KratosOA.PropertiesVariableExpressionIO.Write(physical_field, self.controlled_physical_variable) + if self.consider_recursive_property_update: + KratosOA.OptimizationUtils.UpdatePropertiesVariableWithRootValueRecursively(physical_field.GetContainer(), self.controlled_physical_variable) # compute and store projection derivatives for consistent filtering of the sensitivities # this is dphi/dphysical -> physical_phi_derivative_field From 825d208544da4895957771f147e858ef01bc7536 Mon Sep 17 00:00:00 2001 From: Suneth Warnakulasuriya Date: Fri, 13 Dec 2024 01:39:10 +0100 Subject: [PATCH 138/142] update tests --- ..._linear_strain_energy_response_function.py | 2 +- .../tests/test_container_expression.py | 4 +- .../tests/test_optimization_utils.py | 102 ++++++++++++++++++ 3 files changed, 105 insertions(+), 3 deletions(-) diff --git a/applications/OptimizationApplication/tests/responses_tests/test_linear_strain_energy_response_function.py b/applications/OptimizationApplication/tests/responses_tests/test_linear_strain_energy_response_function.py index 20c21dc812b8..beaf3db34231 100644 --- a/applications/OptimizationApplication/tests/responses_tests/test_linear_strain_energy_response_function.py +++ b/applications/OptimizationApplication/tests/responses_tests/test_linear_strain_energy_response_function.py @@ -57,7 +57,7 @@ def setUpClass(cls): cls.response_function.Initialize() # now replace the properties - KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(cls.model["Structure.structure"], cls.model_part.Elements) + KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(cls.model["Structure.structure"], cls.model_part.Elements, False) cls.execution_policy_decorator.Execute() cls.ref_value = cls.response_function.CalculateValue() diff --git a/applications/OptimizationApplication/tests/test_container_expression.py b/applications/OptimizationApplication/tests/test_container_expression.py index ca5ac0b51b59..3d25dee07bda 100644 --- a/applications/OptimizationApplication/tests/test_container_expression.py +++ b/applications/OptimizationApplication/tests/test_container_expression.py @@ -27,7 +27,7 @@ def CreateEntities(cls): node.SetValue(Kratos.PRESSURE, id+3) node.SetValue(Kratos.VELOCITY, Kratos.Array3([id+3, id+4, id+5])) - KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(cls.model_part, cls.model_part.Conditions) + KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(cls.model_part, cls.model_part.Conditions, True) for condition in cls.model_part.Conditions: id = condition.Id condition.Properties[Kratos.PRESSURE] = id+400 @@ -35,7 +35,7 @@ def CreateEntities(cls): condition.SetValue(Kratos.PRESSURE, id+4) condition.SetValue(Kratos.VELOCITY, Kratos.Array3([id+5, id+6, id+7])) - KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(cls.model_part, cls.model_part.Elements) + KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(cls.model_part, cls.model_part.Elements, True) for element in cls.model_part.Elements: id = element.Id element.Properties[Kratos.PRESSURE] = id+500 diff --git a/applications/OptimizationApplication/tests/test_optimization_utils.py b/applications/OptimizationApplication/tests/test_optimization_utils.py index 10895469a524..c2951fee99ec 100644 --- a/applications/OptimizationApplication/tests/test_optimization_utils.py +++ b/applications/OptimizationApplication/tests/test_optimization_utils.py @@ -1,4 +1,5 @@ +import numpy import KratosMultiphysics as Kratos import KratosMultiphysics.OptimizationApplication as KratosOA @@ -67,5 +68,106 @@ def test_GetComponentWiseModelParts(self): self.assertEqual(values[0], [self.model.GetModelPart("test.sub_1"), self.model.GetModelPart("test.sub_2")]) self.assertEqual(values[1], [self.model.GetModelPart("test.sub_2")]) + def test_CreateEntitySpecificPropertiesForContainer(self): + model = Kratos.Model() + model_part = model.CreateModelPart("test_model_part") + + def create_properties(properties_id: int) -> Kratos.Properties: + properties: Kratos.Properties = model_part.CreateNewProperties(properties_id) + properties.SetValue(Kratos.PRESSURE, properties_id) + return properties + + properties = create_properties(1) + properties.AddSubProperties(create_properties(2)) + properties.AddSubProperties(create_properties(3)) + properties.AddSubProperties(create_properties(4)) + + properties.GetSubProperties(2).AddSubProperties(create_properties(5)) + properties.GetSubProperties(3).AddSubProperties(create_properties(6)) + properties.GetSubProperties(4).AddSubProperties(create_properties(7)) + + properties.GetSubProperties(4).GetSubProperties(7).AddSubProperties(create_properties(8)) + + for i in range(50): + model_part.CreateNewNode(i + 1, 0, 0, 0) + element: Kratos.Element = model_part.CreateNewElement("Element3D1N", i + 1, [i+1], properties) + + KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(model_part, model_part.Elements, False) + + values = numpy.arange(50, dtype=numpy.float64) + expression = Kratos.Expression.ElementExpression(model_part) + Kratos.Expression.CArrayExpressionIO.Read(expression, values) + KratosOA.PropertiesVariableExpressionIO.Write(expression, Kratos.YOUNG_MODULUS) + + for element in model_part.Elements: + self.assertEqual(element.Properties.Id, element.Id + 8) + self.assertEqual(element.Properties[Kratos.PRESSURE], 1) + self.assertEqual(element.Properties[Kratos.YOUNG_MODULUS], element.Id - 1) + + def test_CreateEntitySpecificPropertiesForContainerRecursive(self): + model = Kratos.Model() + model_part = model.CreateModelPart("test_model_part") + + def create_properties(properties_id: int) -> Kratos.Properties: + properties: Kratos.Properties = model_part.CreateNewProperties(properties_id) + properties.SetValue(Kratos.PRESSURE, properties_id) + properties.SetValue(Kratos.YOUNG_MODULUS, 10) + return properties + + properties = create_properties(1) + properties.AddSubProperties(create_properties(2)) + properties.AddSubProperties(create_properties(3)) + properties.AddSubProperties(create_properties(4)) + + properties.GetSubProperties(2).AddSubProperties(create_properties(5)) + properties.GetSubProperties(3).AddSubProperties(create_properties(6)) + properties.GetSubProperties(4).AddSubProperties(create_properties(7)) + + properties.GetSubProperties(4).GetSubProperties(7).AddSubProperties(create_properties(8)) + + for i in range(50): + model_part.CreateNewNode(i + 1, 0, 0, 0) + element: Kratos.Element = model_part.CreateNewElement("Element3D1N", i + 1, [i+1], properties) + + KratosOA.OptimizationUtils.CreateEntitySpecificPropertiesForContainer(model_part, model_part.Elements, True) + + values = numpy.arange(50, dtype=numpy.float64) + expression = Kratos.Expression.ElementExpression(model_part) + Kratos.Expression.CArrayExpressionIO.Read(expression, values) + KratosOA.PropertiesVariableExpressionIO.Write(expression, Kratos.YOUNG_MODULUS) + + def check_properties_value_recursively(properties: Kratos.Properties, value: float): + self.assertEqual(properties[Kratos.YOUNG_MODULUS], value) + for sub_properties in properties.GetSubProperties(): + check_properties_value_recursively(sub_properties, value) + + check_id = 9 + for element in model_part.Elements: + properties = element.Properties + + self.assertEqual(properties.Id, check_id) + self.assertEqual(properties[Kratos.YOUNG_MODULUS], element.Id - 1) + + sub_properties_itr = iter(properties.GetSubProperties()) + + self.assertEqual(next(sub_properties_itr).Id, check_id + 1) + self.assertEqual(next(iter(properties.GetSubProperties()[check_id + 1].GetSubProperties())).Id, check_id + 2) + check_properties_value_recursively(properties.GetSubProperties()[check_id + 1], 10) + + self.assertEqual(next(sub_properties_itr).Id, check_id + 3) + self.assertEqual(next(iter(properties.GetSubProperties()[check_id + 3].GetSubProperties())).Id, check_id + 4) + check_properties_value_recursively(properties.GetSubProperties()[check_id + 3], 10) + + self.assertEqual(next(sub_properties_itr).Id, check_id + 5) + self.assertEqual(next(iter(properties.GetSubProperties()[check_id + 5].GetSubProperties())).Id, check_id + 6) + self.assertEqual(next(iter(properties.GetSubProperties()[check_id + 5].GetSubProperties()[check_id + 6].GetSubProperties())).Id, check_id + 7) + check_properties_value_recursively(properties.GetSubProperties()[check_id + 5], 10) + + check_id += 8 + + KratosOA.OptimizationUtils.UpdatePropertiesVariableWithRootValueRecursively(model_part.Elements, Kratos.YOUNG_MODULUS) + for element in model_part.Elements: + check_properties_value_recursively(element.Properties, element.Id - 1) + if __name__ == "__main__": kratos_unittest.main() \ No newline at end of file From b0013b82d51935023dfcec2f0725efda39014a3c Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Fri, 13 Dec 2024 10:30:02 +0100 Subject: [PATCH 139/142] Reverting to 51b3e46f653dcaf2a0fd363fa283e794abae5a36 --- .../alternative_d_vms_dem_coupled.cpp | 4 ++-- .../alternative_qs_vms_dem_coupled.cpp | 2 +- .../custom_elements/d_vms.cpp | 6 +++--- .../custom_elements/d_vms_dem_coupled.cpp | 4 ++-- .../axisymmetric_navier_stokes_data.h | 4 ++-- .../data_containers/embedded_data.h | 4 ++-- .../embedded_discontinuous_data.h | 4 ++-- .../data_containers/fic/fic_data.h | 4 ++-- .../data_containers/qs_vms/qs_vms_data.h | 4 ++-- .../qs_vms_dem_coupled_data.h | 6 +++--- .../data_containers/stokes/stokes_data.h | 2 +- .../time_integrated_fic_data.h | 4 ++-- .../time_integrated_qs_vms_data.h | 4 ++-- .../two_fluid_navier_stokes_data.h | 4 ++-- ...two_fluid_navier_stokes_alpha_method_data.h | 4 ++-- .../weakly_compressible_navier_stokes_data.h | 2 +- .../custom_elements/embedded_fluid_element.cpp | 9 +++++---- .../custom_elements/embedded_fluid_element.h | 2 +- .../embedded_fluid_element_discontinuous.cpp | 7 ++++--- .../embedded_fluid_element_discontinuous.h | 2 +- .../custom_elements/fic.cpp | 4 ++-- .../custom_elements/fluid_element.cpp | 18 +++++++++--------- .../custom_elements/fluid_element.h | 4 ++-- .../custom_elements/qs_vms.cpp | 6 +++--- .../custom_elements/qs_vms_dem_coupled.cpp | 4 ++-- .../custom_elements/symbolic_stokes.cpp | 2 +- .../two_fluid_navier_stokes.cpp | 4 ++-- .../two_fluid_navier_stokes_alpha_method.cpp | 2 +- .../weakly_compressible_navier_stokes.cpp | 4 ++-- .../custom_utilities/fluid_element_utilities.h | 2 +- .../symbolic_stokes_cpp_template.cpp | 2 +- ...compressible_navier_stokes_cpp_template.cpp | 4 ++-- ...uid_navier_stokes_alpha_method_template.cpp | 2 +- .../two_fluid_navier_stokes_template.cpp | 4 ++-- 34 files changed, 73 insertions(+), 71 deletions(-) diff --git a/applications/FluidDynamicsApplication/custom_elements/alternative_d_vms_dem_coupled.cpp b/applications/FluidDynamicsApplication/custom_elements/alternative_d_vms_dem_coupled.cpp index 5f94018fd6fc..c8ee36252c8a 100644 --- a/applications/FluidDynamicsApplication/custom_elements/alternative_d_vms_dem_coupled.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/alternative_d_vms_dem_coupled.cpp @@ -18,7 +18,7 @@ // Aplication includes #include "alternative_d_vms_dem_coupled.h" -#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "fluid_dynamics_application_variables.h" @@ -1557,4 +1557,4 @@ template class AlternativeDVMSDEMCoupled< QSVMSDEMCoupledData<2,9> >; template class AlternativeDVMSDEMCoupled< QSVMSDEMCoupledData<3,8> >; template class AlternativeDVMSDEMCoupled< QSVMSDEMCoupledData<3,27> >; -} // namespace Kratos \ No newline at end of file +} // namespace Kratos diff --git a/applications/FluidDynamicsApplication/custom_elements/alternative_qs_vms_dem_coupled.cpp b/applications/FluidDynamicsApplication/custom_elements/alternative_qs_vms_dem_coupled.cpp index 8db456af6ea6..8f613ea84f27 100644 --- a/applications/FluidDynamicsApplication/custom_elements/alternative_qs_vms_dem_coupled.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/alternative_qs_vms_dem_coupled.cpp @@ -17,7 +17,7 @@ // Aplication includes #include "alternative_qs_vms_dem_coupled.h" -#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "fluid_dynamics_application_variables.h" #include "utilities/sparse_matrix_multiplication_utility.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp b/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp index 3cc6f130d8c9..d5300773ff05 100644 --- a/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp @@ -14,9 +14,9 @@ #include "includes/cfd_variables.h" #include "includes/checks.h" -#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" -#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" -//#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" +#include "data_containers/qs_vms/qs_vms_data.h" +#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +//#include "data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" #include "custom_utilities/fluid_element_utilities.h" namespace Kratos diff --git a/applications/FluidDynamicsApplication/custom_elements/d_vms_dem_coupled.cpp b/applications/FluidDynamicsApplication/custom_elements/d_vms_dem_coupled.cpp index de1d418844b2..4737ccfb84ae 100644 --- a/applications/FluidDynamicsApplication/custom_elements/d_vms_dem_coupled.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/d_vms_dem_coupled.cpp @@ -18,7 +18,7 @@ // Aplication includes #include "d_vms_dem_coupled.h" -#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "fluid_dynamics_application_variables.h" @@ -1315,4 +1315,4 @@ template class DVMSDEMCoupled< QSVMSDEMCoupledData<2,9> >; template class DVMSDEMCoupled< QSVMSDEMCoupledData<3,8> >; template class DVMSDEMCoupled< QSVMSDEMCoupledData<3,27> >; -} // namespace Kratos \ No newline at end of file +} // namespace Kratos diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h index c6dfea60dd31..966336f54747 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h @@ -22,7 +22,7 @@ // Application includes #include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/fluid_element_data.h" +#include "data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" namespace Kratos { @@ -144,4 +144,4 @@ static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) ///@} -} \ No newline at end of file +} diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h index af38acbb796e..4353209aece8 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h @@ -14,7 +14,7 @@ #define KRATOS_EMBEDDED_DATA_H #include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/fluid_element_data.h" +#include "data_containers/fluid_element_data.h" namespace Kratos { @@ -123,4 +123,4 @@ bool IsCut() { } -#endif \ No newline at end of file +#endif diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h index 25a3fd5f5fe6..353f06462862 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h @@ -14,7 +14,7 @@ #define KRATOS_EMBEDDED_DISCONTINUOUS_DATA_H #include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/fluid_element_data.h" +#include "data_containers/fluid_element_data.h" namespace Kratos { @@ -169,4 +169,4 @@ inline bool IsIncised() } -#endif \ No newline at end of file +#endif diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h index 0892057805e1..9888faea4160 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h @@ -15,7 +15,7 @@ #define KRATOS_FIC_DATA_H #include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/fluid_element_data.h" +#include "data_containers/fluid_element_data.h" namespace Kratos { @@ -102,4 +102,4 @@ static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) } -#endif \ No newline at end of file +#endif diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h index 4d832cb5f982..5d8ff91644e4 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h @@ -14,7 +14,7 @@ #define KRATOS_QSVMS_DATA_H #include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/fluid_element_data.h" +#include "data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" namespace Kratos { @@ -116,4 +116,4 @@ static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) } -#endif \ No newline at end of file +#endif diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h index d5e4df4e1394..bf8fbc17e41f 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h @@ -24,8 +24,8 @@ // Application includes #include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/fluid_element_data.h" -#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" +#include "data_containers/fluid_element_data.h" +#include "data_containers/qs_vms/qs_vms_data.h" namespace Kratos { @@ -111,4 +111,4 @@ void UpdateSecondDerivativesValues(const ShapeFunctionsSecondDerivativesType& rD } -#endif \ No newline at end of file +#endif diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h index 1b8a3bf4c0d7..b19cc4b39643 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h @@ -22,7 +22,7 @@ // Application includes #include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/fluid_element_data.h" +#include "data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h index 14075e40d076..a121944e05b7 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h @@ -14,7 +14,7 @@ #define KRATOS_TIME_INTEGRATED_FIC_DATA_H #include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/fic/fic_data.h" +#include "data_containers/fic/fic_data.h" namespace Kratos { @@ -83,4 +83,4 @@ static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) } -#endif \ No newline at end of file +#endif diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h index f34108f6a624..6ca4e0e5e377 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h @@ -14,7 +14,7 @@ #define KRATOS_TIME_INTEGRATED_QSVMS_DATA_H #include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" +#include "data_containers/qs_vms/qs_vms_data.h" namespace Kratos { @@ -83,4 +83,4 @@ static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) } -#endif \ No newline at end of file +#endif diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h index ceaa2bc1e7a1..923d85380baa 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h @@ -17,7 +17,7 @@ #include "includes/constitutive_law.h" #include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/fluid_element_data.h" +#include "data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/fluid_element_utilities.h" @@ -367,4 +367,4 @@ void ComputeDarcyTerm() } -#endif \ No newline at end of file +#endif diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h index dfaf01c1eeb7..4f8d27a7bb9f 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h @@ -17,7 +17,7 @@ #include "includes/constitutive_law.h" #include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/fluid_element_data.h" +#include "data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/fluid_element_utilities.h" @@ -376,4 +376,4 @@ void ComputeDarcyTerm() } -#endif \ No newline at end of file +#endif diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h index e7a8267d7baf..7c5f6b7457fe 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h @@ -25,7 +25,7 @@ // Application includes #include "fluid_dynamics_application_variables.h" -#include "custom_elements/data_containers/fluid_element_data.h" +#include "data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp index 976568d111ff..76822d382779 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp @@ -4,10 +4,11 @@ #include "custom_elements/qs_vms.h" #include "custom_elements/weakly_compressible_navier_stokes.h" -#include "custom_elements/data_containers/embedded_data.h" #include "utilities/element_size_calculator.h" -#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" -#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" + +#include "data_containers/embedded_data.h" +#include "data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" +#include "data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "modified_shape_functions/triangle_2d_3_modified_shape_functions.h" #include "modified_shape_functions/tetrahedra_3d_4_modified_shape_functions.h" @@ -1130,4 +1131,4 @@ template class EmbeddedFluidElement< WeaklyCompressibleNavierStokes< WeaklyCompr /////////////////////////////////////////////////////////////////////////////////////////////////// -} \ No newline at end of file +} diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.h b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.h index 681a6106bd3e..6a020367cd61 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.h +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.h @@ -23,7 +23,7 @@ #include "includes/cfd_variables.h" #include "custom_elements/fluid_element.h" -#include "custom_elements/data_containers/embedded_data.h" +#include "data_containers/embedded_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp index 3b15623136c4..fd7d64863779 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp @@ -5,9 +5,10 @@ #include "custom_elements/weakly_compressible_navier_stokes.h" #include "utilities/element_size_calculator.h" -#include "custom_elements/data_containers/embedded_discontinuous_data.h" -#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" -#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" + +#include "data_containers/embedded_discontinuous_data.h" +#include "data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" +#include "data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "modified_shape_functions/triangle_2d_3_modified_shape_functions.h" #include "modified_shape_functions/tetrahedra_3d_4_modified_shape_functions.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.h b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.h index b8fa3b4d96da..7833d167dd4c 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.h +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.h @@ -23,7 +23,7 @@ #include "includes/cfd_variables.h" #include "custom_elements/fluid_element.h" -#include "custom_elements/data_containers/embedded_discontinuous_data.h" +#include "data_containers/embedded_discontinuous_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/fic.cpp b/applications/FluidDynamicsApplication/custom_elements/fic.cpp index 729f740e357a..d515d23aa31c 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fic.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/fic.cpp @@ -15,8 +15,8 @@ #include "includes/cfd_variables.h" #include "includes/checks.h" -#include "custom_elements/data_containers/fic/fic_data.h" -#include "custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h" +#include "data_containers/fic/fic_data.h" +#include "data_containers/time_integrated_fic/time_integrated_fic_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/fluid_element_time_integration_detail.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp index 66ec1334e046..081a4edce93e 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp @@ -15,15 +15,15 @@ #include "includes/checks.h" #include "data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h" -#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" -#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" -#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" -#include "custom_elements/data_containers/fic/fic_data.h" -#include "custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h" -#include "custom_elements/data_containers/stokes/stokes_data.h" -#include "custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" -#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" -#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" +#include "data_containers/qs_vms/qs_vms_data.h" +#include "data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" +#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +#include "data_containers/fic/fic_data.h" +#include "data_containers/time_integrated_fic/time_integrated_fic_data.h" +#include "data_containers/stokes/stokes_data.h" +#include "data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" +#include "data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" +#include "data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/vorticity_utilities.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/fluid_element.h b/applications/FluidDynamicsApplication/custom_elements/fluid_element.h index 47c941fb8151..c2024aaebb63 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fluid_element.h +++ b/applications/FluidDynamicsApplication/custom_elements/fluid_element.h @@ -21,7 +21,7 @@ #include "geometries/geometry.h" #include "includes/cfd_variables.h" -#include "custom_elements/data_containers/fluid_element_data.h" +#include "data_containers/fluid_element_data.h" #include "fluid_dynamics_application_variables.h" @@ -664,4 +664,4 @@ inline std::ostream& operator <<(std::ostream& rOStream, } // namespace Kratos. -#endif // KRATOS_FLUID_ELEMENT_H \ No newline at end of file +#endif // KRATOS_FLUID_ELEMENT_H diff --git a/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp b/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp index c18ba4c6e1b9..0a471e714e24 100644 --- a/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp @@ -14,9 +14,9 @@ #include "includes/cfd_variables.h" #include "includes/checks.h" -#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" -#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" -#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +#include "data_containers/qs_vms/qs_vms_data.h" +#include "data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" +#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "custom_utilities/fluid_element_time_integration_detail.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/qs_vms_dem_coupled.cpp b/applications/FluidDynamicsApplication/custom_elements/qs_vms_dem_coupled.cpp index 020ef6d5f283..e965244980c9 100644 --- a/applications/FluidDynamicsApplication/custom_elements/qs_vms_dem_coupled.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/qs_vms_dem_coupled.cpp @@ -17,7 +17,7 @@ // Aplication includes #include "qs_vms_dem_coupled.h" -#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "fluid_dynamics_application_variables.h" @@ -1124,4 +1124,4 @@ template class QSVMSDEMCoupled< QSVMSDEMCoupledData<2,9> >; template class QSVMSDEMCoupled< QSVMSDEMCoupledData<3,8> >; template class QSVMSDEMCoupled< QSVMSDEMCoupledData<3,27> >; -} \ No newline at end of file +} diff --git a/applications/FluidDynamicsApplication/custom_elements/symbolic_stokes.cpp b/applications/FluidDynamicsApplication/custom_elements/symbolic_stokes.cpp index 543c9f2bf981..55bd4b4e3e18 100644 --- a/applications/FluidDynamicsApplication/custom_elements/symbolic_stokes.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/symbolic_stokes.cpp @@ -18,7 +18,7 @@ // Application includes #include "symbolic_stokes.h" -#include "custom_elements/data_containers/stokes/stokes_data.h" +#include "data_containers/stokes/stokes_data.h" #include "custom_utilities/fluid_element_utilities.h" namespace Kratos diff --git a/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes.cpp b/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes.cpp index 8f0173662051..e45d98d9793d 100644 --- a/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes.cpp @@ -12,8 +12,8 @@ // #include "two_fluid_navier_stokes.h" -#include "custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" -#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" +#include "data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" +#include "data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes_alpha_method.cpp b/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes_alpha_method.cpp index 5e21ddaaeb6a..96b74072c572 100644 --- a/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes_alpha_method.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes_alpha_method.cpp @@ -12,7 +12,7 @@ // #include "two_fluid_navier_stokes_alpha_method.h" -#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" +#include "data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp b/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp index e6664c4cdfb5..6e3301ddeea2 100644 --- a/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp @@ -21,7 +21,7 @@ // Application includes #include "weakly_compressible_navier_stokes.h" -#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" +#include "data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" namespace Kratos { @@ -1371,4 +1371,4 @@ void WeaklyCompressibleNavierStokes::load(Serializer& rSerializer) template class WeaklyCompressibleNavierStokes< WeaklyCompressibleNavierStokesData<2,3> >; template class WeaklyCompressibleNavierStokes< WeaklyCompressibleNavierStokesData<3,4> >; -} \ No newline at end of file +} diff --git a/applications/FluidDynamicsApplication/custom_utilities/fluid_element_utilities.h b/applications/FluidDynamicsApplication/custom_utilities/fluid_element_utilities.h index 6390e73ace9b..61649ab13ff2 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/fluid_element_utilities.h +++ b/applications/FluidDynamicsApplication/custom_utilities/fluid_element_utilities.h @@ -20,7 +20,7 @@ #include "includes/define.h" // Application includes -#include "custom_elements/data_containers/fluid_element_data.h" +#include "data_containers/fluid_element_data.h" namespace Kratos diff --git a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/symbolic_stokes_cpp_template.cpp b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/symbolic_stokes_cpp_template.cpp index 38bf0d67aa28..7300990b2c12 100644 --- a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/symbolic_stokes_cpp_template.cpp +++ b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/symbolic_stokes_cpp_template.cpp @@ -18,7 +18,7 @@ // Application includes #include "symbolic_stokes.h" -#include "custom_elements/data_containers/stokes/stokes_data.h" +#include "data_containers/stokes/stokes_data.h" #include "custom_utilities/fluid_element_utilities.h" namespace Kratos diff --git a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp index a5c19b56a5aa..5861101e5cb1 100644 --- a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp +++ b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp @@ -21,7 +21,7 @@ // Application includes #include "weakly_compressible_navier_stokes.h" -#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" +#include "data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" namespace Kratos { @@ -421,4 +421,4 @@ void WeaklyCompressibleNavierStokes::load(Serializer& rSerializer) template class WeaklyCompressibleNavierStokes< WeaklyCompressibleNavierStokesData<2,3> >; template class WeaklyCompressibleNavierStokes< WeaklyCompressibleNavierStokesData<3,4> >; -} \ No newline at end of file +} diff --git a/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_alpha_method_template.cpp b/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_alpha_method_template.cpp index 5b41e03ed768..5fda45ef6ea6 100644 --- a/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_alpha_method_template.cpp +++ b/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_alpha_method_template.cpp @@ -12,7 +12,7 @@ // #include "two_fluid_navier_stokes_alpha_method.h" -#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" +#include "data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_template.cpp b/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_template.cpp index 76de5936d085..98231cc10ab7 100644 --- a/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_template.cpp +++ b/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_template.cpp @@ -12,8 +12,8 @@ // #include "two_fluid_navier_stokes.h" -#include "custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" -#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" +#include "data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" +#include "data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" namespace Kratos { From 81b3e04eb5011d45ba901fae8587a2caf20aaee3 Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Fri, 13 Dec 2024 10:34:19 +0100 Subject: [PATCH 140/142] Revert to 51b3e46f653dcaf2a0fd363fa283e794abae5a36 --- .../alternative_d_vms_dem_coupled.cpp | 4 ++-- .../alternative_qs_vms_dem_coupled.cpp | 2 +- .../custom_elements/d_vms.cpp | 6 +++--- .../custom_elements/d_vms_dem_coupled.cpp | 4 ++-- .../axisymmetric_navier_stokes_data.h | 4 ++-- .../data_containers/embedded_data.h | 4 ++-- .../embedded_discontinuous_data.h | 4 ++-- .../data_containers/fic/fic_data.h | 4 ++-- .../data_containers/qs_vms/qs_vms_data.h | 4 ++-- .../qs_vms_dem_coupled_data.h | 6 +++--- .../data_containers/stokes/stokes_data.h | 2 +- .../time_integrated_fic_data.h | 4 ++-- .../time_integrated_qs_vms_data.h | 4 ++-- .../two_fluid_navier_stokes_data.h | 4 ++-- ...two_fluid_navier_stokes_alpha_method_data.h | 4 ++-- .../weakly_compressible_navier_stokes_data.h | 2 +- .../custom_elements/embedded_fluid_element.cpp | 9 ++++----- .../custom_elements/embedded_fluid_element.h | 2 +- .../embedded_fluid_element_discontinuous.cpp | 7 +++---- .../embedded_fluid_element_discontinuous.h | 2 +- .../custom_elements/fic.cpp | 4 ++-- .../custom_elements/fluid_element.cpp | 18 +++++++++--------- .../custom_elements/fluid_element.h | 4 ++-- .../custom_elements/qs_vms.cpp | 6 +++--- .../custom_elements/qs_vms_dem_coupled.cpp | 4 ++-- .../custom_elements/symbolic_stokes.cpp | 2 +- .../two_fluid_navier_stokes.cpp | 4 ++-- .../two_fluid_navier_stokes_alpha_method.cpp | 2 +- .../weakly_compressible_navier_stokes.cpp | 4 ++-- .../custom_utilities/fluid_element_utilities.h | 2 +- .../symbolic_stokes_cpp_template.cpp | 2 +- ...compressible_navier_stokes_cpp_template.cpp | 4 ++-- ...uid_navier_stokes_alpha_method_template.cpp | 2 +- .../two_fluid_navier_stokes_template.cpp | 4 ++-- 34 files changed, 71 insertions(+), 73 deletions(-) diff --git a/applications/FluidDynamicsApplication/custom_elements/alternative_d_vms_dem_coupled.cpp b/applications/FluidDynamicsApplication/custom_elements/alternative_d_vms_dem_coupled.cpp index c8ee36252c8a..5f94018fd6fc 100644 --- a/applications/FluidDynamicsApplication/custom_elements/alternative_d_vms_dem_coupled.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/alternative_d_vms_dem_coupled.cpp @@ -18,7 +18,7 @@ // Aplication includes #include "alternative_d_vms_dem_coupled.h" -#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "fluid_dynamics_application_variables.h" @@ -1557,4 +1557,4 @@ template class AlternativeDVMSDEMCoupled< QSVMSDEMCoupledData<2,9> >; template class AlternativeDVMSDEMCoupled< QSVMSDEMCoupledData<3,8> >; template class AlternativeDVMSDEMCoupled< QSVMSDEMCoupledData<3,27> >; -} // namespace Kratos +} // namespace Kratos \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/alternative_qs_vms_dem_coupled.cpp b/applications/FluidDynamicsApplication/custom_elements/alternative_qs_vms_dem_coupled.cpp index 8f613ea84f27..8db456af6ea6 100644 --- a/applications/FluidDynamicsApplication/custom_elements/alternative_qs_vms_dem_coupled.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/alternative_qs_vms_dem_coupled.cpp @@ -17,7 +17,7 @@ // Aplication includes #include "alternative_qs_vms_dem_coupled.h" -#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "fluid_dynamics_application_variables.h" #include "utilities/sparse_matrix_multiplication_utility.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp b/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp index d5300773ff05..3cc6f130d8c9 100644 --- a/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/d_vms.cpp @@ -14,9 +14,9 @@ #include "includes/cfd_variables.h" #include "includes/checks.h" -#include "data_containers/qs_vms/qs_vms_data.h" -#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" -//#include "data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" +#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +//#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" #include "custom_utilities/fluid_element_utilities.h" namespace Kratos diff --git a/applications/FluidDynamicsApplication/custom_elements/d_vms_dem_coupled.cpp b/applications/FluidDynamicsApplication/custom_elements/d_vms_dem_coupled.cpp index 4737ccfb84ae..de1d418844b2 100644 --- a/applications/FluidDynamicsApplication/custom_elements/d_vms_dem_coupled.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/d_vms_dem_coupled.cpp @@ -18,7 +18,7 @@ // Aplication includes #include "d_vms_dem_coupled.h" -#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "fluid_dynamics_application_variables.h" @@ -1315,4 +1315,4 @@ template class DVMSDEMCoupled< QSVMSDEMCoupledData<2,9> >; template class DVMSDEMCoupled< QSVMSDEMCoupledData<3,8> >; template class DVMSDEMCoupled< QSVMSDEMCoupledData<3,27> >; -} // namespace Kratos +} // namespace Kratos \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h index 966336f54747..c6dfea60dd31 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h @@ -22,7 +22,7 @@ // Application includes #include "fluid_dynamics_application_variables.h" -#include "data_containers/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" namespace Kratos { @@ -144,4 +144,4 @@ static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) ///@} -} +} \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h index 4353209aece8..af38acbb796e 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_data.h @@ -14,7 +14,7 @@ #define KRATOS_EMBEDDED_DATA_H #include "fluid_dynamics_application_variables.h" -#include "data_containers/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" namespace Kratos { @@ -123,4 +123,4 @@ bool IsCut() { } -#endif +#endif \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h index 353f06462862..25a3fd5f5fe6 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/embedded_discontinuous_data.h @@ -14,7 +14,7 @@ #define KRATOS_EMBEDDED_DISCONTINUOUS_DATA_H #include "fluid_dynamics_application_variables.h" -#include "data_containers/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" namespace Kratos { @@ -169,4 +169,4 @@ inline bool IsIncised() } -#endif +#endif \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h index 9888faea4160..0892057805e1 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/fic/fic_data.h @@ -15,7 +15,7 @@ #define KRATOS_FIC_DATA_H #include "fluid_dynamics_application_variables.h" -#include "data_containers/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" namespace Kratos { @@ -102,4 +102,4 @@ static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) } -#endif +#endif \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h index 5d8ff91644e4..4d832cb5f982 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms/qs_vms_data.h @@ -14,7 +14,7 @@ #define KRATOS_QSVMS_DATA_H #include "fluid_dynamics_application_variables.h" -#include "data_containers/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" namespace Kratos { @@ -116,4 +116,4 @@ static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) } -#endif +#endif \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h index bf8fbc17e41f..d5e4df4e1394 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h @@ -24,8 +24,8 @@ // Application includes #include "fluid_dynamics_application_variables.h" -#include "data_containers/fluid_element_data.h" -#include "data_containers/qs_vms/qs_vms_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" +#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" namespace Kratos { @@ -111,4 +111,4 @@ void UpdateSecondDerivativesValues(const ShapeFunctionsSecondDerivativesType& rD } -#endif +#endif \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h index b19cc4b39643..1b8a3bf4c0d7 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/stokes/stokes_data.h @@ -22,7 +22,7 @@ // Application includes #include "fluid_dynamics_application_variables.h" -#include "data_containers/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h index a121944e05b7..14075e40d076 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h @@ -14,7 +14,7 @@ #define KRATOS_TIME_INTEGRATED_FIC_DATA_H #include "fluid_dynamics_application_variables.h" -#include "data_containers/fic/fic_data.h" +#include "custom_elements/data_containers/fic/fic_data.h" namespace Kratos { @@ -83,4 +83,4 @@ static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) } -#endif +#endif \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h index 6ca4e0e5e377..f34108f6a624 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h @@ -14,7 +14,7 @@ #define KRATOS_TIME_INTEGRATED_QSVMS_DATA_H #include "fluid_dynamics_application_variables.h" -#include "data_containers/qs_vms/qs_vms_data.h" +#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" namespace Kratos { @@ -83,4 +83,4 @@ static int Check(const Element& rElement, const ProcessInfo& rProcessInfo) } -#endif +#endif \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h index 923d85380baa..ceaa2bc1e7a1 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h @@ -17,7 +17,7 @@ #include "includes/constitutive_law.h" #include "fluid_dynamics_application_variables.h" -#include "data_containers/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/fluid_element_utilities.h" @@ -367,4 +367,4 @@ void ComputeDarcyTerm() } -#endif +#endif \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h index 4f8d27a7bb9f..dfaf01c1eeb7 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h @@ -17,7 +17,7 @@ #include "includes/constitutive_law.h" #include "fluid_dynamics_application_variables.h" -#include "data_containers/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/fluid_element_utilities.h" @@ -376,4 +376,4 @@ void ComputeDarcyTerm() } -#endif +#endif \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h b/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h index 7c5f6b7457fe..e7a8267d7baf 100644 --- a/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h +++ b/applications/FluidDynamicsApplication/custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h @@ -25,7 +25,7 @@ // Application includes #include "fluid_dynamics_application_variables.h" -#include "data_containers/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "utilities/element_size_calculator.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp index 76822d382779..976568d111ff 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.cpp @@ -4,11 +4,10 @@ #include "custom_elements/qs_vms.h" #include "custom_elements/weakly_compressible_navier_stokes.h" +#include "custom_elements/data_containers/embedded_data.h" #include "utilities/element_size_calculator.h" - -#include "data_containers/embedded_data.h" -#include "data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" -#include "data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" +#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" +#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "modified_shape_functions/triangle_2d_3_modified_shape_functions.h" #include "modified_shape_functions/tetrahedra_3d_4_modified_shape_functions.h" @@ -1131,4 +1130,4 @@ template class EmbeddedFluidElement< WeaklyCompressibleNavierStokes< WeaklyCompr /////////////////////////////////////////////////////////////////////////////////////////////////// -} +} \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.h b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.h index 6a020367cd61..681a6106bd3e 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.h +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element.h @@ -23,7 +23,7 @@ #include "includes/cfd_variables.h" #include "custom_elements/fluid_element.h" -#include "data_containers/embedded_data.h" +#include "custom_elements/data_containers/embedded_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp index fd7d64863779..3b15623136c4 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.cpp @@ -5,10 +5,9 @@ #include "custom_elements/weakly_compressible_navier_stokes.h" #include "utilities/element_size_calculator.h" - -#include "data_containers/embedded_discontinuous_data.h" -#include "data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" -#include "data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" +#include "custom_elements/data_containers/embedded_discontinuous_data.h" +#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" +#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "modified_shape_functions/triangle_2d_3_modified_shape_functions.h" #include "modified_shape_functions/tetrahedra_3d_4_modified_shape_functions.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.h b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.h index 7833d167dd4c..b8fa3b4d96da 100644 --- a/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.h +++ b/applications/FluidDynamicsApplication/custom_elements/embedded_fluid_element_discontinuous.h @@ -23,7 +23,7 @@ #include "includes/cfd_variables.h" #include "custom_elements/fluid_element.h" -#include "data_containers/embedded_discontinuous_data.h" +#include "custom_elements/data_containers/embedded_discontinuous_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/fic.cpp b/applications/FluidDynamicsApplication/custom_elements/fic.cpp index d515d23aa31c..729f740e357a 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fic.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/fic.cpp @@ -15,8 +15,8 @@ #include "includes/cfd_variables.h" #include "includes/checks.h" -#include "data_containers/fic/fic_data.h" -#include "data_containers/time_integrated_fic/time_integrated_fic_data.h" +#include "custom_elements/data_containers/fic/fic_data.h" +#include "custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/fluid_element_time_integration_detail.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp index 081a4edce93e..66ec1334e046 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/fluid_element.cpp @@ -15,15 +15,15 @@ #include "includes/checks.h" #include "data_containers/axisymmetric_navier_stokes/axisymmetric_navier_stokes_data.h" -#include "data_containers/qs_vms/qs_vms_data.h" -#include "data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" -#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" -#include "data_containers/fic/fic_data.h" -#include "data_containers/time_integrated_fic/time_integrated_fic_data.h" -#include "data_containers/stokes/stokes_data.h" -#include "data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" -#include "data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" -#include "data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" +#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" +#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +#include "custom_elements/data_containers/fic/fic_data.h" +#include "custom_elements/data_containers/time_integrated_fic/time_integrated_fic_data.h" +#include "custom_elements/data_containers/stokes/stokes_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" +#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" #include "utilities/element_size_calculator.h" #include "custom_utilities/vorticity_utilities.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/fluid_element.h b/applications/FluidDynamicsApplication/custom_elements/fluid_element.h index c2024aaebb63..47c941fb8151 100644 --- a/applications/FluidDynamicsApplication/custom_elements/fluid_element.h +++ b/applications/FluidDynamicsApplication/custom_elements/fluid_element.h @@ -21,7 +21,7 @@ #include "geometries/geometry.h" #include "includes/cfd_variables.h" -#include "data_containers/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" #include "fluid_dynamics_application_variables.h" @@ -664,4 +664,4 @@ inline std::ostream& operator <<(std::ostream& rOStream, } // namespace Kratos. -#endif // KRATOS_FLUID_ELEMENT_H +#endif // KRATOS_FLUID_ELEMENT_H \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp b/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp index 0a471e714e24..c18ba4c6e1b9 100644 --- a/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/qs_vms.cpp @@ -14,9 +14,9 @@ #include "includes/cfd_variables.h" #include "includes/checks.h" -#include "data_containers/qs_vms/qs_vms_data.h" -#include "data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" -#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms/qs_vms_data.h" +#include "custom_elements/data_containers/time_integrated_qs_vms/time_integrated_qs_vms_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "custom_utilities/fluid_element_time_integration_detail.h" diff --git a/applications/FluidDynamicsApplication/custom_elements/qs_vms_dem_coupled.cpp b/applications/FluidDynamicsApplication/custom_elements/qs_vms_dem_coupled.cpp index e965244980c9..020ef6d5f283 100644 --- a/applications/FluidDynamicsApplication/custom_elements/qs_vms_dem_coupled.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/qs_vms_dem_coupled.cpp @@ -17,7 +17,7 @@ // Aplication includes #include "qs_vms_dem_coupled.h" -#include "data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" +#include "custom_elements/data_containers/qs_vms_dem_coupled/qs_vms_dem_coupled_data.h" #include "custom_utilities/fluid_element_utilities.h" #include "fluid_dynamics_application_variables.h" @@ -1124,4 +1124,4 @@ template class QSVMSDEMCoupled< QSVMSDEMCoupledData<2,9> >; template class QSVMSDEMCoupled< QSVMSDEMCoupledData<3,8> >; template class QSVMSDEMCoupled< QSVMSDEMCoupledData<3,27> >; -} +} \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_elements/symbolic_stokes.cpp b/applications/FluidDynamicsApplication/custom_elements/symbolic_stokes.cpp index 55bd4b4e3e18..543c9f2bf981 100644 --- a/applications/FluidDynamicsApplication/custom_elements/symbolic_stokes.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/symbolic_stokes.cpp @@ -18,7 +18,7 @@ // Application includes #include "symbolic_stokes.h" -#include "data_containers/stokes/stokes_data.h" +#include "custom_elements/data_containers/stokes/stokes_data.h" #include "custom_utilities/fluid_element_utilities.h" namespace Kratos diff --git a/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes.cpp b/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes.cpp index e45d98d9793d..8f0173662051 100644 --- a/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes.cpp @@ -12,8 +12,8 @@ // #include "two_fluid_navier_stokes.h" -#include "data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" -#include "data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes_alpha_method.cpp b/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes_alpha_method.cpp index 96b74072c572..5e21ddaaeb6a 100644 --- a/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes_alpha_method.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/two_fluid_navier_stokes_alpha_method.cpp @@ -12,7 +12,7 @@ // #include "two_fluid_navier_stokes_alpha_method.h" -#include "data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp b/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp index 6e3301ddeea2..e6664c4cdfb5 100644 --- a/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp +++ b/applications/FluidDynamicsApplication/custom_elements/weakly_compressible_navier_stokes.cpp @@ -21,7 +21,7 @@ // Application includes #include "weakly_compressible_navier_stokes.h" -#include "data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" +#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" namespace Kratos { @@ -1371,4 +1371,4 @@ void WeaklyCompressibleNavierStokes::load(Serializer& rSerializer) template class WeaklyCompressibleNavierStokes< WeaklyCompressibleNavierStokesData<2,3> >; template class WeaklyCompressibleNavierStokes< WeaklyCompressibleNavierStokesData<3,4> >; -} +} \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/custom_utilities/fluid_element_utilities.h b/applications/FluidDynamicsApplication/custom_utilities/fluid_element_utilities.h index 61649ab13ff2..6390e73ace9b 100644 --- a/applications/FluidDynamicsApplication/custom_utilities/fluid_element_utilities.h +++ b/applications/FluidDynamicsApplication/custom_utilities/fluid_element_utilities.h @@ -20,7 +20,7 @@ #include "includes/define.h" // Application includes -#include "data_containers/fluid_element_data.h" +#include "custom_elements/data_containers/fluid_element_data.h" namespace Kratos diff --git a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/symbolic_stokes_cpp_template.cpp b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/symbolic_stokes_cpp_template.cpp index 7300990b2c12..38bf0d67aa28 100644 --- a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/symbolic_stokes_cpp_template.cpp +++ b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/symbolic_stokes_cpp_template.cpp @@ -18,7 +18,7 @@ // Application includes #include "symbolic_stokes.h" -#include "data_containers/stokes/stokes_data.h" +#include "custom_elements/data_containers/stokes/stokes_data.h" #include "custom_utilities/fluid_element_utilities.h" namespace Kratos diff --git a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp index 5861101e5cb1..a5c19b56a5aa 100644 --- a/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp +++ b/applications/FluidDynamicsApplication/python_scripts/symbolic_generation/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_cpp_template.cpp @@ -21,7 +21,7 @@ // Application includes #include "weakly_compressible_navier_stokes.h" -#include "data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" +#include "custom_elements/data_containers/weakly_compressible_navier_stokes/weakly_compressible_navier_stokes_data.h" namespace Kratos { @@ -421,4 +421,4 @@ void WeaklyCompressibleNavierStokes::load(Serializer& rSerializer) template class WeaklyCompressibleNavierStokes< WeaklyCompressibleNavierStokesData<2,3> >; template class WeaklyCompressibleNavierStokes< WeaklyCompressibleNavierStokesData<3,4> >; -} +} \ No newline at end of file diff --git a/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_alpha_method_template.cpp b/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_alpha_method_template.cpp index 5fda45ef6ea6..5b41e03ed768 100644 --- a/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_alpha_method_template.cpp +++ b/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_alpha_method_template.cpp @@ -12,7 +12,7 @@ // #include "two_fluid_navier_stokes_alpha_method.h" -#include "data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" namespace Kratos { diff --git a/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_template.cpp b/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_template.cpp index 98231cc10ab7..76de5936d085 100644 --- a/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_template.cpp +++ b/applications/FluidDynamicsApplication/symbolic_generation/two_fluid_navier_stokes/two_fluid_navier_stokes_template.cpp @@ -12,8 +12,8 @@ // #include "two_fluid_navier_stokes.h" -#include "data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" -#include "data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes/two_fluid_navier_stokes_data.h" +#include "custom_elements/data_containers/two_fluid_navier_stokes_alpha_method/two_fluid_navier_stokes_alpha_method_data.h" namespace Kratos { From 59585525a19a967df07faaa001132f17452a2417 Mon Sep 17 00:00:00 2001 From: markelov208 <146726001+markelov208@users.noreply.github.com> Date: Fri, 13 Dec 2024 11:44:19 +0100 Subject: [PATCH 141/142] [StructuralMechanicsApplication] Add PK2_STRESS_VECTOR in LinearTrussElement2D (#12915) * added CalculateOnIntegrationPoints for PK2_STRESS_VECTOR * added unit test for LinearTrussElement2D_PK2 * used correct name LinearTrussElement2D2N * used Kratos style * fixed typo * added InitializeConstitutiveLawValues * added CreateTrussModel2N_and_CheckPK2Stress * removed unused definition --- .../truss_elements/linear_truss_element.cpp | 90 ++++++++++++------- .../truss_elements/linear_truss_element.h | 13 ++- .../tests/cpp_tests/test_truss.cpp | 85 ++++++++++-------- 3 files changed, 121 insertions(+), 67 deletions(-) diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp index ad1d60cd5257..8f8a194cde68 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.cpp @@ -730,28 +730,17 @@ void LinearTrussElement::CalculateOnIntegrationPoints( rOutput.resize(integration_points.size()); if (rVariable == AXIAL_FORCE) { - const auto &r_props = GetProperties(); - const auto &r_geometry = GetGeometry(); - const double area = r_props[CROSS_AREA]; - - ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); - auto &r_cl_options = cl_values.GetOptions(); - r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); - r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); - - const double length = CalculateLength(); - - // Let's initialize the cl values + ConstitutiveLaw::Parameters cl_values(GetGeometry(), GetProperties(), rProcessInfo); VectorType strain_vector(1), stress_vector(1); MatrixType C(1,1); - strain_vector.clear(); - cl_values.SetStrainVector(strain_vector); - cl_values.SetStressVector(stress_vector); - cl_values.SetConstitutiveMatrix(C); + InitializeConstitutiveLawValues(cl_values, strain_vector, stress_vector, C); + + const double length = CalculateLength(); SystemSizeBoundedArrayType nodal_values(SystemSize); GetNodalValuesVector(nodal_values); SystemSizeBoundedArrayType B; + const double area = GetProperties()[CROSS_AREA]; // Loop over the integration points for (SizeType IP = 0; IP < integration_points.size(); ++IP) { @@ -764,23 +753,12 @@ void LinearTrussElement::CalculateOnIntegrationPoints( rOutput[IP] = cl_values.GetStressVector()[0] * area; } } else if (rVariable == AXIAL_STRAIN) { - const auto &r_props = GetProperties(); - const auto &r_geometry = GetGeometry(); - - ConstitutiveLaw::Parameters cl_values(r_geometry, r_props, rProcessInfo); - auto &r_cl_options = cl_values.GetOptions(); - r_cl_options.Set(ConstitutiveLaw::COMPUTE_STRESS , true); - r_cl_options.Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, true); - - const double length = CalculateLength(); - - // Let's initialize the cl values + ConstitutiveLaw::Parameters cl_values(GetGeometry(), GetProperties(), rProcessInfo); VectorType strain_vector(1), stress_vector(1); MatrixType C(1,1); - strain_vector.clear(); - cl_values.SetStrainVector(strain_vector); - cl_values.SetStressVector(stress_vector); - cl_values.SetConstitutiveMatrix(C); + InitializeConstitutiveLawValues(cl_values, strain_vector, stress_vector, C); + + const double length = CalculateLength(); SystemSizeBoundedArrayType nodal_values(SystemSize); GetNodalValuesVector(nodal_values); @@ -795,6 +773,56 @@ void LinearTrussElement::CalculateOnIntegrationPoints( } } +template +void LinearTrussElement::InitializeConstitutiveLawValues(ConstitutiveLaw::Parameters& rValues, + VectorType& rStrainVector, VectorType& rStressVector, MatrixType rConstitutiveMatrix) +{ + rValues.GetOptions().Set(ConstitutiveLaw::COMPUTE_STRESS , true); + rValues.GetOptions().Set(ConstitutiveLaw::COMPUTE_CONSTITUTIVE_TENSOR, false); + + rStrainVector.clear(); + rValues.SetStrainVector(rStrainVector); + rValues.SetStressVector(rStressVector); + rValues.SetConstitutiveMatrix(rConstitutiveMatrix); +} + +/***********************************************************************************/ +/***********************************************************************************/ + +template +void LinearTrussElement::CalculateOnIntegrationPoints( + const Variable& rVariable, + std::vector& rOutput, + const ProcessInfo& rProcessInfo + ) +{ + const auto& integration_points = IntegrationPoints(GetIntegrationMethod()); + rOutput.resize(integration_points.size()); + + if (rVariable == PK2_STRESS_VECTOR) { + ConstitutiveLaw::Parameters cl_values(GetGeometry(), GetProperties(), rProcessInfo); + VectorType strain_vector(1), stress_vector(1); + MatrixType constitutive_matrix(1,1); + InitializeConstitutiveLawValues(cl_values, strain_vector, stress_vector, constitutive_matrix); + + const double length = CalculateLength(); + SystemSizeBoundedArrayType nodal_values(SystemSize); + GetNodalValuesVector(nodal_values); + + SystemSizeBoundedArrayType dN_dX; + + for (SizeType integration_point = 0; integration_point < integration_points.size(); ++integration_point) { + GetFirstDerivativesShapeFunctionsValues(dN_dX, length, integration_points[integration_point].X()); + strain_vector[0] = inner_prod(dN_dX, nodal_values); + mConstitutiveLawVector[integration_point]->CalculateMaterialResponsePK2(cl_values); + auto stress = cl_values.GetStressVector()[0]; + if (GetProperties().Has(TRUSS_PRESTRESS_PK2)) { + stress += GetProperties()[TRUSS_PRESTRESS_PK2]; + } + rOutput[integration_point] = ScalarVector(1, stress); + } + } +} /***********************************************************************************/ /***********************************************************************************/ diff --git a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h index a64549ee2ad1..a637edc2617f 100644 --- a/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h +++ b/applications/StructuralMechanicsApplication/custom_elements/truss_elements/linear_truss_element.h @@ -346,6 +346,16 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement ) override; /** + * @brief Calculate a Vector Variable on the Element Constitutive Law + * @param rVariable The variable we want to get + * @param rOutput The values obtained in the integration points + * @param rCurrentProcessInfo the current process info instance + */ + void CalculateOnIntegrationPoints( + const Variable& rVariable, std::vector& rOutput, + const ProcessInfo& rCurrentProcessInfo) override; + + /** * @brief Get on rVariable Constitutive Law from the element * @param rVariable The variable we want to get * @param rValues The results in the integration points @@ -467,7 +477,8 @@ class KRATOS_API(STRUCTURAL_MECHANICS_APPLICATION) LinearTrussElement ///@} ///@name Private Operations ///@{ - + void InitializeConstitutiveLawValues(ConstitutiveLaw::Parameters& rValues, + VectorType& rStrainVector, VectorType& rStressVector, MatrixType rConstitutiveMatrix); ///@} ///@name Private Access diff --git a/applications/StructuralMechanicsApplication/tests/cpp_tests/test_truss.cpp b/applications/StructuralMechanicsApplication/tests/cpp_tests/test_truss.cpp index f91a11823d23..75c18de5afd7 100644 --- a/applications/StructuralMechanicsApplication/tests/cpp_tests/test_truss.cpp +++ b/applications/StructuralMechanicsApplication/tests/cpp_tests/test_truss.cpp @@ -111,6 +111,47 @@ namespace Kratos::Testing } } +void CreateTrussModel2N_and_CheckPK2Stress(std::string TrussElementName) + { + Model current_model; + auto &r_model_part = current_model.CreateModelPart("ModelPart",1); + r_model_part.GetProcessInfo().SetValue(DOMAIN_SIZE, 3); + r_model_part.AddNodalSolutionStepVariable(DISPLACEMENT); + + // Set the element properties + auto p_elem_prop = r_model_part.CreateNewProperties(0); + constexpr auto youngs_modulus = 2.0e+06; + p_elem_prop->SetValue(YOUNG_MODULUS, youngs_modulus); + const auto &r_clone_cl = KratosComponents::Get("TrussConstitutiveLaw"); + p_elem_prop->SetValue(CONSTITUTIVE_LAW, r_clone_cl.Clone()); + + // Create the test element + constexpr double directional_length = 2.0; + auto p_node_1 = r_model_part.CreateNewNode(1, 0.0, 0.0, 0.0); + auto p_node_2 = r_model_part.CreateNewNode(2, directional_length, directional_length, directional_length); + + AddDisplacementDofsElement(r_model_part); + + std::vector element_nodes {1,2}; + auto p_element = r_model_part.CreateNewElement(std::move(TrussElementName), 1, element_nodes, p_elem_prop); + const auto& r_process_info = r_model_part.GetProcessInfo(); + p_element->Initialize(r_process_info); // Initialize the element to initialize the constitutive law + + constexpr auto induced_strain = 0.1; + p_element->GetGeometry()[1].FastGetSolutionStepValue(DISPLACEMENT) += ScalarVector(3, induced_strain * directional_length); + + std::vector stress_vector; + p_element->CalculateOnIntegrationPoints(PK2_STRESS_VECTOR, stress_vector, r_process_info); + + constexpr auto expected_stress = induced_strain * youngs_modulus; + KRATOS_EXPECT_DOUBLE_EQ(expected_stress, stress_vector[0][0]); + + constexpr auto pre_stress = 1.0e5; + p_element->GetProperties().SetValue(TRUSS_PRESTRESS_PK2, pre_stress); + p_element->CalculateOnIntegrationPoints(PK2_STRESS_VECTOR, stress_vector, r_process_info); + KRATOS_EXPECT_DOUBLE_EQ(expected_stress + pre_stress, stress_vector[0][0]); + } + // Tests the mass matrix of the TrussElement3D2N KRATOS_TEST_CASE_IN_SUITE(TrussElement3D2NMassMatrix, KratosStructuralMechanicsFastSuite) { @@ -346,42 +387,16 @@ namespace Kratos::Testing KRATOS_TEST_CASE_IN_SUITE(TrussElementLinear3D2N_CalculatesPK2Stress, KratosStructuralMechanicsFastSuite) { - Model current_model; - auto &r_model_part = current_model.CreateModelPart("ModelPart",1); - r_model_part.GetProcessInfo().SetValue(DOMAIN_SIZE, 3); - r_model_part.AddNodalSolutionStepVariable(DISPLACEMENT); - - // Set the element properties - auto p_elem_prop = r_model_part.CreateNewProperties(0); - constexpr auto youngs_modulus = 2.0e+06; - p_elem_prop->SetValue(YOUNG_MODULUS, youngs_modulus); - const auto &r_clone_cl = KratosComponents::Get("TrussConstitutiveLaw"); - p_elem_prop->SetValue(CONSTITUTIVE_LAW, r_clone_cl.Clone()); - - // Create the test element - constexpr double directional_length = 2.0; - auto p_node_1 = r_model_part.CreateNewNode(1, 0.0, 0.0, 0.0); - auto p_node_2 = r_model_part.CreateNewNode(2, directional_length, directional_length, directional_length); - - AddDisplacementDofsElement(r_model_part); - - std::vector element_nodes {1,2}; - auto p_element = r_model_part.CreateNewElement("TrussLinearElement3D2N", 1, element_nodes, p_elem_prop); - const auto& r_process_info = r_model_part.GetProcessInfo(); - p_element->Initialize(r_process_info); // Initialize the element to initialize the constitutive law - - constexpr auto induced_strain = 0.1; - p_element->GetGeometry()[1].FastGetSolutionStepValue(DISPLACEMENT) += ScalarVector(3, induced_strain * directional_length); - - std::vector stress_vector; - p_element->CalculateOnIntegrationPoints(PK2_STRESS_VECTOR, stress_vector, r_process_info); + CreateTrussModel2N_and_CheckPK2Stress("TrussLinearElement3D2N"); + } - constexpr auto expected_stress = induced_strain * youngs_modulus; - KRATOS_EXPECT_DOUBLE_EQ(expected_stress, stress_vector[0][0]); + KRATOS_TEST_CASE_IN_SUITE(LinearTrussElement2D2N_CalculatesPK2Stress, KratosStructuralMechanicsFastSuite) + { + CreateTrussModel2N_and_CheckPK2Stress("LinearTrussElement2D2N"); + } - constexpr auto pre_stress = 1.0e5; - p_element->GetProperties().SetValue(TRUSS_PRESTRESS_PK2, pre_stress); - p_element->CalculateOnIntegrationPoints(PK2_STRESS_VECTOR, stress_vector, r_process_info); - KRATOS_EXPECT_DOUBLE_EQ(expected_stress + pre_stress, stress_vector[0][0]); + KRATOS_TEST_CASE_IN_SUITE(LinearTrussElement3D2N_CalculatesPK2Stress, KratosStructuralMechanicsFastSuite) + { + CreateTrussModel2N_and_CheckPK2Stress("LinearTrussElement3D2N"); } } From 98175134d5baf9f9e8881ed6e667d57d550c6ef2 Mon Sep 17 00:00:00 2001 From: WPK4FEM <129858139+WPK4FEM@users.noreply.github.com> Date: Fri, 13 Dec 2024 15:57:37 +0100 Subject: [PATCH 142/142] Geo/check number of tables phreatic multi line (#12689) * Make sure the number of attached tables matches the number of points for phreatic multiline. * Added test with matching number of tables and coordinates. --- ...t_phreatic_multi_line_pressure_process.cpp | 10 +-- ...atic_multi_line_pressure_table_process.cpp | 7 +- ...t_phreatic_multi_line_pressure_process.cpp | 3 +- ...atic_multi_line_pressure_table_process.cpp | 80 +++++++++++++++++++ .../ProjectParameters.json | 5 +- 5 files changed, 95 insertions(+), 10 deletions(-) create mode 100644 applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_phreatic_multi_line_pressure_table_process.cpp diff --git a/applications/GeoMechanicsApplication/custom_processes/apply_constant_phreatic_multi_line_pressure_process.cpp b/applications/GeoMechanicsApplication/custom_processes/apply_constant_phreatic_multi_line_pressure_process.cpp index bf2efbae28b6..8ee28888528d 100644 --- a/applications/GeoMechanicsApplication/custom_processes/apply_constant_phreatic_multi_line_pressure_process.cpp +++ b/applications/GeoMechanicsApplication/custom_processes/apply_constant_phreatic_multi_line_pressure_process.cpp @@ -51,12 +51,12 @@ void ApplyConstantPhreaticMultiLinePressureProcess::InitializeParameters(Paramet "is_seepage": false, "gravity_direction": 1, "out_of_plane_direction": 2, - "x_coordinates": [0.0,1.0], - "y_coordinates": [1.0,0.5], - "z_coordinates": [0.0,0.0], + "x_coordinates": [0.0, 1.0], + "y_coordinates": [1.0, 0.5], + "z_coordinates": [0.0, 0.0], "specific_weight" : 10000.0, "pressure_tension_cut_off" : 0.0, - "table" : [0,1] + "table" : [0, 0] } )"); // Some values are mandatory, since no meaningful default value exist. For this reason try @@ -172,7 +172,7 @@ std::string ApplyConstantPhreaticMultiLinePressureProcess::Info() const void ApplyConstantPhreaticMultiLinePressureProcess::PrintInfo(std::ostream& rOStream) const { - rOStream << "ApplyConstantPhreaticMultiLinePressureProcess"; + rOStream << Info(); } const std::string& ApplyConstantPhreaticMultiLinePressureProcess::VariableName() const diff --git a/applications/GeoMechanicsApplication/custom_processes/apply_phreatic_multi_line_pressure_table_process.cpp b/applications/GeoMechanicsApplication/custom_processes/apply_phreatic_multi_line_pressure_table_process.cpp index 7818955610a0..2c4b6f43c66f 100644 --- a/applications/GeoMechanicsApplication/custom_processes/apply_phreatic_multi_line_pressure_table_process.cpp +++ b/applications/GeoMechanicsApplication/custom_processes/apply_phreatic_multi_line_pressure_table_process.cpp @@ -23,6 +23,11 @@ ApplyPhreaticMultiLinePressureTableProcess::ApplyPhreaticMultiLinePressureTableP { KRATOS_TRY + KRATOS_ERROR_IF(HorizontalDirectionCoordinates().size() != rParameters["table"].GetVector().size()) + << "Got " << HorizontalDirectionCoordinates().size() << " coordinates and " + << rParameters["table"].GetVector().size() << " table references. The number of coordinates " + << "and table references should be equal." << std::endl; + for (auto value : rParameters["table"].GetVector()) { const auto TableId = static_cast(value); if (TableId > 0) { @@ -80,7 +85,7 @@ std::string ApplyPhreaticMultiLinePressureTableProcess::Info() const void ApplyPhreaticMultiLinePressureTableProcess::PrintInfo(std::ostream& rOStream) const { - rOStream << "ApplyPhreaticMultiLinePressureTableProcess"; + rOStream << Info(); } } // namespace Kratos diff --git a/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_constant_phreatic_multi_line_pressure_process.cpp b/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_constant_phreatic_multi_line_pressure_process.cpp index 0cdff9bd4af3..7a449c9d65b7 100644 --- a/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_constant_phreatic_multi_line_pressure_process.cpp +++ b/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_constant_phreatic_multi_line_pressure_process.cpp @@ -136,7 +136,7 @@ KRATOS_TEST_CASE_IN_SUITE(ApplyConstantPhreaticMultiLinePressureProcessDoesNotTh r_model_part, test_parameters)) test_parameters.RemoveValue("x_coordinates"); - test_parameters.AddVector("x_coordinates", ScalarVector{5, 1.0}); + test_parameters.AddVector("x_coordinates", ScalarVector{2, 1.0}); KRATOS_EXPECT_TRUE(CanCreateInstanceOfApplyConstantPhreaticMultiLinePressureProcessWithoutFailure( r_model_part, test_parameters)) @@ -171,6 +171,7 @@ KRATOS_TEST_CASE_IN_SUITE(ApplyConstantPhreaticMultilinePressureProcess_AppliesC "x_coordinates": [0.0, 1.0, 2.0], "y_coordinates": [1.0, 1.0, 1.0], "z_coordinates": [0.0, 0.0, 0.0], + "table": [0, 0, 0], "gravity_direction": 1 } )"}; diff --git a/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_phreatic_multi_line_pressure_table_process.cpp b/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_phreatic_multi_line_pressure_table_process.cpp new file mode 100644 index 000000000000..0bf75282f452 --- /dev/null +++ b/applications/GeoMechanicsApplication/tests/cpp_tests/test_apply_phreatic_multi_line_pressure_table_process.cpp @@ -0,0 +1,80 @@ +// KRATOS___ +// // ) ) +// // ___ ___ +// // ____ //___) ) // ) ) +// // / / // // / / +// ((____/ / ((____ ((___/ / MECHANICS +// +// License: geo_mechanics_application/license.txt +// +// Main authors: Wijtze Pieter Kikstra +// +#include "containers/model.h" +#include "custom_processes/apply_phreatic_multi_line_pressure_table_process.h" +#include "geo_mechanics_fast_suite.h" +#include "includes/checks.h" + +using namespace Kratos; + +namespace +{ + +bool CanCreateInstanceOfApplyPhreaticMultiLinePressureTableProcessWithoutFailure(ModelPart& rModelPart, + const Parameters& rProcessParameters) +{ + try { + ApplyPhreaticMultiLinePressureTableProcess{rModelPart, rProcessParameters}; + } catch (const Exception&) { + return false; + } + + return true; +} + +} // namespace + +namespace Kratos::Testing +{ + +KRATOS_TEST_CASE_IN_SUITE(ApplyPhreaticMultiLinePressureTableProcessThrowsWhenTableLengthDoesNotMatchCoordinates, + KratosGeoMechanicsFastSuiteWithoutKernel) +{ + auto model = Model{}; + auto& r_model_part = model.CreateModelPart("foo"); + auto test_parameters = Parameters{R"( + { + "model_part_name": "foo", + "variable_name": "WATER_PRESSURE", + "x_coordinates": [0.0, 1.0], + "y_coordinates": [0.0, 1.0], + "z_coordinates": [0.0, 0.0], + "gravity_direction": 1, + "out_of_plane_direction": 2, + "table": [1, 2, 3, 4] + } )"}; + + KRATOS_EXPECT_EXCEPTION_IS_THROWN((ApplyPhreaticMultiLinePressureTableProcess{r_model_part, test_parameters}), "Got 2 coordinates and 4 table references. The number of coordinates and table references should be equal.") +} + +KRATOS_TEST_CASE_IN_SUITE(ApplyPhreaticMultiLinePressureTableProcessDoesNotThrowWhenTableLengthMatchesCoordinates, + KratosGeoMechanicsFastSuiteWithoutKernel) +{ + auto model = Model{}; + auto& r_model_part = model.CreateModelPart("foo"); + auto test_parameters = Parameters{R"( + { + "model_part_name": "foo", + "variable_name": "WATER_PRESSURE", + "x_coordinates": [0.0, 1.0, 2.0], + "y_coordinates": [0.0, 1.0, 2.0], + "z_coordinates": [0.0, 0.0, 0.0], + "gravity_direction": 1, + "out_of_plane_direction": 2, + "table": [0, 0, 3] + } )"}; + + KRATOS_EXPECT_TRUE(CanCreateInstanceOfApplyPhreaticMultiLinePressureTableProcessWithoutFailure( + r_model_part, test_parameters)) +} + +} // namespace Kratos::Testing \ No newline at end of file diff --git a/applications/GeoMechanicsApplication/tests/test_inclined_phreatic_multi_line_3_points.gid/ProjectParameters.json b/applications/GeoMechanicsApplication/tests/test_inclined_phreatic_multi_line_3_points.gid/ProjectParameters.json index 46d0b755d872..abd4756aeafc 100644 --- a/applications/GeoMechanicsApplication/tests/test_inclined_phreatic_multi_line_3_points.gid/ProjectParameters.json +++ b/applications/GeoMechanicsApplication/tests/test_inclined_phreatic_multi_line_3_points.gid/ProjectParameters.json @@ -148,14 +148,13 @@ "model_part_name": "PorousDomain.Fluid_Pressure-auto-1", "variable_name": "WATER_PRESSURE", "is_fixed": true, - "value": 0.0, - "table": [0, 0, 0], "fluid_pressure_type": "Phreatic_Multi_Line", "gravity_direction": 1, "out_of_plane_direction": 2, "x_coordinates" : [0.0,0.5,1.0], "y_coordinates": [1.0,0.9,0.5], - "z_coordinates": [0.0,0.0,0.0], + "z_coordinates": [0.0,0.0,0.0], + "table": [0, 0, 0], "specific_weight": 10000.0 } }],