Skip to content
Snippets Groups Projects
Select Git revision
  • 1d0d2aee55efa16fdddf5fbc29bb0bb8e6ee4f11
  • 2016-PippingKornhuberRosenauOncken default
  • 2022-Strikeslip-Benchmark
  • 2021-GraeserKornhuberPodlesny
  • Dissertation2021 protected
  • separate-deformation
  • AverageCrosspoints
  • old_solver_new_datastructure
  • last_working
  • 2014-Dissertation-Pipping
  • 2013-PippingSanderKornhuber
11 results

truncation.py

Blame
  • Forked from agnumpde / dune-tectonic
    169 commits ahead of the upstream repository.
    user avatar
    .
    podlesny authored
    094c3060
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    truncation.py 3.43 KiB
    import configparser as cp
    import os
    import numpy as np
    import csv
    import h5py
    import matplotlib.pyplot as plt
    
    from debug.outliers import outliers
    from debug.friction import truncated_friction
    from debug.state import aging_law
    from debug.diffplot import diffplot
    
    from support.maximum import maximum
    from support.norm import norm
    from support.find_quakes import find_quakes
    from support.slip_beginnings import slip_beginnings
    from support.slip_endings import slip_endings
    from support.max_distance import max_distance
    
    from support.io import read_h5file
    from support.io import read_params
    
    from support.iterations import iterations
    from support.friction_stats import friction_stats
    
    def build_time(h5file, final_time, interval = []):
        # read time
        time = np.array(h5file['relativeTime']) * FINAL_TIME
        time = np.delete(time, 0)
        
        if len(interval) == 0:
            interval = [0, FINAL_TIME]
        
        t = [i for i in range(len(time)) if time[i]>=interval[0] and time[i]<=interval[1]]
        return t, time[t]
    
    def build_patch(coords, percentage = 1.0):
        x_coords = coords[:, 0]
        xmin = np.min(x_coords)
        xmax = np.max(x_coords)
        delta_x = (1 - percentage)*(xmax - xmin)/2
    
        xmin = xmin + delta_x
        xmax = xmax - delta_x
    
        return [i for i in range(len(x_coords)) if x_coords[i]>=xmin and x_coords[i]<=xmax]
    
    # read h5 output file
    h5file = read_h5file()
    print(list(h5file.keys()))
    
    # read problem parameters
    params = read_params('foam.cfg')
    print(params)
    
    TANGENTIAL_COORDS = 1
    FINAL_TIME = params['finalTime']
    NBODIES = params['bodyCount']
    
    t, time = build_time(h5file, FINAL_TIME, [0, FINAL_TIME])
    
    for body_ID in range(NBODIES):
        body = 'body' + str(body_ID)
    
        if body not in h5file:
            continue
    
        coords = np.array(h5file[body + '/coordinates'])
        patch = build_patch(coords, 1.0)
    
        fig = plt.figure()
    
        # velocity and state data
        v = abs(np.array(h5file[body + '/velocity']))[:,:,TANGENTIAL_COORDS]
        alpha = np.array(h5file[body + '/state'])
    
        vmin = 0 #params['V0'] / np.exp( ( params['mu0'] + params['b'] * np.array(alpha)) / params['a'] )
        
        v_truncation = (v<=vmin)[t,:]
        v_truncated = np.sum(v_truncation, axis=1)
    
        v_comp = (np.abs(v-vmin)<1e-14)[t,:]
        v_small = np.sum(v_comp, axis=1)
    
        weighted_normal_stress = np.array(h5file[body + '/weightedNormalStress'])
        second_deriv_large = (v<0)[t,:] #((- weighted_normal_stress[None, ...] * params['a'] / v)>1e10)[0,t,:]
        second_deriv = np.sum(second_deriv_large, axis=1) 
    
        total_truncated = np.sum(v_truncation | v_comp | second_deriv_large, axis=1)
    
        # plot v_small
        ax_v_small = fig.add_subplot(4, 1, 1)
        ax_v_small.plot(time, v_small, color='black', linestyle='-')
        ax_v_small.set_ylabel('# v-vmin < 1e-14')
        #-------------------------
    
        # plot v_truncated
        ax_v_truncated = fig.add_subplot(4, 1, 2  )
        ax_v_truncated.plot(time, v_truncated, color='black', linestyle='-')
        ax_v_truncated.set_ylabel('# v <= vmin')
        #-------------------------
    
        # plot second_deriv_large
        ax_second_deriv = fig.add_subplot(4, 1, 3)
        ax_second_deriv.plot(time, second_deriv, color='black', linestyle='-')
        ax_second_deriv.set_ylabel('# second_deriv large')
        #-------------------------
    
        # plot total_truncated
        ax_truncated = fig.add_subplot(4, 1, 4)
        ax_truncated.plot(time, total_truncated, color='black', linestyle='-')
        ax_truncated.set_ylabel('# total truncated')
        #-------------------------
    plt.show()
    
    h5file.close()