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')
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(