def getStress(self, deformation, gaussIter):
     if gaussIter == 0:
         self.reset()
     #sigma = dot(self.H, deformation.strain)
     #return sigma, self.H
     if self.isHomogenized[gaussIter] == 0:  # Not yet done homogenization for this material point
         print("Homogenization step. We are in the Assemble Tangent Stiffness Matrix.")
         # import micro2D2 as mic2D
         # from microscale.fftstandard import micro2D_smalldeformation_elasticity as mic2D
         # _, _, _, _, sigma, _, C_eff = mic2D.solve_micro2D(self.phase, deformation.strain)
         # C_eff, sigma = mic2D.homogenize_microstructure(deformation.strain)
         # F = solve_nonlinear_GalerkinFFT(domain='inclusion', kind='neo-hookean', mode='stiffness')
         average_energy, P_homogenized, C_homogenized2D = micro2D.solve_nonlinear_GalerkinFFT(F_macro=deformation.F, domain='inclusion', kind='neo-hookean2', mode='everything') # Neo-Hookean2
         # average_energy, P_homogenized, C_homogenized2D = micro2D.solve_nonlinear_GalerkinFFT(F_macro=deformation.F, domain='inclusion', kind='mooney-rivlin', mode='everything')
         print("Effective tangent moduli: ", C_homogenized2D)
         self.effectiveModuli[gaussIter, :, :] = C_homogenized2D
         self.sigma[gaussIter, :, :] = P_homogenized
         self.isHomogenized[gaussIter] = 1
     elif self.isHomogenized[gaussIter] == 1:
         print("Homogenization already. We are in the Assemble Internal Force.")
     return self.sigma[gaussIter, :], self.effectiveModuli[gaussIter, :, :]
