From 52643ce997370f31a930018e2f484cd07cd6410e Mon Sep 17 00:00:00 2001 From: Guillaume Demesy <guillaume.demesy@fresnel.fr> Date: Tue, 19 Nov 2019 08:23:29 +0100 Subject: [PATCH] spline for bi-sin --- DiffractionGratings/grating3D.geo | 183 +++++++++++++++--------------- 1 file changed, 92 insertions(+), 91 deletions(-) diff --git a/DiffractionGratings/grating3D.geo b/DiffractionGratings/grating3D.geo index 26a7400..64abb0d 100644 --- a/DiffractionGratings/grating3D.geo +++ b/DiffractionGratings/grating3D.geo @@ -96,99 +96,100 @@ If (tag_geom==5) EndIf If (tag_geom==6) - nsin = 2; - pp=newp; - ll=newl; - ss=news; + nsin = 10; For i In {0:nsin} - xx~{i} = -period_x/2+i*period_x/(nsin); - yy~{i} = -period_y/2+i*period_y/(nsin); + xx1~{i} = -period_x/2+i*period_x/2/(nsin-1); + xx2~{i} = i*period_x/2/(nsin-1); EndFor - lss={}; + pp=newp;//pp=pp-1; For i In {0:nsin-1} - For j In {0:nsin-1} - pp=newp;ll=newl;lll=newll; - ssij=ss+i*nsin+j; - Point(pp+0) = {xx~{i},yy~{j},rz/4*(Cos(2*Pi*xx~{i}/period_x)+Cos(2*Pi*yy~{j}/period_y))+hh_L_3+thick_L_3/2}; - Point(pp+1) = {xx~{i+1},yy~{j},rz/4*(Cos(2*Pi*xx~{i+1}/period_x)+Cos(2*Pi*yy~{j}/period_y))+hh_L_3+thick_L_3/2}; - Point(pp+2) = {xx~{i+1},yy~{j+1},rz/4*(Cos(2*Pi*xx~{i+1}/period_x)+Cos(2*Pi*yy~{j+1}/period_y))+hh_L_3+thick_L_3/2}; - Point(pp+3) = {xx~{i},yy~{j+1},rz/4*(Cos(2*Pi*xx~{i}/period_x)+Cos(2*Pi*yy~{j+1}/period_y))+hh_L_3+thick_L_3/2}; - Line(ll+0) = {pp,pp+1}; - Line(ll+1) = {pp+1,pp+2}; - Line(ll+2) = {pp+2,pp+3}; - Line(ll+3) = {pp+3,pp}; - // If(i==0) - // Line{ll} In Surface{25}; - // EndIf - Line Loop(lll) = {ll,ll+1,ll+2,ll+3}; - Surface(ssij) = {lll}; - lss(i*nsin+j) = ssij; - // Surface{ss} In Volume{5}; - EndFor + yy=-period_y/2; + Point(newp) = {xx1~{i},yy,rz/4*(Cos(2*Pi*xx1~{i}/period_x)+Cos(2*Pi*yy/period_y))+hh_L_3+thick_L_3/2}; + Point(newp) = {yy,xx1~{i},rz/4*(Cos(2*Pi*yy/period_x)+Cos(2*Pi*xx1~{i}/period_y))+hh_L_3+thick_L_3/2}; + yy=0; + Point(newp) = {xx1~{i},yy,rz/4*(Cos(2*Pi*xx1~{i}/period_x)+Cos(2*Pi*yy/period_y))+hh_L_3+thick_L_3/2}; + Point(newp) = {yy,xx1~{i},rz/4*(Cos(2*Pi*yy/period_x)+Cos(2*Pi*xx1~{i}/period_y))+hh_L_3+thick_L_3/2}; + yy=period_y/2; + Point(newp) = {xx1~{i},yy,rz/4*(Cos(2*Pi*xx1~{i}/period_x)+Cos(2*Pi*yy/period_y))+hh_L_3+thick_L_3/2}; + Point(newp) = {yy,xx1~{i},rz/4*(Cos(2*Pi*yy/period_x)+Cos(2*Pi*xx1~{i}/period_y))+hh_L_3+thick_L_3/2}; + yy=-period_y/2; + Point(newp) = {xx2~{i},yy,rz/4*(Cos(2*Pi*xx2~{i}/period_x)+Cos(2*Pi*yy/period_y))+hh_L_3+thick_L_3/2}; + Point(newp) = {yy,xx2~{i},rz/4*(Cos(2*Pi*yy/period_x)+Cos(2*Pi*xx2~{i}/period_y))+hh_L_3+thick_L_3/2}; + yy=0; + Point(newp) = {xx2~{i},yy,rz/4*(Cos(2*Pi*xx2~{i}/period_x)+Cos(2*Pi*yy/period_y))+hh_L_3+thick_L_3/2}; + Point(newp) = {yy,xx2~{i},rz/4*(Cos(2*Pi*yy/period_x)+Cos(2*Pi*xx2~{i}/period_y))+hh_L_3+thick_L_3/2}; + yy=period_y/2; + Point(newp) = {xx2~{i},yy,rz/4*(Cos(2*Pi*xx2~{i}/period_x)+Cos(2*Pi*yy/period_y))+hh_L_3+thick_L_3/2}; + Point(newp) = {yy,xx2~{i},rz/4*(Cos(2*Pi*yy/period_x)+Cos(2*Pi*xx2~{i}/period_y))+hh_L_3+thick_L_3/2}; EndFor - BooleanUnion { Surface{lss(0)}; Delete; }{ Surface{lss({1:#lss()-1})}; Delete; } - - // Line(305) = {25, 57}; - // Line(306) = {57, 34}; - // Line(307) = {29, 167}; - // Line(308) = {167, 38}; - // Line(309) = {31, 177}; - // Line(310) = {177, 40}; - // Line(311) = {36, 78}; - // Line(312) = {78, 27}; - -EndIf -Coherence; -// // // Physical Surface("ENDPML",770) = {69,37}; - -Call SetPBCs; - -Physical Volume("PMLBOT" ,1) = {1}; -Physical Volume("LAYER_L6_SUBS" ,2) = {2}; -Physical Volume("LAYER_L5_LOW" ,3) = {3}; -Physical Volume("LAYER_L4_GUI" ,4) = {4}; -Physical Volume("LAYER_L3_EMB" ,5) = {10}; -Physical Volume("LAYER_L2_TOP" ,6) = {6}; -Physical Volume("LAYER_L1_SUPER",7) = {7}; -Physical Volume("PMLTOP" ,8) = {8}; -Physical Volume("SCAT" ,9) = {9}; - -Physical Surface("BXM" ,101 ) = masterX(); -Physical Surface("BXP" ,102 ) = slaveX(); -Physical Surface("BYM" ,201 ) = masterY(); -Physical Surface("BYP" ,202 ) = slaveY(); -Physical Surface("STOP",301 ) = Surface In BoundingBox{-period_x/2-e,-period_y/2-e, PML_top_hh-e,period_x/2+e, period_y/2+e, PML_top_hh+e}; -Physical Surface("SBOT",302 ) = Surface In BoundingBox{-period_x/2-e,-period_y/2-e, hh_L_6-e,period_x/2+e, period_y/2+e, hh_L_6+e}; -Physical Surface("SPMLTOP",401 ) = Surface In BoundingBox{-period_x/2-e,-period_y/2-e, PML_top_hh+PML_top-e,period_x/2+e, period_y/2+e, PML_top_hh+PML_top+e}; -Physical Surface("SPMLBOT",402 ) = Surface In BoundingBox{-period_x/2-e,-period_y/2-e, PML_bot_hh-e,period_x/2+e, period_y/2+e, PML_bot_hh+e}; - - -// Physical Volume("DEPOSIT" ,10000) = {11}; - -pts_PMLBOT() = PointsOf{ Physical Volume{1}; }; -pts_LAYER_L6() = PointsOf{ Physical Volume{2}; }; -pts_LAYER_L5() = PointsOf{ Physical Volume{3}; }; -pts_LAYER_L4() = PointsOf{ Physical Volume{4}; }; -pts_LAYER_L3() = PointsOf{ Physical Volume{5}; }; -pts_LAYER_L2() = PointsOf{ Physical Volume{6}; }; -pts_LAYER_L1() = PointsOf{ Physical Volume{7}; }; -pts_PMLTOP() = PointsOf{ Physical Volume{8}; }; -pts_ROD() = PointsOf{ Physical Volume{9}; }; -// pts_DEPOSIT() = PointsOf{ Physical Volume{10000}; }; -// For k In {0:#pts_PMLBOT()-1} -// Printf("blabal %g %f PML_lc;",pts_PMLBOT(k),PML_lc); -// EndFor - -Characteristic Length{:} = PML_lc; -Characteristic Length{pts_LAYER_L1()} = L1_lc/refine_mesh_L1; -Characteristic Length{pts_LAYER_L2()} = L2_lc/refine_mesh_L2; -Characteristic Length{pts_LAYER_L4()} = L4_lc/refine_mesh_L4; -Characteristic Length{pts_LAYER_L5()} = L5_lc/refine_mesh_L5; -Characteristic Length{pts_LAYER_L6()} = L6_lc/refine_mesh_L6; -Characteristic Length{pts_LAYER_L3()} = L3_lc/refine_mesh_L3; -Characteristic Length{pts_ROD()} = scat_lc; -If (tag_geom==3) - Mesh.Algorithm = 6; + For k In {1:11} + BSpline(newl) = {pp+k:pp+12*nsin:12}; + EndFor + BSpline(newl) = {pp :pp+12*(nsin-1):12}; + Line(newl) = {25,pp}; + Line(newl) = {34,pp}; + Line(newl) = {29,pp+5}; + Line(newl) = {38,pp+5}; + Line(newl) = {27,pp+4}; + Line(newl) = {36,pp+4}; + pp=newp; + Line(newl) = {40,pp-1}; + Line(newl) = {31,pp-1}; + Surface(news)= + {85,86,87,96}; EndIf -Mesh.SurfaceEdges = 0; -Mesh.VolumeEdges = 0; + +// Coherence; +// // // // Physical Surface("ENDPML",770) = {69,37}; + +// Call SetPBCs; + +// Physical Volume("PMLBOT" ,1) = {1}; +// Physical Volume("LAYER_L6_SUBS" ,2) = {2}; +// Physical Volume("LAYER_L5_LOW" ,3) = {3}; +// Physical Volume("LAYER_L4_GUI" ,4) = {4}; +// Physical Volume("LAYER_L3_EMB" ,5) = {10}; +// Physical Volume("LAYER_L2_TOP" ,6) = {6}; +// Physical Volume("LAYER_L1_SUPER",7) = {7}; +// Physical Volume("PMLTOP" ,8) = {8}; +// Physical Volume("SCAT" ,9) = {9}; + +// Physical Surface("BXM" ,101 ) = masterX(); +// Physical Surface("BXP" ,102 ) = slaveX(); +// Physical Surface("BYM" ,201 ) = masterY(); +// Physical Surface("BYP" ,202 ) = slaveY(); +// Physical Surface("STOP",301 ) = Surface In BoundingBox{-period_x/2-e,-period_y/2-e, PML_top_hh-e,period_x/2+e, period_y/2+e, PML_top_hh+e}; +// Physical Surface("SBOT",302 ) = Surface In BoundingBox{-period_x/2-e,-period_y/2-e, hh_L_6-e,period_x/2+e, period_y/2+e, hh_L_6+e}; +// Physical Surface("SPMLTOP",401 ) = Surface In BoundingBox{-period_x/2-e,-period_y/2-e, PML_top_hh+PML_top-e,period_x/2+e, period_y/2+e, PML_top_hh+PML_top+e}; +// Physical Surface("SPMLBOT",402 ) = Surface In BoundingBox{-period_x/2-e,-period_y/2-e, PML_bot_hh-e,period_x/2+e, period_y/2+e, PML_bot_hh+e}; + + +// // Physical Volume("DEPOSIT" ,10000) = {11}; + +// pts_PMLBOT() = PointsOf{ Physical Volume{1}; }; +// pts_LAYER_L6() = PointsOf{ Physical Volume{2}; }; +// pts_LAYER_L5() = PointsOf{ Physical Volume{3}; }; +// pts_LAYER_L4() = PointsOf{ Physical Volume{4}; }; +// pts_LAYER_L3() = PointsOf{ Physical Volume{5}; }; +// pts_LAYER_L2() = PointsOf{ Physical Volume{6}; }; +// pts_LAYER_L1() = PointsOf{ Physical Volume{7}; }; +// pts_PMLTOP() = PointsOf{ Physical Volume{8}; }; +// pts_ROD() = PointsOf{ Physical Volume{9}; }; +// // pts_DEPOSIT() = PointsOf{ Physical Volume{10000}; }; +// // For k In {0:#pts_PMLBOT()-1} +// // Printf("blabal %g %f PML_lc;",pts_PMLBOT(k),PML_lc); +// // EndFor + +// Characteristic Length{:} = PML_lc; +// Characteristic Length{pts_LAYER_L1()} = L1_lc/refine_mesh_L1; +// Characteristic Length{pts_LAYER_L2()} = L2_lc/refine_mesh_L2; +// Characteristic Length{pts_LAYER_L4()} = L4_lc/refine_mesh_L4; +// Characteristic Length{pts_LAYER_L5()} = L5_lc/refine_mesh_L5; +// Characteristic Length{pts_LAYER_L6()} = L6_lc/refine_mesh_L6; +// Characteristic Length{pts_LAYER_L3()} = L3_lc/refine_mesh_L3; +// Characteristic Length{pts_ROD()} = scat_lc; +// If (tag_geom==3) +// Mesh.Algorithm = 6; +// EndIf +// Mesh.SurfaceEdges = 0; +// Mesh.VolumeEdges = 0; -- GitLab