diff --git a/NonLinear/Cut/README.md b/NonLinear/Cut/README.md new file mode 100644 index 00000000..0bf7b73c --- /dev/null +++ b/NonLinear/Cut/README.md @@ -0,0 +1,101 @@ +# Cut Operation: Plasticity and Contact +Tested with CGX 2.13.1 / CCX 2.13 + +Simplified model of a cut operation, where a C-shaped profile is sheared between two cutting tools. Both tools (knives) are of identical shape. One of them is fixed (entry side) and one moves (exit side). + +Only the onset of the process can be represented with the static solution procedure. This, however, is sufficient to derive the load distribution for the tools. + ++ Large displacements ++ Plasticity ++ Parametrization using `param.py` ++ Surface-to-surface contact ++ Use of `last iterations` output parameter to show unconverged iterations + +File | Contents +:------------- | :------------- +[par.pre.fbd](par.pre.fbd) | Pre-processing script for CGX (parametrized with `param.py`) +[post.fbd](post.fbd) | Post-processing script for CGX +[iter.fbd](iter.fbd)] | CGX script for inspection of unconverged iterations during the solution process +[solve.inp](solve.inp)] | CCX input +[test.py](test.py) | Python script to run the full simulation + + +## Preprocessing + + + +Parameter | Value | Description +:-- | :-- | :--- +`he` | 130. | height of the tool in mm +`wi` | 180. | width of the tool in mm +`th` | 40. | thickness of the tool in mm +`ra` | 4. | end radius of the slot in mm +`phe` | 125. | height of the profile in mm +`pwi` | 70. | width of the profile in mm +`pgap` | 50. | gap (opening) of the C-profile in mm +`pra` | 10. | outer radius of the profile corners in mm +`ss` | 2. | gap between tools in mm + +Edit the parameters in `par.pre.fbd` and run the commands + +``` +> param.py par.pre.fbd +> cgx -b pre.fbd +``` +The outer contour and the slot of the tools are generated bottom up using points and lines. +The radii are generated using the `fil` command. + + +Boundary conditions: + + Tool 1 is fixed at the lateral surfaces. + + Tool 2 is subjected to a prescribed displacement under 45° in positive x and negative y direction, applied to the lateral surfaces + + the profile is constrained in longitudinal direction at x=0 + + + + + Four contact pairs are defined: + + outer slot perimeter of tool 1 (MA1) and outer contour of the profile (BlechAussen) + + outer slot perimeter of tool 2 (MA2) and outer contour of the profile + + inner slot perimeter of tool 1 (MI1) and inner contour of the profile (BlechInnen) + + inner slot perimeter of tool 2 (MI2) and inner contour of the profile + + + + +## Solving + +``` +> ccx solve +``` +While the solution is running (takes a while), you can inspect the progress with the CVG and STA file monitor +``` +> monitor.py solve +``` +If you change parameters and experience heavy convergence problems then inspecting the intermediate unconverged iterations can help a lot: +``` +> cgx -b iter.fbd +``` +For the default parameters in the example, convergence isn't really an issue. For such stability to reach, it was essential to ++ place the parts such that they initially touch, ++ deliberately reduce the contact stiffness + + + + +## Postprocessing + +``` +> cgx -b post.fbd +``` +Equivalent plastic strain and deformed shape of the profile: + + + +Fixed tool: Equivalent stress and maximum principal stress + + + +Moving tool: Equivalent stress and maximum principal stress + + diff --git a/NonLinear/Cut/Refs/blech-pe-1.png b/NonLinear/Cut/Refs/blech-pe-1.png new file mode 100644 index 00000000..1beb899a Binary files /dev/null and b/NonLinear/Cut/Refs/blech-pe-1.png differ diff --git a/NonLinear/Cut/Refs/blech-pe-2.png b/NonLinear/Cut/Refs/blech-pe-2.png new file mode 100644 index 00000000..c46e0420 Binary files /dev/null and b/NonLinear/Cut/Refs/blech-pe-2.png differ diff --git a/NonLinear/Cut/Refs/parts.png b/NonLinear/Cut/Refs/parts.png new file mode 100644 index 00000000..3233c61c Binary files /dev/null and b/NonLinear/Cut/Refs/parts.png differ diff --git a/NonLinear/Cut/Refs/rand1.png b/NonLinear/Cut/Refs/rand1.png new file mode 100644 index 00000000..450d35bc Binary files /dev/null and b/NonLinear/Cut/Refs/rand1.png differ diff --git a/NonLinear/Cut/Refs/rand2.png b/NonLinear/Cut/Refs/rand2.png new file mode 100644 index 00000000..73377283 Binary files /dev/null and b/NonLinear/Cut/Refs/rand2.png differ diff --git a/NonLinear/Cut/Refs/randb.png b/NonLinear/Cut/Refs/randb.png new file mode 100644 index 00000000..0d757334 Binary files /dev/null and b/NonLinear/Cut/Refs/randb.png differ diff --git a/NonLinear/Cut/Refs/surf1.png b/NonLinear/Cut/Refs/surf1.png new file mode 100644 index 00000000..fbffc707 Binary files /dev/null and b/NonLinear/Cut/Refs/surf1.png differ diff --git a/NonLinear/Cut/Refs/surf2.png b/NonLinear/Cut/Refs/surf2.png new file mode 100644 index 00000000..d2f5717d Binary files /dev/null and b/NonLinear/Cut/Refs/surf2.png differ diff --git a/NonLinear/Cut/Refs/surfb.png b/NonLinear/Cut/Refs/surfb.png new file mode 100644 index 00000000..f1f09ddf Binary files /dev/null and b/NonLinear/Cut/Refs/surfb.png differ diff --git a/NonLinear/Cut/Refs/tool1-s1.png b/NonLinear/Cut/Refs/tool1-s1.png new file mode 100644 index 00000000..5524ca48 Binary files /dev/null and b/NonLinear/Cut/Refs/tool1-s1.png differ diff --git a/NonLinear/Cut/Refs/tool1-se.png b/NonLinear/Cut/Refs/tool1-se.png new file mode 100644 index 00000000..d7cb0031 Binary files /dev/null and b/NonLinear/Cut/Refs/tool1-se.png differ diff --git a/NonLinear/Cut/Refs/tool2-s1.png b/NonLinear/Cut/Refs/tool2-s1.png new file mode 100644 index 00000000..fba8a444 Binary files /dev/null and b/NonLinear/Cut/Refs/tool2-s1.png differ diff --git a/NonLinear/Cut/Refs/tool2-se.png b/NonLinear/Cut/Refs/tool2-se.png new file mode 100644 index 00000000..bfc1dfcd Binary files /dev/null and b/NonLinear/Cut/Refs/tool2-se.png differ diff --git a/NonLinear/Cut/iter.fbd b/NonLinear/Cut/iter.fbd new file mode 100644 index 00000000..47bc1b11 --- /dev/null +++ b/NonLinear/Cut/iter.fbd @@ -0,0 +1,12 @@ +wsize 1400 800 +read ResultsForLastIterations.frd +seta ! all +view elem +view disp +view sh +ds -1 e 4 +rot -z +zoom 2.5 +plot ev +CF3 +scal d 10 +plus ev +CF1 diff --git a/NonLinear/Cut/par.pre.fbd b/NonLinear/Cut/par.pre.fbd new file mode 100644 index 00000000..99a531a2 --- /dev/null +++ b/NonLinear/Cut/par.pre.fbd @@ -0,0 +1,259 @@ +# z in Profillaufrichtung +# x quer +# y nach oben + +# height of the tool +# width of the tool +# thickness of the tool +# end radius of the slot +# height of the profile +# width of the profile +# gap (opening) of the C-profile +# sheet thickness +# outer radius of the profile corners +# gap between tools + +# dependent variables +# +# +# +# +# +# +# +# + + +# Kontur +pnt lu <-wi/2.> <-he/2.> 0 +pnt mu 0 <-he/2.> 0 +pnt lo <-wi/2.> < he/2.> 0 +pnt mo 0 < he/2.> 0 +pnt p1a 0 <-ya> 0 +pnt p2a <-xa> <-ya> 0 +pnt p3a <-xa> 0 +pnt p4a <-xg> 0 +pnt p4i <-xg> 0 +pnt p3i <-xi> 0 +pnt p2i <-xi> <-yi> 0 +pnt p1i 0 <-yi> 0 + +# Messer +line ! mo lo +line ! lo lu +line ! lu mu +line ! mu p1a +line ! p1a p2a +line ! p2a p3a +line ! p3a p4a +line ! p4a p4i +line ! p4i p3i +line ! p3i p2i +line ! p2i p1i +line ! p1i mo +fil L005 L006 +fil L006 L007 +fil L007 L008 +fil L008 L009 +fil L009 L00A +fil L00A L00B +del l L008 +merg p all + +# Kontaktflächen +seta MesserInnen L00B L00I L00A L00H L009 L00G +comp MesserInnen do +seta MesserAussen L00F L007 L00E L006 L00D L005 +comp MesserAussen do + +plot pa all +plus la all +seto messer1 + seto sketch + surf s1 all + setc + copy sketch new mir x a + merg p all + merg l all + swep all new tra 0 0 a +setc + +copy messer1 messer2 tra 0 0 a +div all auto 5 30 +elty all te10 +mesh all +comp messer1 do +comp messer2 do + + +# profil +seto blech +pnt pp1a 0 <-pwi/2> 0 +pnt pp2a <-phe/2> <-pwi/2> 0 +pnt pp3a <-phe/2> 0 +pnt pp4a <-pgap/2.> 0 +pnt pp1i 0 <-pwi/2+pth> 0 +pnt pp2i <-phe/2+pth> <-pwi/2+pth> 0 +pnt pp3i <-phe/2+pth> 0 +pnt pp4i <-pgap/2.> 0 + +line l1 pp1a pp2a +line l2 pp2a pp3a +line l3 pp3a pp4a +line l4 pp4a pp4i +line l5 pp4i pp3i +line l6 pp3i pp2i +line l7 pp2i pp1i +line l8 pp1i pp1a +fil l1 l2 +fil l2 l3 +fil l5 l6 +fil l6 l7 +# Ränder +seta BlechInnen l l5 l6 l7 L05Y L05Z +comp BlechInnen do +seta BlechAussen l l1 l2 l3 L05W L05X +comp BlechAussen do + +surf ! blech +swep blech new tra 0 0 <2.*th+ss> a + +copy blech new mir x a + +elty blech te10 +div blech auto 3 10 +mesh blech + +merg n blech +#move blech tra 0 0 <-th> +comp BlechAussen do +comp BlechInnen do +comp blech do + +setc + +setr messer1 se blech +# Kontaktflächen +# seta BlechInnen s A025 A02B A026 A02C A027 A02L A02Q A02K A02P A02J +# seta BlechAussen s A02H A02O A02G A02N A02F A021 A029 A022 A02A A0s3 + +plot f all n +view elem + +merg l all +merg p all +merg n all + +seti MA1 f MesserAussen messer1 +seti MA2 f MesserAussen messer2 +seti MI1 f MesserInnen messer1 +seti MI2 f MesserInnen messer2 + +send MA1 abq sur +send MA2 abq sur +send MI1 abq sur +send MI2 abq sur + + + +send BlechAussen abq sur +send BlechInnen abq sur + + +# sets for constraints +seta Blechrand s A020 A02E +comp Blechrand do +send Blechrand abq nam + +# sets for Materials +send messer1 abq nam +send messer2 abq nam +send blech abq nam + +# Messer 1 rechts, links, oben, unten +seta m1nodes n messer1 +enq m1nodes m1r rec _ _ 0.1 +send m1r abq nam +enq m1nodes m1l rec <-wi/2.> _ _ 0.1 +send m1l abq nam +enq m1nodes m1o rec _ _ 0.1 +send m1o abq nam +enq m1nodes m1u rec _ <-he/2.> _ 0.1 +send m1u abq nam + +# Messer 2 rechts, links, oben, unten +seta m2nodes n messer2 +enq m2nodes m2r rec _ _ 0.1 +send m2r abq nam +enq m2nodes m2l rec <-wi/2.> _ _ 0.1 +send m2l abq nam +enq m2nodes m2o rec _ _ 0.1 +send m2o abq nam +enq m2nodes m2u rec _ <-he/2.> _ 0.1 +send m2u abq nam + +# Messer Außenkanten +seta m1rnodes n m1r m1l m1o m1u +enq m1rnodes m1k rec _ _ 0 0.1 +send m1k abq nam +seta m2rnodes n m2r m2l m2o m2u +enq m2rnodes m2k rec _ _ <2.*th+ss> 0.1 +send m2k abq nam + +move blech tra <-off> 0 +move messer2 tra <2.*off> <-2*off> 0 + +send all abq + +# doc images +ulin Parts: Messer1 (gray), Messer2 (red), blech (green) +rot -z +rot r 30 +rot u 30 +seta ! all +frame +hcpy png +sys mv hcpy_1.png Refs/parts.png + +ulin contact surfaces: MI1 (turq.), MA1 (blue) +plot l all n +plus f MI1 t +plus f MA1 b +hcpy png +sys mv hcpy_2.png Refs/surf1.png + +ulin contact surfaces: MI2 (turq.), MA2 (blue) +plot l all n +plus f MI2 t +plus f MA2 b +hcpy png +sys mv hcpy_3.png Refs/surf2.png + +ulin contact surfaces: BlechInnen (turq.), BlechAussen (blue) +plot l all n +plus f BlechInnen t +plus f BlechAussen b +hcpy png +sys mv hcpy_4.png Refs/surfb.png + +ulin conststraint regions of Messer1: m1r (black), m1u (red), m1k (green) +plot l all n +plus n m1r k 4 +plus n m1u r 4 +plus n m1k g 4 +hcpy png +sys mv hcpy_5.png Refs/rand1.png + +ulin conststraint regions of Messer2: m2r (black), m2u (red), m2k (green) +plot l all n +plus n m2l k 4 +plus n m2o r 4 +plus n m2k g 4 +hcpy png +sys mv hcpy_6.png Refs/rand2.png + +ulin conststraint region: Blechrand +plot l all n +plus n Blechrand r 4 +hcpy png +sys mv hcpy_7.png Refs/randb.png diff --git a/NonLinear/Cut/post.fbd b/NonLinear/Cut/post.fbd new file mode 100644 index 00000000..47211c7e --- /dev/null +++ b/NonLinear/Cut/post.fbd @@ -0,0 +1,51 @@ +#wsize 800 550 +read solve.frd +seta ! all +view elem +view disp +view sh + +ds -0 e 1 +rot -z +plot ev +CF3 +zoom 1.5 +rot u 10 +rot l 10 +hcpy png +sys mv hcpy_1.png Refs/blech-pe-1.png + +rot r 30 +hcpy png +sys mv hcpy_2.png Refs/blech-pe-2.png + +ulin Fixed tool (feed), cutting edges +rot -z +ds -1 e 7 +#scal d 10 +plot ev +CF1 +frame +hcpy png +sys mv hcpy_3.png Refs/tool1-se.png + +ds -1 e 11 +plot ev +CF1 +hcpy png +sys mv hcpy_4.png Refs/tool1-s1.png + +ulin Moving tool (exit), cutting edges +ds -1 e 7 +rot z +plot ev +CF2 +frame +hcpy png +sys mv hcpy_5.png Refs/tool2-se.png + +ds -1 e 11 +rot -z +rot r 30 +rot u 30 +plot ev +CF2 +plus e +CF1 n +frame +hcpy png +sys mv hcpy_6.png Refs/tool2-s1.png diff --git a/NonLinear/Cut/solve.inp b/NonLinear/Cut/solve.inp new file mode 100644 index 00000000..5ccb1959 --- /dev/null +++ b/NonLinear/Cut/solve.inp @@ -0,0 +1,76 @@ +*include, input=all.msh +*include, input=MA1.sur +*include, input=MA2.sur +*include, input=MI1.sur +*include, input=MI2.sur +*include, input=BlechAussen.sur +*include, input=BlechInnen.sur +*include, input=blech.nam +*include, input=Blechrand.nam +*include, input=messer1.nam +*include, input=messer2.nam +*include, input=m1u.nam +*include, input=m1r.nam +*include, input=m1k.nam +*include, input=m2o.nam +*include, input=m2l.nam +*include, input=m2k.nam + +** Materials *********************************************** +** +*Material, name=Messer +*Elastic +210000, 0.3 +*Material, name=Blech +*Elastic +210000, 0.3 +*Plastic +400, 0 +800, 0.2 +2000,2 +** +** Sections ************************************************ +** +*Solid section, elset=Emesser1, material=Messer +*Solid section, elset=Emesser2, material=Messer +*Solid section, elset=Eblech, material=Blech +** +** Constraints ********************************************* +** +*boundary +Nm1u,2,2 +Nm1r,1,1 +Nm1k,3,3 +Nm2k,3,3 +NBlechrand,3,3 + +*surface interaction, name=cut +*surface behavior, pressure-overclosure=linear +100000. +*contact pair, interaction=cut, type=surface to surface +SBlechAussen, SMA1 +SBlechAussen, SMA2 +SBlechInnen, SMI1 +SBlechInnen, SMI2 +** +** Steps *************************************************** +** +*TIME POINTS, NAME=TP1, GENERATE +0,1,0.1 + +*Step,nlgeom +*Static +0.05,1,0.00000001,0.05 +***controls, parameters=field +**0.02,0.1,1.,1.,0.1,0.1 +***controls, parameters=time incrementation +**4,8 ,9, 16, 10 ,4 , , 8, , +**0.25, 0.5, 0.75, 0.85 , ,1.5 , +*boundary +Nm2l,1,1,3 +Nm2o,2,2,-3 +*element output,TIME POINTS=TP1, last iterations +S,PE +*node output +U +*end step diff --git a/NonLinear/Cut/test.py b/NonLinear/Cut/test.py new file mode 100644 index 00000000..dc45c25a --- /dev/null +++ b/NonLinear/Cut/test.py @@ -0,0 +1,10 @@ +#!/usr/bin/python +import os + +os.system("param.py par.pre.fbd") +os.system("cgx -b pre.fbd") +os.system("ccx solve") +os.system("monitor.py solve") +os.system("cgx -b post.fbd") + + diff --git a/README.md b/README.md index c7dcbea7..93214240 100644 --- a/README.md +++ b/README.md @@ -243,3 +243,13 @@ In the [Release Manager](https://github.com/mkraska/CalculiX-Examples/releases) width="200" title="Telescoping tubes under bending load"> ](Contact/Tubes) +[ +](Contact/Tubes) +[ +](NonLinear/Cut)