def ComputeL1NormOfError(method, j_var, k_var):
    E = 0.
    E_r = 0.
    main_path = os.getcwd()
    with open(
            main_path + '/coors_' + str(method) + str(j_var) + str(k_var) +
            '.txt', 'r') as f_coors:
        ch_pp.include_history_force = 1
        sim = ch.AnalyticSimulator(ch_pp)
        i = 0
        for line in f_coors:
            i += 1
            coor = line.split()
            coor = [float(comp) for comp in coor]
            exact_coor = [0.] * 3
            sim.CalculatePosition(exact_coor, coor[0])
            x = exact_coor[0] * ch_pp.R
            y = exact_coor[1] * ch_pp.R
            r = Radius(coor[1:3])
            exact_r = Radius([x, y])
            delta_coor = [coor[1] - x, coor[2] - y]
            #E = max(E, Radius(delta_coor) / exact_r)
            #E_r = max(E_r, (r - exact_r) / exact_r)
            E += Radius(delta_coor) / exact_r
            E_r += (r - exact_r) / exact_r
    return E / i, E_r / i
예제 #2
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)
예제 #3
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)
예제 #4
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
예제 #5
0
    def __init__(self, parameters, path):
        self.sim = candelier.AnalyticSimulator(ch_pp)
        self.sim.CalculateNonDimensionalVars()
        self.path = path + '/candelier_results.h5py'
        self.dt = project_parameters["MaxTimeStep"].GetDouble()
        self.N_q = project_parameters["time_steps_per_quadrature_step"].GetInt(
        )
        self.quadrature_order = project_parameters["quadrature_order"].GetInt()
        self.reading_index = 0
        self.times = []
        self.errors = []
        ch_pp.include_history_force = bool(
            project_parameters["basset_force_type"].GetInt())

        if project_parameters["basset_force_type"].GetInt() == 2:
            self.method = 'Daitche'
        else:
            self.method = 'Hinsberg'
            self.m = project_parameters["number_of_exponentials"].GetInt()
            self.t_w = project_parameters["time_window"].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
예제 #6
0
import matplotlib.pyplot as plt
import math
import candelier.candelier_parameters as ch_pp
import candelier as ch
import DEM_explicit_solver_var as DEM_parameters


def Radius(a):
    a_2 = [x**2 for x in a]
    return math.sqrt(sum(a_2))


sim = ch.AnalyticSimulator(ch_pp)
coors = [None] * 3
sim.CalculatePosition(coors, 100.0)
x_final = coors[0] * ch_pp.R
y_final = coors[1] * ch_pp.R
r_final = Radius([x_final, y_final])
ch_pp.include_history_force = 0
sim = ch.AnalyticSimulator(ch_pp)
sim.CalculatePosition(coors, 100.0)
x_final_NH = coors[0] * ch_pp.R
y_final_NH = coors[1] * ch_pp.R
r_final_NH = Radius([x_final_NH, y_final_NH])
E_NH = Radius([abs(x_final_NH - x_final), abs(y_final - y_final_NH)]) / r_final
E_RNH = abs(r_final_NH - r_final) / r_final
final_positions = []
with open("final_positions_Dt=0.0025", 'r') as f:
    for line in f:
        position = line.split()
        position = [float(position[0]), float(position[1])]