Пример #1
0
 def SetCustomBetaParameters(self, custom_parameters): # These are input parameters that have not yet been transferred to the interface
     super(CandelierBenchmarkAnalysis, self).SetCustomBetaParameters(custom_parameters)
     candelier_pp.include_history_force = bool(self.project_parameters["basset_force_type"].GetInt())
     candelier_pp.include_lift = PT.RecursiveFindParametersWithCondition(custom_parameters["properties"],
                                                                         'vorticity_induced_lift_parameters',
                                                                         condition=lambda value: not (value['name']=='default'))
     candelier.sim = candelier.AnalyticSimulator(candelier_pp)
     self.project_parameters["fluid_already_calculated"].SetBool(True)
     self.project_parameters.AddEmptyValue("load_derivatives").SetBool(False)
Пример #2
0
 def __init__(self, project_parameters, model_part):
     Pouliot2012EdgeDerivativesRecoverer.__init__(self, project_parameters, model_part)
     self.element_type = self.GetElementType(pp)
     self.FillUpModelPart(self.element_type)
     self.DOFs = self.GetDofs(pp)
     self.AddDofs(self.DOFs)
     self.calculate_vorticity = (parameters["vorticity_calculation_type"].GetInt() > 0
                                 or PT.RecursiveFindParametersWithCondition(parameters["properties"],
                                                                            'vorticity_induced_lift_parameters'))
     self.domain_size = project_parameters["fluid_parameters"]["solver_settings"]["domain_size"].GetInt()
Пример #3
0
 def __init__(self, project_parameters, model_part):
     L2_projection_recoverer.L2ProjectionGradientRecoverer.__init__(self, project_parameters, model_part)
     self.element_type = "ComputeGradientPouliot20123D"
     self.condition_type = "ComputeLaplacianSimplexCondition3D"
     self.FillUpModelPart(self.element_type, self.condition_type)
     self.DOFs = (Kratos.VELOCITY_COMPONENT_GRADIENT_X, Kratos.VELOCITY_COMPONENT_GRADIENT_Y, Kratos.VELOCITY_COMPONENT_GRADIENT_Z)
     self.AddDofs(self.DOFs)
     self.calculate_vorticity = (project_parameters["vorticity_calculation_type"].GetInt() > 0
                                 or PT.RecursiveFindParametersWithCondition(project_parameters["properties"],
                                                                            'vorticity_induced_lift_parameters'))
Пример #4
0
 def __init__(self, model, varying_parameters=Parameters("{}")):
     super(CandelierBenchmarkAnalysis, self).__init__(model, varying_parameters)
     self._GetSolver().is_rotating_frame = self.project_parameters["frame_of_reference"]["frame_type"].GetInt()
     self._GetDEMAnalysis().mdpas_folder_path = os.path.join(self._GetDEMAnalysis().main_path, 'candelier_tests')
     candelier_pp.include_history_force = self.vars_man.do_include_history_force
     candelier_pp.include_lift = PT.RecursiveFindParametersWithCondition(self.project_parameters["properties"],
                                                                         'vorticity_induced_lift_parameters',
                                                                         condition=lambda value: not (value['name']=='default'))
     candelier.sim = candelier.AnalyticSimulator(candelier_pp)
     self.project_parameters["custom_fluid"]["fluid_already_calculated"].SetBool(True)
     self.project_parameters.AddEmptyValue("load_derivatives").SetBool(False)
Пример #5
0
 def __init__(self, project_parameters, model_part):
     recoverer.DerivativesRecoverer.__init__(self, project_parameters, model_part)
     self.dimension = self.project_parameters["fluid_parameters"]["solver_settings"]["domain_size"].GetInt()
     self.model_part = model_part
     self.use_lumped_mass_matrix = project_parameters["material_acceleration_calculation_type"].GetInt() == 3
     self.recovery_model_part = ModelPart("PostGradientFluidPart")
     self.custom_functions_tool = CustomFunctionsCalculator3D()
     self.calculate_vorticity = (parameters["vorticity_calculation_type"].GetInt() > 0
                                 or PT.RecursiveFindParametersWithCondition(parameters["properties"],
                                                                            'vorticity_induced_lift_parameters'))
     self.GetFieldUtility()
     self.CreateCPluPlusStrategies()
