In [1]:
%load_ext autoreload
%autoreload 2
from multiViewer import MultiViewer
from smtext import getSMTRecords, smt_ipy_table
records = getSMTRecords()
In [6]:
annularRecords = getSMTRecords(records=records, tags=['annular'])
rb = 14e-6
comparisonRecords = getSMTRecords(records=annularRecords, parameters={'kPlus' : 200, 'rboundary' : rb, 'Nx' : 300})
viewer = MultiViewer(comparisonRecords, title=['$R_b={0}$'.format(rb)], figsize=(4, 9))
viewer.plot(times=numpy.arange(16) * 700.)
smt_ipy_table(comparisonRecords, fields=['label', 'timestamp', 'parameters', 'duration', 'version', 'tags'], parameters=['kPlus', 'kMinus', 'rboundary', 'Nx'])
Out[6]:
In [1]:
from smtext import batch_launch
batch_launch(reason="test simulation for newly revamped annular simulation", tags=['annular4'], kPlus=200.0, rboundary=1.4e-5)
These simulations are with the new version of the code with the
nonuniform mesh. Here we are testing rboundary, Nx and
spacing_ratio.
Some things to note from the results:
The results demonstrate that a relatively large spacing_ratio of
1.8 can be used without altering the results. Nothing has been
verified numerically, this is simply from observation.
For the largest value of rboundary there are some seriously anomalous results. For example, for spacing_ratio=1.8 the trench partially fill for Nx=200 but shuts down for both Nx=100 and Nx=400. This is very strange. I think this issue may be related to the tiny trapped voids discussed below. It could also be related to having and even or odd number of cells across the trench. Basicly, if a line of cells become trapped it never fills. This can be dealt with numerically. I had to do this is previous work, with the superfill model. This is the first problem I need to deal with along with the ones highlighted below.
As discussed with Dan and Tom, increasing rboundary causes the
deposition to shutdown. The plan is to fix the circular area to be
the equivalent of the square spacing of 55$\mu$m.
The final shutdown position of the interface for Nx=800 is not
the same as for Nx=400 otherwise the interface positions are
quite similar (of course the interface positions don't correspond
exactly to the times plotted as the actual position is for the largest timestep such that
timestep % 10 == 0 and elapsedTime(timestep) < plotTime). This may be
caused by the level set update frequency slowly shifting the
interface after shut down has occurred. I will look into this
further. If the deposition has entirely shutdown the simulation
should be stopped anyway. I am going to run simulations with
different level set initialization frequencies based on steps and
distance traveled to try and understand this issue.
Related to the above issue are the tiny anomalous voids that get trapped. This again is probably a numerical issue to do with update frequency as it doesn't occur in the coarser grids where the level set update is less frequent compared to distance traveled.
In [21]:
from tools import batch_launch
reason = "Testing the new non-uniform grid for spacing_ratio, rboundary and Nx."
for spacing_ratio in (1.8, 1.4, 1.2, 1.1, 1.05, 1.01):
for Nx in (100, 200, 400, 800):
for rboundary in (20e-6, 40e-6, 80e-6, 160e-6, 320e-6):
batch_launch(reason=reason, tags=['annular10'], kPlus=400., rboundary=rboundary, Nx=Nx, spacing_ratio=spacing_ratio)
In [1]:
%load_ext autoreload
%autoreload 2
from tools import getSMTRecords, smt_ipy_table
records = getSMTRecords()
annular10Records = getSMTRecords(records=records, tags=['annular10'])
In [5]:
from tools import getSMTRecords
import numpy as np
from multiViewer import MultiViewer
import pandas as pd
def plotSandNx(rboundary, titlesub=400, Nxs=(100, 200, 400, 800), spacing_ratios=(1.01, 1.05, 1.1, 1.2, 1.4, 1.8)):
def getrecord(s, n):
rs = getSMTRecords(records=annular10Records, parameters={'Nx' : n, 'rboundary' : rboundary, 'spacing_ratio' : s})
if len(rs) > 0:
return rs[0]
else:
return None
tmp = [[getrecord(s, n) for n in Nxs] for s in spacing_ratios]
def columntitle(r):
if r:
return r'$N$={0}'.format(r.parameters['Nx'])
else:
return r'$N$={0}'.format(titlesub)
viewer = MultiViewer(tmp,
columntitle=columntitle,
rowtitle=lambda r: r'$s$={0}'.format(r.parameters['spacing_ratio']),
figsize=(1.5, 6))
viewer.plot(times=np.arange(10) * 4000. / 9.)
return smt_ipy_table([j for i in tmp for j in i if j], fields=['label', 'timestamp', 'parameters', 'duration', 'version', 'tags'], parameters=['spacing_ratio', 'rboundary', 'Nx', 'kPlus', 'kMinus'])
In [10]:
plotSandNx(20e-6, titlesub=800)
Out[10]:
In [11]:
plotSandNx(40e-6)
Out[11]:
In [12]:
plotSandNx(80e-6)
Out[12]:
In [3]:
plotSandNx(160e-6)
Out[3]:
In [4]:
plotSandNx(320e-6)
Out[4]:
In [7]:
plotSandNx(320e-6, Nxs=(100, 200, 400), spacing_ratios=(1.8,))
Out[7]: