<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html
  SYSTEM "about:legacy-compat">
<html xmlns:mml = "http://www.w3.org/1998/Math/MathML" lang = "en"><head><meta charset = "UTF-8"/><meta name = "copyright" content = "(C) Copyright 2020"/><meta name = "DC.rights.owner" content = "(C) Copyright 2020"/><meta name = "DC.type" content = "concept"/><meta name = "abstract" content = "Parameters, which control the generation and the smoothing of the isosurface are discussed within this section."/><meta name = "description" content = "Parameters, which control the generation and the smoothing of the isosurface are discussed within this section."/><meta name = "DC.format" content = "HTML5"/><meta name = "DC.identifier" content = "tso-c-usr-validation-smooth-isoPar"/><meta name = "DC.language" content = "en"/><link rel = "stylesheet" type = "text/css" href = "../DSDocUI_XML34.css"/><title>Isosurface and Smoothing Parameters</title>
<script type = "text/javascript" src = "../DSDocUI_Highlight34.js">
  	/* */
  	</script></head><body onLoad = "highlightSearchTerms();" id = "tso-c-usr-validation-smooth-isoPar">
<a name = "hj-top"> </a><table class = "table1" id = "table11"><tr><td><table class = "DocHeader"><tr><td class = "DocHeader1" colspan = "2"><h1>Isosurface and Smoothing Parameters</h1></td></tr><tr><td class = "DocHeader4" colspan = "2"/></tr><tr><td class = "DocHeader3" colspan = "2"><table class = "DocThemeIntro" id = "table12"><tr><td class = "Intro1Only"><p class = "header"><p class = "abstract">
<span class = "shortdesc">Parameters, which control the generation and the smoothing
of the isosurface are discussed within this section.</span>

</p>

</p></td></tr></table></td></tr></table>




<div class = "body conbody">
<p>Following parameters control the generation and the smoothing of
the isosurface. They are used when the isosurfaces of the material
distribution resulting from topology optimization are calculated: in
this case, the parameter <code class = "ph codeph">TASK</code> is set to iso (single isosurface) or <code class = "ph codeph">all_iterations
</code>(isosurfaces for all iterations). In addition, the parameters
<code class = "ph codeph">SELF_INTERSECTION_CHECK</code> and <code class = "ph codeph">MIN_ANGLE</code>
are used during the data reduction that is described in details in the
next section.</p>
<table class = "table" id = "tso-c-usr-validation-smooth-isoPar__ah732328"><caption/><colgroup><col/><col/><col/><col/><col/><col/><col/></colgroup><thead class = "thead">
<tr class = "row">
<th class = "entry" id = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1" colspan = "6"><p>Isosurface generation and smoothing parameters of <span class = "ph">Tosca Structure.smooth</span></p></th>
</tr>
<tr class = "row">
<th class = "entry" id = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__2" rowspan = "2"><p>Parameter</p></th>
<th class = "entry" id = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__3" rowspan = "2"><p>Value</p></th>
<th class = "entry" id = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__4" rowspan = "2"><p>Description</p></th>
<th class = "entry" id = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__5" colspan = "3"><p>Supported by</p></th>
</tr>
<tr class = "row">
<th class = "entry" id = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__6"><p>GUI-TS.pre </p></th>
<th class = "entry" id = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__7"><p>GUI-TS.smooth</p></th>
<th class = "entry" id = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__8"><p>TExt</p></th>
</tr>
</thead><tbody class = "tbody">
<tr class = "row">
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__2"><p><span class = "ph">ISO_VALUE</span></p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__3"><p>Real value between 0 and 1</p><p>Default: 0.3</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__4"><p>Isovalue; is used to determine the positions
on the element edges where the new nodes are created. Larger values lead
to models with smaller volume. See below for an example.</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__6"><p>x</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__7"><p>x</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__8"><p>x</p></td>
</tr>
<tr class = "row">
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__2"><p><span class = "ph">SMOOTH_CYCLES</span></p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__3"><p>Non-negative integer number</p><p>Default: 5</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__4"><p>Number of smoothing cycles; if set to 0, no
smoothing is performed. Larger values lead to smoother models, but
may cause the narrowing of thin components.</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__6"><p>x</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__7"><p>x</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__8"><p>x</p></td>
</tr>
<tr class = "row">
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__2"><p><span class = "ph">ORIGINAL_SURFACE_SMOOTHING</span></p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__3"><p><span class = "ph">off</span> (original surface is not smoothed)</p>
                      <p><span class = "ph">shrink</span> (limited original surface smoothing)</p>
                      <p><span class = "ph">full</span> (original surface is smoothed)</p>
                      <p>default:<span class = "ph">off</span></p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__4"><p>Defines if the smoothing of the original surface
