コード例 #1
0
    def test_sparse_solver(self):
        print(
            '\nChecking homogenisation with low-rank tensor approximations...')

        tic = Timer('homogenisation')
        N = 5
        for dim, material, kind in [(2, 0, 0), (2, 3, 1), (3, 1, 1),
                                    (3, 0, 2)]:
            print('dim={}, material={}, kind={}'.format(dim, material, kind))
            pars, pars_sparse = get_default_parameters(dim, N, material, kind)
            pars_sparse.debug = True
            pars_sparse.solver.update(dict(rank=5, maxiter=10))

            prt.disable()

            Aga, Agani, Agas, Aganis = get_material_coef(
                material, pars, pars_sparse)

            if material in [0, 3]:
                resP_Ga = homog_Ga_full_potential(Aga, pars)
                resS_Ga = homog_Ga_sparse(Agas, pars_sparse)

            if material in [1, 2, 4]:
                resP_GaNi = homog_GaNi_full_potential(Agani, Aga, pars)
                resS_GaNi = homog_GaNi_sparse(Aganis, Agas, pars_sparse)

            prt.enable()

            if material in [0, 3]:
                self.assertAlmostEqual(resP_Ga.Fu.mean(), 0)
                self.assertAlmostEqual(resS_Ga.Fu.mean(), 0)
                self.assertAlmostEqual(np.abs(resP_Ga.AH - resS_Ga.AH),
                                       0,
                                       delta=1e-4)

            if material in [1, 2, 4]:
                self.assertAlmostEqual(resP_GaNi.Fu.mean(), 0)
                self.assertAlmostEqual(resS_GaNi.Fu.mean(), 0)
                self.assertAlmostEqual(np.abs(resP_GaNi.AH - resS_GaNi.AH),
                                       0,
                                       delta=1e-4)

        tic.measure()
        print('...ok')
コード例 #2
0
        resP_Ga = homog_Ga_full_potential(Aga, pars)
        resP_GaNi = homog_GaNi_full_potential(Agani, Aga, pars)

        ############ SPARSE SOLUTIONS ###############
        sols_Ga_Spar = list()
        sols_GaNi_Spar = list()

        for sol_rank in sol_rank_range_set['{}'.format(
                dim)]:  # rank of solution vector
            print('solution rank={}'.format(sol_rank))
            pars_sparse.solver.update(dict(rank=sol_rank))

            sols_Ga.append(resP_Ga.AH)
            sols_GaNi.append(resP_GaNi.AH)

            resS_Ga = homog_Ga_sparse(Agas, pars_sparse)
            sols_Ga_Spar.append(resS_Ga.AH)

            resS_GaNi = homog_GaNi_sparse(Aganis, Agas, pars_sparse)
            sols_GaNi_Spar.append(resS_GaNi.AH)

        pickle.dump(
            sols_Ga_Spar,
            open(
                "{}/dim_{}/mat_{}/sols_Ga_Spar_{}_{}_{}.p".format(
                    data_folder, dim, material, kind, N,
                    pars_sparse.solver['method']), "wb"))
        pickle.dump(
            sols_GaNi_Spar,
            open(
                "{}/dim_{}/mat_{}/sols_GaNi_Spar_{}_{}_{}.p".format(