Esempio n. 1
0
def ax_ref(ax, ref, ixy):
    if ax == None:
        fig = mpl_lib.wide_fig(nw=1,
                               nh=1,
                               w1=0.8,
                               w0=0.9,
                               ws=5.,
                               uh=3,
                               uw=4,
                               h0=0.25,
                               h1=0.25,
                               left=0.15,
                               right=0.05,
                               down=0.05,
                               up=0.05)
        ax = fig.axes[0]
    if ref == None:
        import mech
        macro = mech.FlowCurve(name='model')
        macro.get_model(fn='STR_STR.OUT')
        if ixy == 0 or ixy == 1:
            ref = macro.sigma[0, 0]
        if ixy == 2 or ixy == 3:
            ref = macro.epsilon[0, 0]
    return ax, ref
Esempio n. 2
0
def main_ph(ref=None, ixy=0, ax=None):
    """
    ixy = 0
       phase elastic strain (x), macrostress (y)
    ixy = 1
       macrostress (x), phase elastic strain (y)
    ixy = 2
       macrostrain (x), phase elastic strain (y)

    macro values are given as ref from ax_ref method
    """
    import mpl_lib, dat_lib, axes_label
    import mech

    ax, ref = ax_ref(ax, ref, ixy)

    fdif = info(iopt=2)
    nph = len(fdif)

    ph_lat_str = []
    for i in range(nph):
        f = mech.FlowCurve(name='phase_specific')
        f.get_pmodel_lat(fn='ph_str_%i.out' % (i + 1))
        ph_lat_str.append(f)

        if ixy == 0:
            y = ref
            x_l = ph_lat_str[i].epsilon[0, 0]
            x_t = ph_lat_str[i].epsilon[1, 1]
            y_l, x_l = dat_lib.trim(y, ref=x_l)
            y_t, x_t = dat_lib.trim(y, ref=x_t)
            x = x_l
            y = y_l
        elif ixy == 1:
            x = ref
            y = ph_lat_str[i].epsilon[0, 0]

        elif ixy == 2:
            x = ref
            y = ph_lat_str[i].epsilon[0, 0]
        else:
            raise IOError, 'Unavailable ixy'
        ax.plot(x, y)
        axes_label.__ph__(ax=ax, ft=15, iopt=ixy)
Esempio n. 3
0
def main_dep(ref=None, ixy=0, ndir=2):
    import mpl_lib
    import dat_lib
    import axes_label
    fdif = info(iopt=2)
    nph = len(fdif)

    if ndir == None: nw = 3
    elif ndir != None: nw = ndir

    fig = mpl_lib.wide_fig(nw=nw,
                           nh=nph,
                           w1=0,
                           w0=0,
                           uh=3,
                           h0=0.25,
                           h1=0.25,
                           left=0.15,
                           right=0.05,
                           down=0.05,
                           up=0.05)
    axs = fig.axes
    if ref == None:
        import mech
        macro = mech.FlowCurve(name='model')
        macro.get_model(fn='STR_STR.OUT')
        ref = macro.sigma[0, 0]

    ax_dir = []
    for iph in range(nph):
        hkls, chi_eta = read_dif(difile=fdif[iph])
        np = len(hkls)
        ax_ph = []
        for ip in range(np):
            hkl = hkls[ip]
            if ndir == None: ndir = len(chi_eta[ip])
            for idir in range(ndir):
                lat = read_lat(hkl=hkl,
                               difile=fdif[iph],
                               iph=iph + 1,
                               idir=idir + 1)
                iax = idir + nw * iph
                ax = axs[iax]
                if ip == 0:
                    ax_ph.append(ax)
                if idir == 0 and ip == 0:
                    ax_dir.append(ax)

                label = '(%i%i%i)' % (hkl[0], hkl[1], hkl[2])
                if ixy == 0:
                    x = ref
                    y = lat
                    x, y = dat_lib.trim(x, ref=lat)
                if ixy == 1:
                    x = lat
                    y = ref
                    y, x = dat_lib.trim(y, ref=lat)

                ax.plot(x, y, label=label)

                if idir == 0 and ip == np - 1:
                    ax.legend(loc='best',
                              fontsize=8,
                              fancybox=True,
                              framealpha=0.5)
                    axes_label.__ehkl__(ax=ax, iopt=ixy, ft=15)
        mpl_lib.tune_x_lim(ax_ph, axis='x')
        mpl_lib.tune_x_lim(ax_dir, axis='y')
        mpl_lib.rm_inner(ax_ph)

    for iax in range(len(axs)):
        axs[iax].grid('on')