is to be performed. If set to <span class = "ph">shrink</span>, the original surface
gets smoothed by moving its nodes toward the inside of the model only,
so that the restrictions on the design region are not violated.</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__6"><p>x</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__7"><p>x</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__8"><p>-</p></td>
</tr>
<tr class = "row">
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__2"><p><span class = "ph">SELF_INTERSECTION_CHECK</span></p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__3"><p><span class = "ph">off</span> (no checks)</p>
                      <p><span class = "ph">check </span> (check once)</p>
                      <p><span class = "ph">runtime</span> (check always)</p>
                      <p><span class = "ph">iterative</span> (first run without check, rerun if required)</p>
                      <p>Default: <span class = "ph">iterative</span></p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__4"><p>Defines if the self-intersection checks are
to be performed during the isocut, smoothing, and data reduction. See
below.</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__6"><p>x</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__7"><p>x</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__8"><p>-</p></td>
</tr>
<tr class = "row">
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__2"><p><span class = "ph">MIN_ANGLE</span></p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__3"><p>Real value between 0 and 90</p><p>Default: 15</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__4"><p>Defines the minimal angle of the triangles that
result from the smoothing and data reduction; triangles with smaller
angles might be present if they are created during the isocut. Too large
value might prevent the smoothing; too small value might lead to degenerated
triangles.</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__6"><p>-</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__7"><p>x</p></td>
<td class = "entry" headers = "tso-c-usr-validation-smooth-isoPar__ah732328__entry__1 tso-c-usr-validation-smooth-isoPar__ah732328__entry__5 tso-c-usr-validation-smooth-isoPar__ah732328__entry__8"><p>-</p></td>
</tr>

</tbody></table>

<p> All parameters have default values that are useful in most cases.
However, these parameters affect the appearance of the isosurface as
described below.</p>
<p>The isovalue specified using the parameter <code class = "ph codeph">ISO_VALUE</code> defines
the position between the elements with zero and maximal material value
where the isosurface is constructed. More precisely, the interpolated
material values are first found for each node, and then the new nodes
are constructed on the edges that have varying material values (that is,
the material value for one end is less than and for the other one larger
than the isovalue). The ratio in which the edge is subdivided by the
new node is defined by the isovalue in respect to the material values
of the ends of the edge, but is limited to a range from a to 1-a with
a constant value a (currently 0.3) in order to prevent edges of very
small lengths. As the result, increasing the isovalue leads to shifting
the isosurface toward the inside of the model, thus the model volume
decreases. </p>
<p><div class = "note"><span class = "run-in.note">Note:
			</span><span class = "notecontent">For the structures with thin components, it is not recommended
to use large isovalues (larger than 0.7), since the structure might become
disconnected.</span></div>
</p>
<p>See the following figures, how the isovalue
influences the result.</p>
<table class = "table" id = "tso-c-usr-validation-smooth-isoPar__ah803904"><caption/><colgroup><col/></colgroup><tbody class = "tbody">
<tr class = "row">
<td class = "entry"><br/><img class = "image" src = "../TsoUserImages/ah0c48c5.jpg" width = "450"/><br/></td>
</tr>
</tbody></table>