Пример #6
0
 def SetHistoryForceOptions(self):
     self.history_force_on = False
     self.MAE_parameters = Parameters("{}")
     for prop in self.project_parameters["properties"].values(
     ):  #TODO: now it only works for one property!
         self.history_force_on = (PT.RecursiveFindParametersWithCondition(
             self.project_parameters["properties"],
             'history_force_parameters',
             condition=lambda value: value['name'].GetString() != 'default')
                                  )
         if self.history_force_on:
             self.MAE_parameters = prop["hydrodynamic_law_parameters"][
                 "history_force_parameters"]["mae_parameters"]
         break
     self.do_use_mae = PT.RecursiveFindTrueBoolInParameters(
         self.MAE_parameters, 'do_use_mae')
Пример #7
0
    def SetOptions(self, parameters):
        self.do_include_history_force = (
            PT.RecursiveFindParametersWithCondition(
                parameters["properties"],
                'history_force_parameters',
                condition=lambda value: value['name'].GetString() != 'default')
        )

        if self.do_include_history_force:  #TODO: extend to multiple properties
            for prop in parameters["properties"].values():
                self.history_force_parameters = prop[
                    "hydrodynamic_law_parameters"]["history_force_parameters"]
                break

        self.do_backward_coupling = parameters["coupling"][
            "coupling_level_type"].GetInt() > 1
        self.backward_coupling_tools = parameters["coupling"][
            "backward_coupling"]
Пример #8
0
    def __init__(self, project_parameters, model_part):
        recoverer.DerivativesRecoverer.__init__(self, project_parameters,
                                                model_part)
        self.model_part = model_part
        self.use_lumped_mass_matrix = project_parameters[
            "material_acceleration_calculation_type"].GetInt() == 3
        self.recovery_model_part = ModelPart("PostGradientFluidPart")
        self.custom_functions_tool = CustomFunctionsCalculator3D()
        self.calculate_vorticity = (
            parameters["vorticity_calculation_type"].GetInt() > 0
            or PT.RecursiveFindParametersWithCondition(
                parameters["properties"], 'vorticity_induced_lift_parameters'))

        if self.use_lumped_mass_matrix:
            self.model_part.ProcessInfo[COMPUTE_LUMPED_MASS_MATRIX] = 1
        else:
            self.model_part.ProcessInfo[COMPUTE_LUMPED_MASS_MATRIX] = 0
        self.CreateCPluPlusStrategies()
Пример #9
0
    def __init__(self, project_parameters, path):
        self.sim = candelier.AnalyticSimulator(ch_pp)
        self.sim.CalculateNonDimensionalVars()
        self.path = path + '/candelier_results.h5py'
        self.reading_index = 0
        self.times = []
        self.errors = []
        self.do_include_history_force = (PT.RecursiveFindParametersWithCondition(
                                         project_parameters["properties"], 'history_force_parameters',
                                         condition=lambda value: value['name'].GetString() != 'default'))

        ch_pp.include_history_force = self.do_include_history_force
        self.dt = project_parameters["time_stepping"]["time_step"].GetDouble()

        if self.do_include_history_force: #TODO: extend to multiple properties
            for prop in project_parameters["properties"].values():
                self.history_force_parameters =  prop["hydrodynamic_law_parameters"]["history_force_parameters"]
                break

            self.N_q = self.history_force_parameters["time_steps_per_quadrature_step"].GetInt()
            self.quadrature_order = self.history_force_parameters["quadrature_order"].GetInt()

        if not self.history_force_parameters["mae_parameters"]['do_use_mae'].GetBool():
            self.method = 'Daitche'
        else:
            self.method = 'Hinsberg'
            self.m = self.history_force_parameters["mae_parameters"]["m"].GetInt()
            self.t_w = self.history_force_parameters["mae_parameters"]["window_time_interval"].GetDouble()

        self.result_code = self.method + '_dt=' + str(self.dt) + '_Nq=' + str(self.N_q) + '_quadrature_order=' + str(self.quadrature_order)
        if self.method == 'Hinsberg':
            self.result_code += '_tw=' + str(self.t_w) + '_m=' + str(self.m)

        with h5py.File(self.path) as f:
            result = f.require_group(self.result_code)
            result.attrs['method'] = self.method
            result.attrs['dt'] = self.dt
            result.attrs['N_q'] = self.N_q
            result.attrs['quadrature_order'] = self.quadrature_order

            if self.method == 'Hinsberg':
                result.attrs['t_w'] = self.t_w
                result.attrs['m'] = self.m
