Skip to content
Snippets Groups Projects
Select Git revision
  • 3f73249a8770896b03a093b3fe10bb7cc62f42e0
  • master default
  • cgnsUnstructured
  • partitioning
  • poppler
  • HighOrderBLCurving
  • gmsh_3_0_4
  • gmsh_3_0_3
  • gmsh_3_0_2
  • gmsh_3_0_1
  • gmsh_3_0_0
  • gmsh_2_16_0
  • gmsh_2_15_0
  • gmsh_2_14_1
  • gmsh_2_14_0
  • gmsh_2_13_2
  • gmsh_2_13_1
  • gmsh_2_12_0
  • gmsh_2_11_0
  • gmsh_2_10_1
  • gmsh_2_10_0
  • gmsh_2_9_3
  • gmsh_2_9_2
  • gmsh_2_9_1
  • gmsh_2_9_0
  • gmsh_2_8_6
26 results

PViewDataGModel.cpp

Blame
  • Forked from gmsh / gmsh
    Source project has a limited visibility.
    topopt_conical_main.py 3.61 KiB
    import numpy as np
    import nlopt
    import resolution_functions
    import optimization_functions
    import matplotlib.pyplot as plt
    import os
    import meshio as mio
    from config_topopt_conical_data import *
    
    '''
    © Simon Ans
    File : topopt_conical_main.py
    
    Optimize the permittivities on the mesh to maximize the reflection efficiencies
    for different wavelengths on a given order.
    '''
    
    if __name__=="__main__":
        
        ## Prepare the computation ------------------------------------------------------------------------------------------------------------
    
        # Parallelization of the Finite Element Method
        os.system("export OPENBLAS_NUM_THREADS=%d"%num_threads_resolution)
    
        # Create the paramater file and the mesh
        resolution_functions.set_data()
        resolution_functions.generate_mesh()
        resolution_functions.make_computation_directories()
        
        ## Density field ----------------------------------------------------------------------------------------------------------------------
    
        msh_density_init = optimization_functions.init_density(res_folder_name + "template_density_table.pos", "rho_opt.pos", analytic_init_density)
        #msh_density_init = np.loadtxt("rho_opt.txt")
    
        if (Flag_test == 1):
            ## Test of the adjoint method -----------------------------------------------------------------------------------------------------
            if (Flag_design_metal == 1):
                optimization_functions.test_jacobian(msh_density_init, 7)
                #optimization_functions.test_jacobian_soloPoint(msh_density_init, 7, 40, 300)
            else :
                optimization_functions.test_jacobian(msh_density_init, 3)
                #optimization_functions.test_jacobian_soloPoint(msh_density_init, 3, 40, 350)
            resolution_functions.print_sum_energies()
    
        else :
            ## Optimization process -----------------------------------------------------------------------------------------------------------
            
            problem_size = np.size(msh_density_init)
            # Choose the MMA optimization (actually GCMMA from the 2002 paper of Svanberg)
            opt = nlopt.opt(nlopt.LD_MMA, problem_size)
    
            # Define the target
            opt.set_min_objective(optimization_functions.target)
    
            # Boundaries
            lb_array = low_bnd*np.ones(problem_size)
            ub_array = up_bnd *np.ones(problem_size)
            opt.set_lower_bounds(lb_array)
            opt.set_upper_bounds(ub_array)
    
            # Stopping criteria
            opt.set_ftol_abs(tol)    
            opt.set_maxeval(maxiter)
    
            if (Flag_binarize == 1):
                # Optimization with binarization
                for iter_bin in range(nb_binarizations+1):
                    np.savetxt("iter_bin.txt", np.array([iter_bin]))
                    print("######                Binarization iteration %d...            ######"%iter_bin)
                    print("----------------------------------------------------------------------------------------------\n")
                    rho_opt = opt.optimize(msh_density_init)
                    msh_density_init = rho_opt.copy()
                optimization_functions.final_binarization(res_folder_name + "template_density_table.pos", "rho_opt.pos")
            else :
                np.savetxt("iter_bin.txt", np.array([0]))
                rho_opt = opt.optimize(msh_density_init)
    
            plot_msh_density(rho_opt, "rho_opt.pdf")
            plot_msh_density(np.loadtxt("jacobian.txt"), "jac_opt.pdf")
            
            # Print the optimization outcome
            sum_energies = resolution_functions.print_sum_energies()
            min_value = opt.last_optimum_value()
            successful_termination = opt.last_optimize_result()
            optimization_functions.feedback_result(min_value, successful_termination)