Beispiel #2
0
 except IOError as e:
     print("Can't open file :" + e.filename)
 W_FFT = np.zeros([numberM, numberM, numberM, numberM])
 P_FFT = np.zeros([2, 2, numberM, numberM, numberM, numberM])
 C_FFT = np.zeros([4, 4, numberM, numberM, numberM, numberM])
 for i in range(1):
     for j in range(numberM):
         for k in range(numberM):
             for l in range(1):
                 valF12 = F12grid[j, k]
                 valF21 = F21grid[j, k]
                 F_macro = np.array([[valF11, valF12], [valF21,
                                                        valF22]])
                 energy_macro = mic2D.solve_nonlinear_GalerkinFFT(
                     F_macro,
                     kind='neo-hookean2',
                     mode='energy',
                     domain='inclusion')
                 if energy_macro != -999999 and energy_macro != -888888 and energy_macro != -777777:
                     W_FFT[
                         i, j, k,
                         l], P_FFT[:, :, i, j, k,
                                   l], C_FFT[:, :, i, j, k,
                                             l] = mic2D.solve_nonlinear_GalerkinFFT(
                                                 F_macro,
                                                 kind='neo-hookean2',
                                                 mode='everything',
                                                 domain='inclusion')
                     print(W_FFT[i, j, k, l])
                     # f.write("%0.12f;\t%0.12f;\t%0.12f;\t%0.12f;\t%0.12f\n" % (F_macro[0, 0], F_macro[0, 1], F_macro[1, 0], F_macro[1, 1], W_FFT[i, j, k, l]))
                     fileFFT.write("%0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f\n\r" \
        C_FFT = np.zeros([4, 4, numberM, numberM, numberM, numberM])
        for i in range(1):
            for j in range(numberM):
                for k in range(numberM):
                    for l in range(1):
                        valF12 = F12grid[j, k]
                        valF21 = F21grid[j, k]
                        F_macro = np.array([[valF11, valF12], [valF21,
                                                               valF22]])
                        W_FFT[
                            i, j, k,
                            l], P_FFT[:, :, i, j, k,
                                      l], C_FFT[:, :, i, j, k,
                                                l] = mic2D.solve_nonlinear_GalerkinFFT(
                                                    F_macro,
                                                    kind='neo-hookean',
                                                    mode='everything',
                                                    domain='laminate')
                        print(W_FFT[i, j, k, l])
                        # f.write("%0.12f;\t%0.12f;\t%0.12f;\t%0.12f;\t%0.12f\n" % (F_macro[0, 0], F_macro[0, 1], F_macro[1, 0], F_macro[1, 1], W_FFT[i, j, k, l]))
                        fileFFT.write("%0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f; %0.12f\n\r" \
                        % (F_macro[0, 0], F_macro[0, 1], F_macro[1, 0], F_macro[1, 1], W_FFT[i, j, k, l], \
                           P_FFT[0, 0, i, j, k, l], P_FFT[0, 1, i, j, k, l], P_FFT[1, 0, i, j, k, l], P_FFT[1, 1, i, j, k, l], \
                           C_FFT[0, 0, i, j, k, l], C_FFT[0, 1, i, j, k, l], C_FFT[0, 2, i, j, k, l], C_FFT[0, 3, i, j, k, l], \
                           C_FFT[1, 0, i, j, k, l], C_FFT[1, 1, i, j, k, l], C_FFT[1, 2, i, j, k, l], C_FFT[1, 3, i, j, k, l], \
                           C_FFT[2, 0, i, j, k, l], C_FFT[2, 1, i, j, k, l], C_FFT[2, 2, i, j, k, l], C_FFT[2, 3, i, j, k, l], \
                           C_FFT[3, 0, i, j, k, l], C_FFT[3, 1, i, j, k, l], C_FFT[3, 2, i, j, k, l], C_FFT[3, 3, i, j, k, l]))
        fileFFT.close()
    # --------------------------------------------------- END RUN FFT ---------------------------------------------------

    # ---------------------------------------------------------------------------------------------
def create_2Ddata_largedeformation_elasticity_laminate(fileinput):
    F11_min, F11_max = (0.7, 1.3)
    # F12_min, F12_max = (-0.3, 0.3)
    # F21_min, F21_max = (-0.3, 0.3)
    F12_min, F12_max = (0, 0)
    F21_min, F21_max = (0, 0)
    F22_min, F22_max = (0.7, 1.3)
    number_data = 5 * (10**4)
    # uniform probability distribution
    data_uniform_F11 = np.random.uniform(F11_min, F11_max, number_data)
    data_uniform_F12 = np.random.uniform(F12_min, F12_max, number_data)
    data_uniform_F21 = np.random.uniform(F21_min, F21_max, number_data)
    data_uniform_F22 = np.random.uniform(F22_min, F22_max, number_data)
    # plot distribution
    ax = sns.distplot(data_uniform_F11,
                      bins=100,
                      kde=False,
                      color='skyblue',
                      hist_kws={
                          "linewidth": 15,
                          'alpha': 1
                      })
    ax.set(xlabel='Macro deformation gradient F11',
           ylabel='F11 data distribution')
    try:
        filename = fileinput
        f = open(filename, 'w+')
    except IOError as e:
        print("Can't open file :" + e.filename)
    # run each test case
    f.write(
        '############################ MICRO SIMULATION INFORMATION ##################################\n'
    )
    f.write('No\t\tF11\t\tF12\t\tF21\t\tF22\t\tEnergy\n')
    for i in range(number_data):
        print('data %d' % i)
        Fmacro = np.zeros([2, 2])
        Fmacro[0, 0] = data_uniform_F11[i]
        Fmacro[0, 1] = data_uniform_F12[i]
        Fmacro[1, 0] = data_uniform_F21[i]
        Fmacro[1, 1] = data_uniform_F22[i]
        detFmacro = np.linalg.det(Fmacro)
        if detFmacro < 0:
            print("With this F the cell is penetrable !!!")
            f.write("%d;\t%0.12f;\t%0.12f;\t%0.12f;\t%0.12f;\t%s\n" %
                    (i, Fmacro[0, 0], Fmacro[0, 1], Fmacro[1, 0], Fmacro[1, 1],
                     'Penetrable'))
            continue
        energy_macro = mic2D.solve_nonlinear_GalerkinFFT(Fmacro,
                                                         kind='neo-hookean',
                                                         mode='energy')
        if energy_macro == -999999:
            print(
                "With this F the cell is penetrable - with detFmacro < 0 !!!")
            f.write("%d;\t%0.12f;\t%0.12f;\t%0.12f;\t%0.12f;\t%s\n" %
                    (i, Fmacro[0, 0], Fmacro[0, 1], Fmacro[1, 0], Fmacro[1, 1],
                     'Penetrable-detFmacro'))
        elif energy_macro == -888888:
            print(
                "With this F the cell is penetrable - with detFmicro < 0 !!!")
            f.write("%d;\t%0.12f;\t%0.12f;\t%0.12f;\t%0.12f;\t%s\n" %
                    (i, Fmacro[0, 0], Fmacro[0, 1], Fmacro[1, 0], Fmacro[1, 1],
                     'Penetrable-detFmicro'))
        elif energy_macro == -777777:
            print("The programme is not convergent !!!")
            f.write("%d;\t%0.12f;\t%0.12f;\t%0.12f;\t%0.12f;\t%s\n" %
                    (i, Fmacro[0, 0], Fmacro[0, 1], Fmacro[1, 0], Fmacro[1, 1],
                     'Not-Convergent'))
        else:
            f.write("%d;\t%0.12f;\t%0.12f;\t%0.12f;\t%0.12f;\t%0.12f\n" %
                    (i, Fmacro[0, 0], Fmacro[0, 1], Fmacro[1, 0], Fmacro[1, 1],
                     energy_macro))
    f.write(
        '################################ END OF FILE ################################################'
    )
    f.close()
    plt.show()