Пример #10
0
    def ConstructListsOfVariablesForCoupling(self, parameters):

        # fluid coupling variables
        self.coupling_fluid_vars = []
        self.coupling_fluid_vars += [Kratos.MATERIAL_ACCELERATION]

        self.coupling_fluid_vars += [
            Kratos.KratosGlobals.GetVariable(
                parameters["body_force_per_unit_mass_variable_name"].GetString(
                ))
        ]

        if parameters["custom_fluid"]["fluid_model_type"].GetInt() == 0:
            self.coupling_fluid_vars += [SDEM.AVERAGED_FLUID_VELOCITY]

        if (parameters["custom_fluid"]["fluid_model_type"].GetInt() == 0
                or parameters["coupling"]["coupling_level_type"].GetInt() > 1):
            self.coupling_fluid_vars += [Kratos.FLUID_FRACTION]
            self.coupling_fluid_vars += [Kratos.FLUID_FRACTION_OLD]

            if 'DISPERSE_FRACTION' in self.nodal_results:
                self.coupling_fluid_vars += [Kratos.DISPERSE_FRACTION]

            if parameters["coupling"]["backward_coupling"][
                    "filter_velocity_option"].GetBool():
                self.coupling_fluid_vars += [Kratos.PARTICLE_VEL_FILTERED]
                self.coupling_fluid_vars += [Kratos.TIME_AVERAGED_ARRAY_3]
                self.coupling_fluid_vars += [Kratos.PHASE_FRACTION]

        if parameters["custom_fluid"]["fluid_model_type"].GetInt() >= 1:
            self.coupling_fluid_vars += [Kratos.FLUID_FRACTION_GRADIENT]
            self.coupling_fluid_vars += [Kratos.FLUID_FRACTION_RATE]

        if parameters["coupling"]["coupling_level_type"].GetInt() >= 1:
            self.coupling_fluid_vars += [Kratos.HYDRODYNAMIC_REACTION]

        if parameters["coupling"]["coupling_level_type"].GetInt(
        ) >= 1 and parameters["coupling"]["forward_coupling"][
                "time_averaging_type"].GetInt() > 0:
            self.coupling_fluid_vars += [Kratos.MEAN_HYDRODYNAMIC_REACTION]

        if parameters["non_newtonian_fluid"]["non_newtonian_option"].GetBool():
            self.coupling_fluid_vars += [Kratos.POWER_LAW_N]
            self.coupling_fluid_vars += [Kratos.POWER_LAW_K]
            self.coupling_fluid_vars += [Kratos.YIELD_STRESS]
            # self.coupling_fluid_vars += [Kratos.GEL_STRENGTH] # TODO: make specific option for this

        if parameters["coupling"]["backward_coupling"][
                "viscosity_modification_type"].GetInt():
            self.coupling_fluid_vars += [Kratos.VISCOSITY]

        if parameters["custom_fluid"]["embedded_option"].GetBool():
            self.coupling_fluid_vars += [Kratos.DISTANCE]

        # dem coupling variables
        self.coupling_dem_vars = []

        if parameters["coupling"]["coupling_level_type"].GetInt() > 0:
            self.coupling_dem_vars += [Kratos.FLUID_VEL_PROJECTED]
            self.coupling_dem_vars += [Kratos.FLUID_ACCEL_PROJECTED]
            self.coupling_dem_vars += [Kratos.FLUID_DENSITY_PROJECTED]
            self.coupling_dem_vars += [Kratos.FLUID_VISCOSITY_PROJECTED]
            self.coupling_dem_vars += [Kratos.HYDRODYNAMIC_FORCE]
            self.coupling_dem_vars += [Kratos.HYDRODYNAMIC_MOMENT]
            self.coupling_dem_vars += [Kratos.MATERIAL_FLUID_ACCEL_PROJECTED]
            self.coupling_dem_vars += [Kratos.FLUID_ACCEL_PROJECTED]
            self.coupling_dem_vars += [
                Kratos.FLUID_ACCEL_FOLLOWING_PARTICLE_PROJECTED
            ]
            self.coupling_dem_vars += [Kratos.ADDITIONAL_FORCE
                                       ]  # Here for safety for the moment

            if PT.RecursiveFindTrueBoolInParameters(
                    parameters["properties"], 'do_apply_faxen_corrections'):
                self.coupling_dem_vars += [Kratos.FLUID_VEL_LAPL_PROJECTED]
                self.coupling_dem_vars += [
                    Kratos.FLUID_VEL_LAPL_RATE_PROJECTED
                ]

            if self.do_include_history_force:
                self.coupling_dem_vars += [Kratos.FLUID_VEL_PROJECTED_RATE]

        if parameters["coupling"]["coupling_level_type"].GetInt(
        ) >= 1 or parameters["custom_fluid"]["fluid_model_type"].GetInt() == 0:
            self.coupling_dem_vars += [Kratos.FLUID_FRACTION_PROJECTED]

        if (parameters["coupling"]["coupling_level_type"].GetInt() >= 1 and
                'FLUID_FRACTION_GRADIENT_PROJECTED' in self.dem_printing_vars):
            self.coupling_dem_vars += [
                Kratos.FLUID_FRACTION_GRADIENT_PROJECTED
            ]

        if parameters["non_newtonian_fluid"]["non_newtonian_option"].GetBool():
            self.coupling_dem_vars += [Kratos.POWER_LAW_N]
            self.coupling_dem_vars += [Kratos.POWER_LAW_K]
            self.coupling_dem_vars += [Kratos.YIELD_STRESS]

        if PT.RecursiveFindParametersWithCondition(
                parameters["properties"], 'vorticity_induced_lift_parameters'):
            self.coupling_dem_vars += [Kratos.FLUID_VORTICITY_PROJECTED]
            self.coupling_dem_vars += [Kratos.SHEAR_RATE_PROJECTED]

        if parameters["custom_fluid"]["embedded_option"].GetBool():
            self.coupling_dem_vars += [Kratos.DISTANCE]

        if 'REYNOLDS_NUMBER' in self.dem_nodal_results:
            self.coupling_dem_vars += [Kratos.REYNOLDS_NUMBER]

        if self.do_backward_coupling:
            if parameters["coupling"]["backward_coupling"][
                    "apply_time_filter_to_fluid_fraction_option"].GetBool():
                self.time_filtered_vars += [Kratos.FLUID_FRACTION_FILTERED]

        if parameters["coupling"]["backward_coupling"][
                "filter_velocity_option"].GetBool():
            self.time_filtered_vars += [Kratos.PARTICLE_VEL_FILTERED]
