diff --git a/DiffractionGratings/grating2D.geo b/DiffractionGratings/grating2D.geo
index f79812265015fe37ef2906aa2167977be565e7ca..88cc14a14e7a463d42c0824e66890eff7f97b3f9 100644
--- a/DiffractionGratings/grating2D.geo
+++ b/DiffractionGratings/grating2D.geo
@@ -1,12 +1,25 @@
-////////////////////////////////
-// Author : Guillaume Demesy  //
-////////////////////////////////
+// Copyright (C) 2019 Guillaume Demésy
+//
+// This file is part of the model grating2D.pro.
+// 
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+// 
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with This program. If not, see <https://www.gnu.org/licenses/>.
 
 // Include "grating2D_data_AnisotropicGrating.geo";
-Include "grating2D_data_LamellarGrating.geo";
+// Include "grating2D_data_LamellarGrating.geo";
 // Include "grating2D_data_PhotonicCrystalSlab.geo";
 // Include "grating2D_data_ResonantGrating.geo";
-// Include "grating2D_data.geo";
+Include "grating2D_data_plasmonics.geo";
 
 paramaille_rods = lambda_min*nm/(paramaille*paramaille_scale_rods);
 lc_rod_out      = lambda_min*nm/(paramaille*paramaille_scale_rod_out);
diff --git a/DiffractionGratings/grating2D.pro b/DiffractionGratings/grating2D.pro
index 3154601175fbbf8ca8f7bee61afb6976f29db3dd..af2c9c742caf84fd9034d13131259074cec10017 100644
--- a/DiffractionGratings/grating2D.pro
+++ b/DiffractionGratings/grating2D.pro
@@ -1,12 +1,27 @@
-////////////////////////////////
-// Author : Guillaume Demesy  //
-////////////////////////////////
+// Copyright (C) 2019 Guillaume Demésy
+//
+// This file is part of the model grating2D.pro.
+// 
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+// 
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with This program. If not, see <https://www.gnu.org/licenses/>.
 
+
+/** Select the config. **/
 // Include "grating2D_data_AnisotropicGrating.geo";
-Include "grating2D_data_LamellarGrating.geo";
+// Include "grating2D_data_LamellarGrating.geo";
 // Include "grating2D_data_PhotonicCrystalSlab.geo";
 // Include "grating2D_data_ResonantGrating.geo";
-// Include "grating2D_data.geo";
+Include "grating2D_data_plasmonics.geo";
 
 Include "grating2D_materials.pro";
 