<table class = "Remark" id = "table132"><tr><td class = "Remark"><span class = "run-in.important">Important:
				</span><span class = "notecontent">
<p> In case that the structure becomes disconnected, it is advised to
repeat the calculation with smaller isovalue. Still, if the model contains
a single layer of elements or a string of elements connected by nodes
only, the isosurface will probably be disconnected for any isovalue.</p>
<p>In this case, it is recommended to repeat the topology optimization with
adjusted minimal thickness of components that can be specified by choosing
the minimal member size in <code class = "ph codeph">DVCON_TOPO</code>. Another possible
solution is to use a refined mesh. </p></span></td></tr></table>

<p>After the isocut is done, the surface smoothness is generally not
sufficient. Therefore, the iterative smoothing is performed by displacing
the nodes created in the isocut. The smoothing is done in cycles; the
number of cycles is determined by the parameter <code class = "ph codeph">SMOOTH_CYCLES</code>.
</p>
<p>The conditions for a node displacement to be accepted is that the angles
of the resulting triangles are larger than a certain value specified by the
parameter <code class = "ph codeph">MIN_ANGLE</code>, and, if requested, that no surface self-intersections
occur after the displacement. </p><p>The second check is not done if the <code class = "ph codeph">SELF_INTERSECTION_CHECK</code>
parameter is set to <code class = "ph codeph">off</code> or <code class = "ph codeph">check</code>; the difference in
these cases is that, in case this parameter is set to <code class = "ph codeph">check</code>,
the self-intersection test is performed once for the entire model after
the smoothing and data reduction are made, and the user receives the
information about the number of intersecting faces. In case that the <code class = "ph codeph">SELF_INTERSECTION_CHECK</code>
parameter is set to <code class = "ph codeph">iterative</code>, the smoothing is first performed
without the self-intersection checks, and then is redone if the self-intersections
appear after the smoothing.</p>
<table class = "Remark" id = "table132"><tr><td class = "Remark"><span class = "run-in.important">Important:
				</span><span class = "notecontent">
<p>Note that in case of the <code class = "ph codeph">SELF_INTERSECTION_CHECK
</code> parameter set to <code class = "ph codeph">iterative</code> or <code class = "ph codeph">runtime</code>, similar
self-intersection checks are done for isocut and data reduction as well;
however, in rare cases, self-intersections that occur during the isocut
cannot be prevented, and they are likely to remain after the smoothing
and data reduction are done.</p></span></td></tr></table>

<p>In order to achieve smoother surfaces, higher value of <code class = "ph codeph">SMOOTH_CYCLES</code>
parameter should be used. However, this leads to the increase of the
computation time that might be noticeable especially in the case that
the self-intersection test is turned on. In practice, 5 to 10 smoothing
cycles are usually sufficient. Further smoothing might have a negative
effect of contracting thin components; in certain cases, the smoothing
must be turned off by setting <code class = "ph codeph">SMOOTH_CYCLES</code> to 0.</p>
<p>See the
following figure for an example of smoothing with various numbers of
smoothing cycles:</p>
<table class = "table" id = "tso-c-usr-validation-smooth-isoPar__ah728460"><caption/><colgroup><col/><col/><col/></colgroup><tbody class = "tbody">
<tr class = "row">
<td class = "entry"><br/><img class = "image" src = "../TsoUserImages/smooth_transverselink6.png" width = "350"/><br/></td>
<td class = "entry"><p>  0 smoothing cycles (smoothing turned off)</p></td>
</tr>
<tr class = "row">
<td class = "entry"><br/><img class = "image" src = "../TsoUserImages/smooth_transverselink7.png" width = "350"/><br/></td>
<td class = "entry"><p> 3 smoothing cycles</p></td>
</tr>
<tr class = "row">
<td class = "entry"><br/><img class = "image" src = "../TsoUserImages/smooth_transverselink8.png" width = "350"/><br/></td>
<td class = "entry"><p> 10 smoothing cycles</p></td>
</tr>
</tbody></table>