Пример #11
0
    def ConstructListsOfVariables(self, parameters):
        # PRINTING VARIABLES
        # constructing lists of variables to be printed

        self.nodal_results, self.gauss_points_results = [], []
        self.fluid_parameters = parameters['fluid_parameters']
        if self.fluid_parameters.Has('sdem_output_processes'):
            gid_output_options = self.fluid_parameters[
                "sdem_output_processes"]["gid_output"][0]["Parameters"]
            result_file_configuration = gid_output_options[
                "postprocess_parameters"]["result_file_configuration"]
            gauss_point_results = result_file_configuration[
                "gauss_point_results"]
            nodal_variables = self.fluid_parameters["sdem_output_processes"][
                "gid_output"][0]["Parameters"]["postprocess_parameters"][
                    "result_file_configuration"]["nodal_results"]
            self.nodal_results = [
                nodal_variables[i].GetString()
                for i in range(nodal_variables.size())
            ]
            self.gauss_points_results = [
                gauss_point_results[i].GetString()
                for i in range(gauss_point_results.size())
            ]

        self.ConstructListsOfResultsToPrint(parameters)

        # COUPLING VARIABLES
        # listing the variables involved in the fluid-particles coupling

        if parameters["coupling"]["coupling_level_type"].GetInt():
            self.ConstructListsOfVariablesForCoupling(parameters)

        # VARIABLES TO ADD
        # listing nodal variables to be added to the model parts (memory will be allocated for them)

        # fluid variables
        self.fluid_vars = []
        self.fluid_vars += [Kratos.TORQUE]
        self.fluid_vars += self.fluid_printing_vars
        self.fluid_vars += self.coupling_fluid_vars

        if parameters["pressure_grad_recovery_type"].GetInt() > 0:
            self.fluid_vars += [Kratos.RECOVERED_PRESSURE_GRADIENT]

        if (parameters["gradient_calculation_type"].GetInt() > 1
                or parameters["pressure_grad_recovery_type"].GetInt() > 1 or
                parameters["material_acceleration_calculation_type"].GetInt()
                == 7 or parameters["laplacian_calculation_type"].GetInt() > 1):
            self.fluid_vars += [Kratos.NODAL_WEIGHTS]

        if parameters["material_acceleration_calculation_type"].GetInt():
            self.fluid_vars += [Kratos.MATERIAL_ACCELERATION]
            self.fluid_vars += [Kratos.VELOCITY_COMPONENT_GRADIENT]

            if (parameters["material_acceleration_calculation_type"].GetInt()
                    == 5
                    or parameters["material_acceleration_calculation_type"].
                    GetInt() == 6):
                if parameters["store_full_gradient_option"].GetBool():
                    self.fluid_vars += [Kratos.VELOCITY_X_GRADIENT]
                    self.fluid_vars += [Kratos.VELOCITY_Y_GRADIENT]
                    self.fluid_vars += [Kratos.VELOCITY_Z_GRADIENT]

        if (parameters["vorticity_calculation_type"].GetInt() > 0
                or PT.RecursiveFindParametersWithCondition(
                    parameters["properties"],
                    'vorticity_induced_lift_parameters')):
            self.fluid_vars += [Kratos.VORTICITY]

        if parameters["laplacian_calculation_type"].GetInt():
            self.fluid_vars += [Kratos.VELOCITY_LAPLACIAN]

        if PT.RecursiveFindTrueBoolInParameters(parameters["properties"],
                                                'do_apply_faxen_corrections'):
            self.fluid_vars += [Kratos.VELOCITY_LAPLACIAN_RATE]

        if parameters["coupling"]["backward_coupling"][
                "calculate_diffusivity_option"].GetBool():
            self.fluid_vars += [Kratos.CONDUCTIVITY]

        # dem variables
        self.dem_vars = []
        self.dem_vars += self.dem_printing_vars
        self.dem_vars += self.coupling_dem_vars
        self.dem_vars += [Kratos.BUOYANCY]
        self.dem_vars += [Kratos.VELOCITY_OLD]

        if self.do_include_history_force:
            self.dem_vars += [Kratos.BASSET_FORCE]

        if parameters["frame_of_reference"]["frame_type"].GetInt(
        ) and self.do_include_history_force > 0:
            self.dem_vars += [Kratos.DISPLACEMENT_OLD]
            self.dem_vars += [Kratos.VELOCITY_OLD_OLD]

        if (parameters["custom_dem"]["translational_integration_scheme"].
                GetString() in {'Hybrid_Bashforth', 'TerminalVelocityScheme'}
                or self.do_include_history_force):
            self.dem_vars += [Kratos.VELOCITY_OLD]
            self.dem_vars += [Kratos.ADDITIONAL_FORCE_OLD]
            self.dem_vars += [Kratos.AUX_VEL]

        if parameters["add_each_hydro_force_option"].GetBool():
            self.dem_vars += [Kratos.DRAG_FORCE]

        self.dem_vars += [Kratos.PARTICLE_SPHERICITY
                          ]  # TODO: add only when needed

        if (PT.RecursiveFindParametersWithCondition(
                parameters["properties"], 'vorticity_induced_lift_parameters')
                and parameters["add_each_hydro_force_option"].GetBool()):
            self.dem_vars += [Kratos.LIFT_FORCE]

        if parameters["add_each_hydro_force_option"].GetBool():
            self.dem_vars += [Kratos.VIRTUAL_MASS_FORCE]

        # clusters variables
        self.clusters_vars = []

        # rigid faces variables
        self.rigid_faces_vars = [
            Kratos.VELOCITY, Kratos.ANGULAR_VELOCITY, Kratos.DISPLACEMENT,
            DEM.DELTA_DISPLACEMENT, Kratos.DELTA_ROTATION, DEM.CONTACT_FORCES,
            DEM.DEM_PRESSURE, DEM.ELASTIC_FORCES, Kratos.PRESSURE,
            DEM.TANGENTIAL_ELASTIC_FORCES, DEM.SHEAR_STRESS, Kratos.NODAL_AREA,
            Kratos.VELOCITY_OLD
        ]

        if parameters["custom_fluid"]["embedded_option"].GetBool():
            self.rigid_faces_vars += [Kratos.FORCE]
            self.rigid_faces_vars += [Kratos.POSITIVE_FACE_PRESSURE]
            self.rigid_faces_vars += [Kratos.NEGATIVE_FACE_PRESSURE]

        self.fluid_vars += self.rigid_faces_vars

        # inlet variables
        self.inlet_vars = self.dem_vars