diff --git a/DiffractionGratings/grating2D_data.geo b/DiffractionGratings/grating2D_data.geo
deleted file mode 100644
index 61f52599e53260ce62bd3965a3ac33e672ac67aa..0000000000000000000000000000000000000000
--- a/DiffractionGratings/grating2D_data.geo
+++ /dev/null
@@ -1,127 +0,0 @@
-///////////////////////////////////
-// Author : Guillaume Demesy     //
-// grating2D_data_plasmonic.geo //
-///////////////////////////////////
-
-nm       = 1000.;
-ep0 = 8.854187817e-3*nm;
-mu0      = 400.*Pi*nm;
-cel      = 1.0/(Sqrt[ep0 * mu0]);
-deg2rad  = Pi/180;
-
-pp0        = "1Geometry/0";
-pp01       = "1Geometry/01Stack thicknesses/";
-pp02       = "1Geometry/02Diffractive element dimensions/00";
-pp1        = "2Materials/0";
-pp2        = "3Incident plane wave/0";
-pp2b       = StrCat[pp1,"1Custom non-dispersive materials/6Custom anisotropic rods/"];
-pp3        = "4Mesh size and PMLs parameters/0";
-pp4        = "5Post plot options/0";
-close_menu = 0;
-colorro    = "LightGrey";
-colorpp    = "Ivory";
-colorpp2   = "Ivory";
-colorpp01  = "Ivory";
-colorpp02  = "Ivory";
-
-lambda_min = 600;
-lambda_max = 800;
-nb_lambdas = 5;
-
-DefineConstant[
-  flag_Hparallel = {1   , Name StrCat[pp2, "2polarization case"], Choices {0="E //",1="H //"}, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-	theta_deg      = {30  , Name StrCat[pp2, "1incident plane wave angle [deg]"] , Highlight Str[colorpp2], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  nb_orders      = {2   , Name StrCat[pp2, "3number of post-processed diffraction orders"] , Highlight Str[colorpp2], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"}
-];
-
-DefineConstant[
-  d           = {350 , Name StrCat[pp0  , "0grating period [nm]"]        , Highlight Str[colorpp]  , Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-  h_sub  		  = {300 , Name StrCat[pp01 , "1substrate thickness [nm]"]       , Highlight Str[colorpp01], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  h_layer_dep	= {20  , Name StrCat[pp01 , "2deposit layer thickness [nm]"] , Highlight Str[colorpp01], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  h_layer_cov	= {15  , Name StrCat[pp01 , "3cover layer thickness [nm]"]   , Highlight Str[colorpp01], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  h_sup  		  = {300 , Name StrCat[pp01 , "4superstrate thickness [nm]"]     , Highlight Str[colorpp01], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-
-  Flag_glue_rod_subs   = {   0, Name StrCat[pp02, "0glue rod to substrate?"] , Choices {0,1}, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} ,
-  Shape_rod            = {   1, Name StrCat[pp02, "1rod section shape"]      , Choices {0="Trapezoidal",1="Ellipsoidal"}, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} ,
-  N_rods   	           = {   3, Name StrCat[pp02, "2number of rods [-]"]     , Highlight Str[colorpp02], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},    
-  w_rod_bot   	       = { 200, Name StrCat[pp02, "3bottom rod width if trapz rod OR x-diameter if elliptic rod [nm]"]         , Highlight Str[colorpp02], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  w_rod_top	           = { 500, Name StrCat[pp02, "4top rod width if trapz rod [nm]"]         , Highlight Str[colorpp02], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  h_rod                = {  50, Name StrCat[pp02 ,"5rod thickness if trapz rod OR y-diameter if elliptic rod [nm]"]     , Highlight Str[colorpp02], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  dy        	         = { 250, Name StrCat[pp02 ,"6embedding layer thickness OR 'period' along y if number of rods >1, [nm]"]    , Highlight Str[colorpp02], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},    
-  Rot_rod 	           = {  30, Name StrCat[pp02, "7rotate rod [deg]"]       , Highlight Str[colorpp02], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  Flag_chirp_rod_angle = {   1, Name StrCat[pp02, "8chirp angle?"]             , Choices {0,1}, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} ,
-  Flag_chirp_rod_size  = {   1, Name StrCat[pp02, "9chirp size?"]              , Choices {0,1}, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} ,
-  Chirp_rod            = {  90, Name StrCat[pp02, "91chirp size factor [%]"]    , Highlight Str[colorpp02], Closed close_menu , ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-	
-  flag_mat_1  = { 1 , Name StrCat[pp1, "0Dispersive materials/0material substrate"]     , Choices {0="Air",1="SiO2",2="Ag (palik)",3="Al (palik)",4="Au (johnson)",5="Nb2O5",6="ZnSe",7="MgF2",8="TiO2",9="PMMA",10="Si",11="ITO",12="Cu (palik)",13="custom 1 (lossless)",14="custom 2",15="custom 3"}, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  flag_mat_2  = { 6 , Name StrCat[pp1, "0Dispersive materials/1material deposit layer"] , Choices {0="Air",1="SiO2",2="Ag (palik)",3="Al (palik)",4="Au (johnson)",5="Nb2O5",6="ZnSe",7="MgF2",8="TiO2",9="PMMA",10="Si",11="ITO",12="Cu (palik)",13="custom 1 (lossless)",14="custom 2",15="custom 3"}, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  flag_mat_3  = { 6 , Name StrCat[pp1, "0Dispersive materials/2material embedding rod"] , Choices {0="Air",1="SiO2",2="Ag (palik)",3="Al (palik)",4="Au (johnson)",5="Nb2O5",6="ZnSe",7="MgF2",8="TiO2",9="PMMA",10="Si",11="ITO",12="Cu (palik)",13="custom 1 (lossless)",14="custom 2",15="custom 3"}, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  flag_mat_4  = { 2 , Name StrCat[pp1, "0Dispersive materials/3material rods"]          , Choices {0="Air",1="SiO2",2="Ag (palik)",3="Al (palik)",4="Au (johnson)",5="Nb2O5",6="ZnSe",7="MgF2",8="TiO2",9="PMMA",10="Si",11="ITO",12="Cu (palik)",13="custom 1 (lossless)",14="custom 2",15="custom 3"}, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  flag_mat_5  = { 1 , Name StrCat[pp1, "0Dispersive materials/4material cover layer"]   , Choices {0="Air",1="SiO2",2="Ag (palik)",3="Al (palik)",4="Au (johnson)",5="Nb2O5",6="ZnSe",7="MgF2",8="TiO2",9="PMMA",10="Si",11="ITO",12="Cu (palik)",13="custom 1 (lossless)",14="custom 2",15="custom 3"}, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  flag_mat_6  = { 0 , Name StrCat[pp1, "0Dispersive materials/5material superstrate"]   , Choices {0="Air",1="SiO2",6="ZnSe",7="MgF2",8="TiO2",9="PMMA",13="custom 1 (lossless)"}, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-
-  epsr_custom_1_re  = { 8.9     , Name StrCat[pp1 , "1Custom non-dispersive materials/0custom relative permittivity 1 (real part)"] , Highlight Str[colorpp]  , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-  epsr_custom_1_im  = { 0       , Name StrCat[pp1 , "1Custom non-dispersive materials/1custom relative permittivity 1 (imag part)"] , ReadOnly 1, Highlight Str[colorro]  , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} ,
-  epsr_custom_2_re  = {-44.9757 , Name StrCat[pp1 , "1Custom non-dispersive materials/2custom relative permittivity 2 (real part)"] , Highlight Str[colorpp]  , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-  epsr_custom_2_im  = { 2.9524  , Name StrCat[pp1 , "1Custom non-dispersive materials/3custom relative permittivity 2 (imag part)"] , Highlight Str[colorpp]  , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-  epsr_custom_3_re  = { 3       , Name StrCat[pp1 , "1Custom non-dispersive materials/4custom relative permittivity 3 (real part)"] , Highlight Str[colorpp]  , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-  epsr_custom_3_im  = { 0.3    , Name StrCat[pp1 , "1Custom non-dispersive materials/5custom relative permittivity 3 (imag part)"] , Highlight Str[colorpp]  , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-	
-  Flag_aniso              = {     0 , Name StrCat[pp2b , "0Enable anisotropy for rods? (overrides material rods above)"] , Choices {0,1} , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} ,
-  epsr_custom_anisoXX_re  = { 2.592 , Name StrCat[pp2b , "1 epsilonr XX re"] , Highlight Str[colorpp]                                    , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-  epsr_custom_anisoXX_im  = { 0     , Name StrCat[pp2b , "2 epsilonr XX im"] , Highlight Str[colorpp]                                    , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-  epsr_custom_anisoYY_re  = { 2.592 , Name StrCat[pp2b , "3 epsilonr YY re"] , Highlight Str[colorpp]                                    , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-  epsr_custom_anisoYY_im  = { 0     , Name StrCat[pp2b , "4 epsilonr YY im"] , Highlight Str[colorpp]                                    , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-  epsr_custom_anisoZZ_re  = { 2.829 , Name StrCat[pp2b , "5 epsilonr ZZ re"] , Highlight Str[colorpp]                                    , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-  epsr_custom_anisoZZ_im  = { 0     , Name StrCat[pp2b , "6 epsilonr ZZ im"] , Highlight Str[colorpp]                                    , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-  epsr_custom_anisoXY_re  = { 0.251 , Name StrCat[pp2b , "7 epsilonr XY re"] , Highlight Str[colorpp]                                    , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-  epsr_custom_anisoXY_im  = { 0     , Name StrCat[pp2b , "8 epsilonr XY im"] , Highlight Str[colorpp]                                    , Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"} , 
-
-  h_pmltop                    = {lambda_max, Name StrCat[pp3, "0top PML size [nm]"] ,  ReadOnly 1, Highlight Str[colorro], ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  h_pmlbot                    = {lambda_max, Name StrCat[pp3, "1bottom PML size [nm]"] ,  ReadOnly 1, Highlight Str[colorro], ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  Flag_o2_interp              = {1         , Name StrCat[pp3, "2Second order interpolation?"] , Choices {0,1}, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  Flag_o2_geom                = {0         , Name StrCat[pp3, "3Second order mesh?"] , Choices {0,1}, Visible 0, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  paramaille                  = {10 , Name StrCat[pp3, "4nb of mesh elements per wavelength [-]"   ] , ReadOnly 0, Highlight Str[colorpp], ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  paramaille_scale_sub        = {1  , Name StrCat[pp3, "6Custom mesh parameters/refine substrate [-]"    ] , ReadOnly 0, Highlight Str[colorpp], Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  paramaille_scale_layer_dep  = {1  , Name StrCat[pp3, "6Custom mesh parameters/refine deposit layer [-]"] , ReadOnly 0, Highlight Str[colorpp], Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  paramaille_scale_rod_out    = {1  , Name StrCat[pp3, "6Custom mesh parameters/refine embedding [-]"    ] , ReadOnly 0, Highlight Str[colorpp], Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  paramaille_scale_rods       = {3  , Name StrCat[pp3, "6Custom mesh parameters/refine rods [-]"       ] , ReadOnly 0, Highlight Str[colorpp], Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  paramaille_scale_layer_cov  = {1  , Name StrCat[pp3, "6Custom mesh parameters/refine cover layer [-]"  ] , ReadOnly 0, Highlight Str[colorpp], Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-  paramaille_scale_sup        = {1  , Name StrCat[pp3, "6Custom mesh parameters/refine superstrate [-]"  ] , ReadOnly 0, Highlight Str[colorpp], Closed 1, ServerAction "Reset GetDP/T0, GetDP/R0, GetDP/Lambda_step, GetDP/total absorption"},
-
-  multiplot    = {0, Choices{0,1}, Name StrCat[pp4, "Plot solution on multiple periods"]},
-  plotRTgraphs = {1, Choices{0,1}, Name StrCat[pp4, "Plot R and T"]}
-] ;
-
-d              = d            * nm;
-dy             = dy           * nm;
-h_sup          = h_sup  		  * nm;
-h_sub          = h_sub  		  * nm;
-h_layer_dep	   = h_layer_dep	* nm;
-h_layer_cov	   = h_layer_cov	* nm;
-w_rod_bot      = w_rod_bot    * nm;
-w_rod_top      = w_rod_top    * nm;
-h_rod          = h_rod        * nm;
-h_pmltop       = h_pmltop     * nm;
-h_pmlbot       = h_pmlbot     * nm;
-paramaille_pml = 0.6667*paramaille;
-
-PMLBOT   = 1000;
-SUB      = 2000;
-LAYERDEP = 3000;
-RODOUT = 4000;
-For k2 In {0:N_rods-1:1}
-  ROD~{k2}=5000+1+k2;
-EndFor
-LAYERCOV = 6000;
-SUP      = 7000;
-PMLTOP   = 8000;
-
-SURF_BLOCH_X_LEFT  = 101;
-SURF_BLOCH_X_RIGHT = 102;
-SURF_INTEG_SUP1    = 121;
-SURF_INTEG_SUB1    = 131;
-SURF_INTEG_SUP2    = 122;
-SURF_INTEG_SUB2    = 132;
-SURF_PLOT          = 141;
-PRINT_POINT        = 10000;
diff --git a/DiffractionGratings/grating3D.geo b/DiffractionGratings/grating3D.geo
index 782394f99fad2e395c7675ef881645f99251869c..5ca306b8eb978529ef179032ce4c2c11c6b2421e 100644
--- a/DiffractionGratings/grating3D.geo
+++ b/DiffractionGratings/grating3D.geo
@@ -1,9 +1,20 @@
-// test_case = "pyramid";
-// test_case = "hole";
-// test_case = "torus";
-// test_case = "halfellipsoid";
-// test_case = "checker";
-// test_case = "bisin";
+// Copyright (C) 2019 Guillaume Demésy
+//
+// This file is part of the model grating3D.pro.
+// 
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+// 
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with This program. If not, see <https://www.gnu.org/licenses/>.
+
 Include StrCat["grating3D_data_",test_case,".geo"];
 
 SetFactory("OpenCASCADE");
diff --git a/DiffractionGratings/grating3D.pro b/DiffractionGratings/grating3D.pro
index f24ac18450669285c22ee4219a074a41c60e4105..a4750c48b2c5c7cd76f11ea7e28f95223f8f8b95 100644
--- a/DiffractionGratings/grating3D.pro
+++ b/DiffractionGratings/grating3D.pro
@@ -1,9 +1,20 @@
-// test_case = "pyramid";
-// test_case = "hole";
-// test_case = "torus";
-// test_case = "halfellipsoid";
-// test_case = "checker";
-// test_case = "bisin";
+// Copyright (C) 2019 Guillaume Demésy
+//
+// This file is part of the model grating3D.pro.
+// 
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+// 
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with This program. If not, see <https://www.gnu.org/licenses/>.
+
 Include StrCat["grating3D_data_",test_case,".geo"];
 Include "grating3D_materials.pro"