diff --git a/dG3D/benchmarks/torchSCMRUTH-Cell10/Model.pt b/dG3D/benchmarks/torchSCMRUTH-Cell10/Model.pt index 0e410e36cb5c1b48139c1653fef690919b2743c5..ac911dfdf131cc5811e3b540bba334cfcd0e52d2 100644 Binary files a/dG3D/benchmarks/torchSCMRUTH-Cell10/Model.pt and b/dG3D/benchmarks/torchSCMRUTH-Cell10/Model.pt differ diff --git a/dG3D/benchmarks/torchSCMRUTH-Cell10/Model_legacy.pt b/dG3D/benchmarks/torchSCMRUTH-Cell10/Model_legacy.pt new file mode 100644 index 0000000000000000000000000000000000000000..0e410e36cb5c1b48139c1653fef690919b2743c5 Binary files /dev/null and b/dG3D/benchmarks/torchSCMRUTH-Cell10/Model_legacy.pt differ diff --git a/dG3D/benchmarks/torchSCMRUTH-Cell10/SCU_Bounds_GS_legacy b/dG3D/benchmarks/torchSCMRUTH-Cell10/SCU_Bounds_GS_legacy new file mode 100644 index 0000000000000000000000000000000000000000..7d24c69af5af8530d49c7ba5dc7facc8ed390a9d Binary files /dev/null and b/dG3D/benchmarks/torchSCMRUTH-Cell10/SCU_Bounds_GS_legacy differ diff --git a/dG3D/benchmarks/torchSCMRUTH-Cell10/model.py b/dG3D/benchmarks/torchSCMRUTH-Cell10/model.py index c46ddeb8fe3a35d2dbe5d577b10581a1f5ec62e8..7d601bc9eb13dc40efd30d4691e171a2c612b2f1 100755 --- a/dG3D/benchmarks/torchSCMRUTH-Cell10/model.py +++ b/dG3D/benchmarks/torchSCMRUTH-Cell10/model.py @@ -3,21 +3,12 @@ import torch from gmshpy import * from dG3Dpy import* # from dG3DpyDebug import* -#script to launch PBC problem with a python script -#DEFINE MICRO PROBLEM - -cell=["SC_MRU_T","SC_MRU_I","SMRU"] #available cells -InpType = cell[0] #choose the cell type -factorStep= 1 #number of steps x 20 during reloading between points B and C - +#DEFINE MICRO PROBLEM # material law -# matnum1 = 1 # unique number of law -# rho = 7850e-9 # Bulk mass lnum1 = 11 rho = 1e-9 -# Path = '../Model/Bounds_GS' Path = 'SCU_Bounds_GS' checkpoint = torch.load(Path) [XGmin, XGmax] = checkpoint['Input_Bounds'] @@ -25,68 +16,32 @@ checkpoint = torch.load(Path) [dTmin, dTmax] = checkpoint['Time_Bounds'] print(XGmin, XGmax,YSmin, YSmax, dTmin, dTmax) -if(InpType == "SC_MRU_T"): - Radiusmean = (XGmax[0] + XGmin[0]) / 2.0 - Radiusstd = (XGmax[0] - XGmin[0]) / 2.0 - EXXmean = (XGmax[1]+XGmin[1])/2.0 - EXXstd = (XGmax[1]-XGmin[1])/2.0 - - EYYmean = (XGmax[2]+XGmin[2])/2.0 - EYYstd = (XGmax[2]-XGmin[2])/2.0 +Radiusmean = (XGmax[0] + XGmin[0]) / 2.0 +Radiusstd = (XGmax[0] - XGmin[0]) / 2.0 - EZZmean = (XGmax[3]+XGmin[3])/2.0 - EZZstd = (XGmax[3]-XGmin[3])/2.0 +EXXmean = (XGmax[1]+XGmin[1])/2.0 +EXXstd = (XGmax[1]-XGmin[1])/2.0 - EXYmean = (XGmax[4]+XGmin[4])/2.0 - EXYstd = (XGmax[4]-XGmin[4])/2.0 - - EZXmean = (XGmax[5] + XGmin[5]) / 2.0 - EZXstd = (XGmax[5] - XGmin[5]) / 2.0 +EYYmean = (XGmax[2]+XGmin[2])/2.0 +EYYstd = (XGmax[2]-XGmin[2])/2.0 - EYZmean = (XGmax[6] + XGmin[6]) / 2.0 - EYZstd = (XGmax[6] - XGmin[6]) / 2.0 - +EZZmean = (XGmax[3]+XGmin[3])/2.0 +EZZstd = (XGmax[3]-XGmin[3])/2.0 + +EXYmean = (XGmax[4]+XGmin[4])/2.0 +EXYstd = (XGmax[4]-XGmin[4])/2.0 + +EZXmean = (XGmax[5] + XGmin[5]) / 2.0 +EZXstd = (XGmax[5] - XGmin[5]) / 2.0 + +EYZmean = (XGmax[6] + XGmin[6]) / 2.0 +EYZstd = (XGmax[6] - XGmin[6]) / 2.0 - # model= '../Model/DInpFullModel.pt' - model= 'Model.pt' - kinematicinput=1 - extranorm=True - doubleinput=True -elif(InpType == "SC_MRU_I"): - model= "../Model/IncrementModel.pt" - kinematicinput=4 - EXXmean = 0.0 - EXXstd = 1.0 - EXYmean = 0.0 - EXYstd = 1.0 - EYYmean = 0.0 - EYYstd = 1.0 - EYZmean = 0.0 - EYZstd = 1.0 - EZZmean = 0.0 - EZZstd = 1.0 - EZXmean = 0.0 - EZXstd = 1.0 - extranorm=False - doubleinput=False -else: - EXXmean = (XGmax[0]+XGmin[0])/2.0 - EXXstd = (XGmax[0]-XGmin[0])/2.0 - EXYmean = (XGmax[1]+XGmin[1])/2.0 - EXYstd = (XGmax[1]-XGmin[1])/2.0 - EYYmean = (XGmax[2]+XGmin[2])/2.0 - EYYstd = (XGmax[2]-XGmin[2])/2.0 - EYZmean = 0.0 - EYZstd = 1.0 - EZZmean = 0.0 - EZZstd = 1.0 - EZXmean = 0.0 - EZXstd = 1.0 - model= '../Model/FullModel.pt'#'../Model/model.pt'# - kinematicinput=1 - extranorm=True - doubleinput=False +model= 'Model.pt' +kinematicinput=1 +extranorm=True +doubleinput=True SXXmean = (YSmax[0]+YSmin[0])/2.0 SXXstd = (YSmax[0]-YSmin[0])/2.0 @@ -109,9 +64,9 @@ SYZstd = (YSmax[5]-YSmin[5]) / 2.0 numberOfInput = 8 -numInternalVars = 150#75 +numInternalVars = 37#75 initial_h = 0.0 -macromat1 = torchANNBasedDG3DMaterialLaw(lnum1, rho, numberOfInput, numInternalVars, model, EXXmean, EXXstd, EXYmean, EXYstd, EYYmean, EYYstd, EYZmean, EYZstd, EZZmean, EZZstd, EZXmean, EZXstd, SXXmean, SXXstd, SXYmean, SXYstd, SYYmean, SYYstd, SYZmean, SYZstd, SZZmean, SZZstd, SZXmean, SZXstd,True,1e-3) +macromat1 = torchANNBasedDG3DMaterialLaw(lnum1, rho, numberOfInput, numInternalVars, model, EXXmean, EXXstd, EXYmean, EXYstd, EYYmean, EYYstd, EYZmean, EYZstd, EZZmean, EZZstd, EZXmean, EZXstd, SXXmean, SXXstd, SXYmean, SXYstd, SYYmean, SYYstd, SYZmean, SYZstd, SZZmean, SZZstd, SZXmean, SZXstd,True,1e-5) macromat1.setInitialHValue(initial_h) @@ -125,7 +80,7 @@ macromat1.setNumExtraInput(2) macromat1.setTimeArg(1) # Set initial vcalues for extra inputs in order Radius, cellsize, time -macromat1.setInitialExtraInput(0.6) +macromat1.setInitialExtraInput(0.5) macromat1.setInitialExtraInput(0.0) # Set normalization values for extra inputs in order Radius, cellsize, time @@ -141,8 +96,8 @@ sol = 2 # Gmm=0 (default) Taucs=1 PETsc=2 soltype =1 # StaticLinear=0 (default) StaticNonLinear=1 nstep = 100 # number of step (used only if soltype=1) ftime =1. # Final time (used only if soltype=1) -tol=1.e-4 # relative tolerance for NR scheme (used only if soltype=1) -nstepArch=1 # Number of step between 2 archiving (used only if soltype=1) +tol=1.e-5 # relative tolerance for NR scheme (used only if soltype=1) +nstepArch=5 # Number of step between 2 archiving (used only if soltype=1) # creation of macro part Domain @@ -150,7 +105,6 @@ nstepArch=1 # Number of step between 2 archiving (used only if soltype=1) dim =3 beta1 = 100; fullDG = False; - averageStrainBased = True # non DG domain @@ -167,42 +121,18 @@ mysolver.addDomain(macrodomain1) mysolver.addMaterialLaw(macromat1) mysolver.Scheme(soltype) mysolver.Solver(sol) -mysolver.snlData(nstep,ftime,tol,tol/10.) -mysolver.snlManageTimeStep(50,5,2.,10) +mysolver.snlData(nstep,ftime,tol) +# mysolver.snlManageTimeStep(50,5,2.,10) mysolver.stepBetweenArchiving(nstepArch) # boundary condition -# mysolver.displacementBC("Face",11,2,0.0) - -# mysolver.displacementBC("Edge",2,1,0.0) -# mysolver.displacementBC("Edge",5,0,0.0) mysolver.displacementBC("Face",551,1,0.0) mysolver.displacementBC("Face",554,0,0.0) mysolver.displacementBC("Face",555,2,0.0) mysolver.displacementBC("Face",553,1,-5.0) -# fct = PiecewiseLinearFunction() -# fct.put(0.,0.) -# fct.put(0.1,0.025) -# fct.put(0.2,0.02) -# fct.put(0.4,0.035) -# fct.put(0.6,0.03) -# fct.put(0.8,0.05) -# fct.put(1.,0.0) -# mysolver.displacementBC("Edge",4,1,fct) -# unit = 1 -# mysolver.setNumStepTimeInterval(0.1,20*unit*1) -# mysolver.setNumStepTimeInterval(0.2,3*unit) -# mysolver.setNumStepTimeInterval(0.4,20*unit*factorStep) -# mysolver.setNumStepTimeInterval(0.6,3*unit) -# mysolver.setNumStepTimeInterval(0.8,50*unit) -# mysolver.setNumStepTimeInterval(1.,20*unit) - - # archivage - - mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.GL_XX, 1, nstepArch); mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.GL_YY, 1, nstepArch); mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.GL_ZZ, 1, nstepArch); @@ -215,16 +145,7 @@ mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, nstepArch); mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, nstepArch); mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, nstepArch); mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, nstepArch); -#mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1); -#mysolver.internalPointBuildView("Green-Lagrange equivalent strain",IPField.GL_EQUIVALENT_STRAIN, 1, 1); -#mysolver.internalPointBuildView("Equivalent plastic strain",IPField.PLASTICSTRAIN, 1, 1); - -#mysolver.internalPointBuildView("Deformation energy",IPField.DEFO_ENERGY, 1, 1); -#mysolver.internalPointBuildView("Plastic energy",IPField.PLASTIC_ENERGY, 1, 1); - -# mysolver.archivingForceOnPhysicalGroup("Edge",2,1) -# mysolver.archivingForceOnPhysicalGroup("Edge",2,0) -# mysolver.archivingNodeDisplacement(6,1) +mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1); mysolver.archivingForceOnPhysicalGroup("Face",551, 1) mysolver.archivingNodeDisplacementOnPhysical(2, 553, 1, 1) diff --git a/dG3D/benchmarks/torchSCMRUTH-Cell3/Model.pt b/dG3D/benchmarks/torchSCMRUTH-Cell3/Model.pt new file mode 100644 index 0000000000000000000000000000000000000000..37ae2657e1ad31103ba579aead07ed2e4a7bfd22 Binary files /dev/null and b/dG3D/benchmarks/torchSCMRUTH-Cell3/Model.pt differ diff --git a/dG3D/benchmarks/torchSCMRUTH-Cell3/SCU_Bounds_GS b/dG3D/benchmarks/torchSCMRUTH-Cell3/SCU_Bounds_GS new file mode 100644 index 0000000000000000000000000000000000000000..0fec595f246e083bb6abea300fc7170fcaa60ce9 Binary files /dev/null and b/dG3D/benchmarks/torchSCMRUTH-Cell3/SCU_Bounds_GS differ diff --git a/dG3D/benchmarks/torchSCMRUTH-Cell3/model.py b/dG3D/benchmarks/torchSCMRUTH-Cell3/model.py new file mode 100755 index 0000000000000000000000000000000000000000..6ccef3dadf434b2c168e7c78868de5821b6df018 --- /dev/null +++ b/dG3D/benchmarks/torchSCMRUTH-Cell3/model.py @@ -0,0 +1,161 @@ +#coding-Utf-8-*- +import torch +from gmshpy import * +from dG3Dpy import* +# from dG3DpyDebug import* + +#DEFINE MICRO PROBLEM + +# material law +lnum1 = 11 +rho = 1e-9 +Path = 'SCU_Bounds_GS' +checkpoint = torch.load(Path) +[XGmin, XGmax] = checkpoint['Input_Bounds'] +[YSmin, YSmax] = checkpoint['Output_Bounds'] +[dTmin, dTmax] = checkpoint['Time_Bounds'] +print(XGmin, XGmax,YSmin, YSmax, dTmin, dTmax) + + +Radiusmean = (XGmax[0] + XGmin[0]) / 2.0 +Radiusstd = (XGmax[0] - XGmin[0]) / 2.0 + +EXXmean = (XGmax[1]+XGmin[1])/2.0 +EXXstd = (XGmax[1]-XGmin[1])/2.0 + +EYYmean = (XGmax[2]+XGmin[2])/2.0 +EYYstd = (XGmax[2]-XGmin[2])/2.0 + +EZZmean = (XGmax[3]+XGmin[3])/2.0 +EZZstd = (XGmax[3]-XGmin[3])/2.0 + +EXYmean = (XGmax[4]+XGmin[4])/2.0 +EXYstd = (XGmax[4]-XGmin[4])/2.0 + +EZXmean = (XGmax[5] + XGmin[5]) / 2.0 +EZXstd = (XGmax[5] - XGmin[5]) / 2.0 + +EYZmean = (XGmax[6] + XGmin[6]) / 2.0 +EYZstd = (XGmax[6] - XGmin[6]) / 2.0 + +model= 'Model.pt' +kinematicinput=1 +extranorm=True +doubleinput=True + +SXXmean = (YSmax[0]+YSmin[0])/2.0 +SXXstd = (YSmax[0]-YSmin[0])/2.0 + +SYYmean = (YSmax[1]+YSmin[1])/2.0 +SYYstd = (YSmax[1]-YSmin[1])/2.0 + +SZZmean = (YSmax[2]+YSmin[2])/2.0 +SZZstd = (YSmax[2]-YSmin[2])/2.0 + + +SXYmean = (YSmax[3]+YSmin[3])/2.0 +SXYstd = (YSmax[3]-YSmin[3])/2.0 + +SZXmean = (YSmax[4]+YSmin[4]) / 2.0 +SZXstd = (YSmax[4]-YSmin[4]) / 2.0 + +SYZmean = (YSmax[5]+YSmin[5]) / 2.0 +SYZstd = (YSmax[5]-YSmin[5]) / 2.0 + + +numberOfInput = 8 +numInternalVars = 37 +initial_h = 0.0 +macromat1 = torchANNBasedDG3DMaterialLaw(lnum1, rho, numberOfInput, numInternalVars, model, EXXmean, EXXstd, EXYmean, EXYstd, EYYmean, EYYstd, EYZmean, EYZstd, EZZmean, EZZstd, EZXmean, EZXstd, SXXmean, SXXstd, SXYmean, SXYstd, SYYmean, SYYstd, SYZmean, SYZstd, SZZmean, SZZstd, SZXmean, SZXstd,True,1e-5) + + +macromat1.setInitialHValue(initial_h) +macromat1.setKinematicInput(kinematicinput) +macromat1.setNeedExtraNorm(extranorm) +macromat1.setDoubleInput(doubleinput) + + +macromat1.setNumExtraInput(2) +# Set the location of time in the extra array +macromat1.setTimeArg(1) + +# Set initial vcalues for extra inputs in order Radius, cellsize, time +macromat1.setInitialExtraInput(0.6) +macromat1.setInitialExtraInput(0.0) + +# Set normalization values for extra inputs in order Radius, cellsize, time +macromat1.setNormExtraInp(Radiusmean, Radiusstd) +macromat1.setNormExtraInp(dTmin, dTmax) + + +macrogeofile="rubics.geo" +macromeshfile="rubics.msh" # name of mesh file + +# solver +sol = 2 # Gmm=0 (default) Taucs=1 PETsc=2 +soltype =1 # StaticLinear=0 (default) StaticNonLinear=1 +nstep = 100 # number of step (used only if soltype=1) +ftime =1. # Final time (used only if soltype=1) +tol=1.e-5 # relative tolerance for NR scheme (used only if soltype=1) +nstepArch=5 # Number of step between 2 archiving (used only if soltype=1) + + +# creation of macro part Domain + +dim =3 +beta1 = 100 +fullDG = False +averageStrainBased = True + +# non DG domain +nfield1 = 11 +macrodomain1 = dG3DDomain(10,nfield1,0,lnum1,fullDG,dim) +macrodomain1.stabilityParameters(beta1) + +# creation of Solver +mysolver = nonLinearMechSolver(10) +mysolver.loadModel(macromeshfile) + +mysolver.addDomain(macrodomain1) +mysolver.addMaterialLaw(macromat1) +mysolver.Scheme(soltype) +mysolver.Solver(sol) +mysolver.snlData(nstep,ftime,tol) +# mysolver.snlManageTimeStep(50,5,2.,10) +mysolver.stepBetweenArchiving(nstepArch) + + +# boundary condition +mysolver.displacementBC("Face",554,0,0.0) +mysolver.displacementBC("Face",551,1,0.0) +mysolver.displacementBC("Face",555,2,0.0) +mysolver.displacementBC("Face",553,1,-5.0) + + +# archivage +mysolver.internalPointBuildView("Green-Lagrange_xx",IPField.GL_XX, 1, nstepArch); +mysolver.internalPointBuildView("Green-Lagrange_yy",IPField.GL_YY, 1, nstepArch); +mysolver.internalPointBuildView("Green-Lagrange_zz",IPField.GL_ZZ, 1, nstepArch); +mysolver.internalPointBuildView("Green-Lagrange_xy",IPField.GL_XY, 1, nstepArch); +mysolver.internalPointBuildView("Green-Lagrange_yz",IPField.GL_YZ, 1, nstepArch); +mysolver.internalPointBuildView("Green-Lagrange_xz",IPField.GL_XZ, 1, nstepArch); +mysolver.internalPointBuildView("sig_xx",IPField.SIG_XX, 1, nstepArch); +mysolver.internalPointBuildView("sig_yy",IPField.SIG_YY, 1, nstepArch); +mysolver.internalPointBuildView("sig_zz",IPField.SIG_ZZ, 1, nstepArch); +mysolver.internalPointBuildView("sig_xy",IPField.SIG_XY, 1, nstepArch); +mysolver.internalPointBuildView("sig_yz",IPField.SIG_YZ, 1, nstepArch); +mysolver.internalPointBuildView("sig_xz",IPField.SIG_XZ, 1, nstepArch); +mysolver.internalPointBuildView("sig_VM",IPField.SVM, 1, 1); + +mysolver.archivingForceOnPhysicalGroup("Face",551, 1) +mysolver.archivingNodeDisplacementOnPhysical(2, 553, 1, 1) + +# solve +mysolver.solve() + +# check = TestCheck() +# check.equal(34.22952279032552,mysolver.getArchivedForceOnPhysicalGroup("Edge", 2, 1),1.e-4) + + + + diff --git a/dG3D/benchmarks/torchSCMRUTH-Cell3/rubics.geo b/dG3D/benchmarks/torchSCMRUTH-Cell3/rubics.geo new file mode 100644 index 0000000000000000000000000000000000000000..4e41dbb7bda583b1cbc88e4102134e45cbbb6644 --- /dev/null +++ b/dG3D/benchmarks/torchSCMRUTH-Cell3/rubics.geo @@ -0,0 +1,55 @@ +SetFactory('OpenCASCADE'); + +lx = 20; +ly = 20; +lz = 20; + +nx = 1; +ny = 1; +nz = 1; + +//nx11 = 2; +//nx12 = 2; +//nx13 = 2; + +//nz11 = 1; + +toll = (lx/nx)/2; +e = 2; +Point(1)={0, 0, 0, e}; +Point(2)={lx/nx, 0, 0, e}; +Point(3)={lx/nx, ly/ny, 0, e}; +Point(4)={0, ly/ny, 0, e}; + + +Line(1)={1, 2}; +Line(2)={2, 3}; +Line(3)={3, 4}; +Line(4)={4, 1}; + + +Line Loop(100)={1, 2, 3, 4}; +Surface(100)={100}; + +Extrude {0, 0, lz/nz} { + Surface{100}; Layers{nz}; Recombine; +} + + + +Transfinite Line{1,3}=nx+1 Using Progression 1; +Transfinite Line{2,4}=ny+1 Using Progression 1; + +Transfinite Surface {100}; +Recombine Surface{100}; +Recombine Volume{1}; + + +Physical Surface(551) = {101}; +Physical Surface(552) = {102}; +Physical Surface(553) = {103}; +Physical Surface(554) = {104}; +Physical Surface(555) = {100}; +Physical Surface(556) = {105}; + +Physical Volume(11)={1}; diff --git a/dG3D/benchmarks/torchSCMRUTH-Cell3/rubics.msh b/dG3D/benchmarks/torchSCMRUTH-Cell3/rubics.msh new file mode 100644 index 0000000000000000000000000000000000000000..72e4ecc1248d99f4821f6a8141d18df68c517ce1 --- /dev/null +++ b/dG3D/benchmarks/torchSCMRUTH-Cell3/rubics.msh @@ -0,0 +1,134 @@ +$MeshFormat +4.1 0 8 +$EndMeshFormat +$Entities +8 12 6 1 +1 0 0 0 0 +2 20 0 0 0 +3 20 20 0 0 +4 0 20 0 0 +5 0 0 20 0 +6 20 0 20 0 +7 20 20 20 0 +8 0 20 20 0 +1 -9.99999993922529e-08 -1e-07 -1e-07 20.0000001 1e-07 1e-07 0 2 1 -2 +2 19.9999999 -9.99999993922529e-08 -1e-07 20.0000001 20.0000001 1e-07 0 2 2 -3 +3 -9.99999993922529e-08 19.9999999 -1e-07 20.0000001 20.0000001 1e-07 0 2 3 -4 +4 -1e-07 -9.99999993922529e-08 -1e-07 1e-07 20.0000001 1e-07 0 2 4 -1 +5 -1e-07 -1e-07 -9.99999993922529e-08 1e-07 1e-07 20.0000001 0 2 1 -5 +6 19.9999999 -1e-07 -9.99999993922529e-08 20.0000001 1e-07 20.0000001 0 2 2 -6 +7 -9.99999993922529e-08 -1e-07 19.9999999 20.0000001 1e-07 20.0000001 0 2 5 -6 +8 19.9999999 19.9999999 -9.99999993922529e-08 20.0000001 20.0000001 20.0000001 0 2 3 -7 +9 19.9999999 -9.99999993922529e-08 19.9999999 20.0000001 20.0000001 20.0000001 0 2 6 -7 +10 -1e-07 19.9999999 -9.99999993922529e-08 1e-07 20.0000001 20.0000001 0 2 4 -8 +11 -9.99999993922529e-08 19.9999999 19.9999999 20.0000001 20.0000001 20.0000001 0 2 7 -8 +12 -1e-07 -9.99999993922529e-08 19.9999999 1e-07 20.0000001 20.0000001 0 2 8 -5 +100 -1.000000100000001 -1.000000100000001 -1e-07 21.0000001 21.0000001 1e-07 1 555 4 1 2 3 4 +101 -9.99999993922529e-08 -1e-07 -9.99999993922529e-08 20.0000001 1e-07 20.0000001 1 551 4 5 7 -6 -1 +102 19.9999999 -9.99999993922529e-08 -9.99999993922529e-08 20.0000001 20.0000001 20.0000001 1 552 4 6 9 -8 -2 +103 -9.99999993922529e-08 19.9999999 -9.99999993922529e-08 20.0000001 20.0000001 20.0000001 1 553 4 8 11 -10 -3 +104 -1e-07 -9.99999993922529e-08 -9.99999993922529e-08 1e-07 20.0000001 20.0000001 1 554 4 10 12 -5 -4 +105 -1.000000100000001 -1.000000100000001 19.9999999 21.0000001 21.0000001 20.0000001 1 556 4 7 9 11 12 +1 -1.000000100000001 -1.000000100000001 -9.99999993922529e-08 21.0000001 21.0000001 20.0000001 1 11 6 -101 -102 -103 -104 -100 105 +$EndEntities +$Nodes +27 27 1 27 +0 1 0 1 +1 +0 0 0 +0 2 0 1 +2 +20 0 0 +0 3 0 1 +3 +20 20 0 +0 4 0 1 +4 +0 20 0 +0 5 0 1 +5 +0 0 20 +0 6 0 1 +6 +20 0 20 +0 7 0 1 +7 +20 20 20 +0 8 0 1 +8 +0 20 20 +1 1 0 1 +9 +10 0 0 +1 2 0 1 +10 +20 10 0 +1 3 0 1 +11 +10 20 0 +1 4 0 1 +12 +0 10 0 +1 5 0 1 +13 +0 0 10 +1 6 0 1 +14 +20 0 10 +1 7 0 1 +15 +10 0 20 +1 8 0 1 +16 +20 20 10 +1 9 0 1 +17 +20 10 20 +1 10 0 1 +18 +0 20 10 +1 11 0 1 +19 +10 20 20 +1 12 0 1 +20 +0 10 20 +2 100 0 1 +21 +10 10 0 +2 101 0 1 +22 +10 0 10 +2 102 0 1 +23 +20 10 10 +2 103 0 1 +24 +10 20 10 +2 104 0 1 +25 +0 10 10 +2 105 0 1 +26 +10 10 20 +3 1 0 1 +27 +10 10 10 +$EndNodes +$Elements +7 7 1 7 +2 100 10 1 +1 1 2 3 4 9 10 11 12 21 +2 101 10 1 +2 1 2 6 5 9 14 15 13 22 +2 102 10 1 +3 2 3 7 6 10 16 17 14 23 +2 103 10 1 +4 3 4 8 7 11 18 19 16 24 +2 104 10 1 +5 4 1 5 8 12 13 20 18 25 +2 105 10 1 +6 5 6 7 8 15 17 19 20 26 +3 1 12 1 +7 1 2 3 4 5 6 7 8 9 12 13 10 14 11 16 18 15 20 17 19 21 22 25 23 24 26 27 +$EndElements