Пример #12
0
    def ConstructListsOfVariables(self, parameters):
        # PRINTING VARIABLES
        # constructing lists of variables to be printed
        self.ConstructListsOfResultsToPrint(parameters)

        # COUPLING VARIABLES
        # listing the variables involved in the fluid-particles coupling

        if parameters["coupling_level_type"].GetInt():
            self.ConstructListsOfVariablesForCoupling(parameters)

        # VARIABLES TO ADD
        # listing nodal variables to be added to the model parts (memory will be allocated for them)

        # fluid variables
        self.fluid_vars = []
        self.fluid_vars += [TORQUE]
        self.fluid_vars += self.fluid_printing_vars
        self.fluid_vars += self.coupling_fluid_vars

        if parameters["pressure_grad_recovery_type"].GetInt() > 0:
            self.fluid_vars += [RECOVERED_PRESSURE_GRADIENT]

        if (parameters["gradient_calculation_type"].GetInt() > 1
                or parameters["pressure_grad_recovery_type"].GetInt() > 1 or
                parameters["material_acceleration_calculation_type"].GetInt()
                == 7 or parameters["laplacian_calculation_type"].GetInt() > 1):
            self.fluid_vars += [NODAL_WEIGHTS]

        if parameters["material_acceleration_calculation_type"].GetInt():
            self.fluid_vars += [MATERIAL_ACCELERATION]
            self.fluid_vars += [VELOCITY_COMPONENT_GRADIENT]

            if (parameters["material_acceleration_calculation_type"].GetInt()
                    == 5
                    or parameters["material_acceleration_calculation_type"].
                    GetInt() == 6):
                if parameters["store_full_gradient_option"].GetBool():
                    self.fluid_vars += [VELOCITY_X_GRADIENT]
                    self.fluid_vars += [VELOCITY_Y_GRADIENT]
                    self.fluid_vars += [VELOCITY_Z_GRADIENT]

        if (parameters["vorticity_calculation_type"].GetInt() > 0
                or PT.RecursiveFindParametersWithCondition(
                    parameters["properties"],
                    'vorticity_induced_lift_parameters')):
            self.fluid_vars += [VORTICITY]

        if parameters["laplacian_calculation_type"].GetInt():
            self.fluid_vars += [VELOCITY_LAPLACIAN]

        if PT.RecursiveFindTrueBoolInParameters(parameters["properties"],
                                                'do_apply_faxen_corrections'):
            self.fluid_vars += [VELOCITY_LAPLACIAN_RATE]

        if parameters["calculate_diffusivity_option"].GetBool():
            self.fluid_vars += [CONDUCTIVITY]

        # dem variables
        self.dem_vars = []
        self.dem_vars += self.dem_printing_vars
        self.dem_vars += self.coupling_dem_vars
        self.dem_vars += [BUOYANCY]
        self.dem_vars += [VELOCITY_OLD]

        if parameters["frame_of_reference_type"].GetInt(
        ) and parameters["basset_force_type"].GetInt() > 0:
            self.dem_vars += [DISPLACEMENT_OLD]
            self.dem_vars += [VELOCITY_OLD_OLD]

        if (parameters["TranslationalIntegrationScheme"].GetString()
                in {'Hybrid_Bashforth', 'TerminalVelocityScheme'}
                or parameters["basset_force_type"].GetInt() > 0):
            self.dem_vars += [VELOCITY_OLD]
            self.dem_vars += [ADDITIONAL_FORCE_OLD]
            self.dem_vars += [AUX_VEL]

        if parameters["add_each_hydro_force_option"].GetBool():
            self.dem_vars += [DRAG_FORCE]

        self.dem_vars += [PARTICLE_SPHERICITY]  # TODO: add only when needed

        if (PT.RecursiveFindParametersWithCondition(
                parameters["properties"], 'vorticity_induced_lift_parameters')
                and parameters["add_each_hydro_force_option"].GetBool()):
            self.dem_vars += [LIFT_FORCE]

        if parameters["add_each_hydro_force_option"].GetBool():
            self.dem_vars += [VIRTUAL_MASS_FORCE]

        will_need_basset_force_variable = False
        for prop in parameters["properties"].values():
            if prop["hydrodynamic_law_parameters"].Has(
                    "history_force_parameters"):
                if prop["hydrodynamic_law_parameters"][
                        "history_force_parameters"]["name"].GetString(
                        ) != 'default':
                    will_need_basset_force_variable = True
                    break

        if will_need_basset_force_variable:
            self.dem_vars += [BASSET_FORCE]

        # clusters variables
        self.clusters_vars = []

        # rigid faces variables
        self.rigid_faces_vars = [
            VELOCITY, ANGULAR_VELOCITY, DISPLACEMENT, DELTA_DISPLACEMENT,
            DELTA_ROTATION, CONTACT_FORCES, DEM_PRESSURE, ELASTIC_FORCES,
            PRESSURE, TANGENTIAL_ELASTIC_FORCES, SHEAR_STRESS, NODAL_AREA,
            VELOCITY_OLD
        ]

        if parameters["embedded_option"].GetBool():
            self.rigid_faces_vars += [FORCE]
            self.rigid_faces_vars += [POSITIVE_FACE_PRESSURE]
            self.rigid_faces_vars += [NEGATIVE_FACE_PRESSURE]

        self.fluid_vars += self.rigid_faces_vars

        # inlet variables
        self.inlet_vars = self.dem_vars