<p> A higher number of smoothing cycles can cause some shrinkage effects
on the surface that is being smoothed. Especially areas with a high curvature
can be changed drastically. If you want to prevent these effects, the
parameter <code class = "ph codeph">SHRINKAGE_CORRECTION</code> can be set to <code class = "ph codeph">YES</code>.
Activating the correction will reduce the smoothing efficiency slightly.
A higher number of smoothing cycles might be necessary.</p>
<table class = "table" id = "tso-c-usr-validation-smooth-isoPar__ah761298"><caption/><colgroup><col/><col/><col/></colgroup><tbody class = "tbody">
<tr class = "row">
<td class = "entry"><br/><img class = "image" src = "../TsoUserImages/no_correction.png" width = "350"/><br/></td>
<td class = "entry"><p> shrinkage correction deactivated</p></td>
</tr>
<tr class = "row">
<td class = "entry"><br/><img class = "image" src = "../TsoUserImages/correction.png" width = "350"/><br/></td>
<td class = "entry"><p> shrinkage correction activated</p></td>
</tr>
</tbody></table>
<p>The parameter <code class = "ph codeph">ORIGINAL_SURFACE_SMOOTHING</code> defines
if the original surface (that is the part of the surface of the original
elements, in contrast to the new surface produced by isocut) should be
smoothed.</p>
<table class = "table" id = "tso-c-usr-validation-smooth-isoPar__ah701330"><caption/><colgroup><col/><col/><col/></colgroup><tbody class = "tbody">
<tr class = "row">
<td class = "entry"><br/><img class = "image" src = "../TsoUserImages/smooth_smoothing_cycles1.png"/><br/></td>
<td class = "entry"><p>  <span class = "ph">ORIGINAL_SURFACE_SMOOTHING = off</span></p></td>
</tr>
<tr class = "row">
<td class = "entry"><br/><img class = "image" src = "../TsoUserImages/smooth_smoothing_cycles2.png"/><br/></td>
<td class = "entry"><p> <span class = "ph">ORIGINAL_SURFACE_SMOOTHING =  shrink</span></p></td>
</tr>
<tr class = "row">
<td class = "entry"><br/><img class = "image" src = "../TsoUserImages/smooth_smoothing_cycles3.png"/><br/></td>
<td class = "entry"><p> <span class = "ph">ORIGINAL_SURFACE_SMOOTHING =  full</span></p></td>
</tr>
</tbody></table>

<p> If it is set to <code class = "ph codeph">off</code>, the original surface remains unchanged.
In most cases, this is desired since the surface nodes might have some
additional information (for example, forces or boundary conditions) associated
with them. However, the resulting surface will be smoother if the original
surface gets modified as well. To do this, set <code class = "ph codeph">ORIGINAL_SURFACE_SMOOTHING</code>
to <code class = "ph codeph">full</code>.</p>
<p>The third option <code class = "ph codeph">ORIGINAL_SURFACE_SMOOTHING</code>
= <code class = "ph codeph">shrink</code> allows modifying the original surface, but in a way
that the new surface does not occupy the region beyond the initial design.
This is achieved by prohibiting the nodes to be moved toward the outside
of the model.</p>
<table class = "Remark" id = "table132"><tr><td class = "Remark"><span class = "run-in.important">Important:
				</span><span class = "notecontent"><p>Note that the surface of the frozen regions that are chosen using
<code class = "ph codeph">GROUP_SURFACE</code> commands is not modified even if the original
surface smoothing is turned on.</p></span></td></tr></table>

</div>
</td></tr></table><script type = "text/javascript" src = "../DSDocUI_Bottom34.js">/* */</script></body>
</html>
