<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox where print preview displays the noscript content */
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

Also see [[AdvancedOptions]]

This tiddler was automatically created to record the details of this server
A mesoscopic model of a diblock copolymer is used to study the formation, stability, and coarsening of lamellar phases. With the transition to new technologies in fields such as micro electronics or biomedicine, microstructural control of the polymer is necessary in order to meet particular performance requirements. As a consequence, increased emphasis has been placed on research on microstructure and self-assembly at the mesoscale. We mention, for example, the use of block copolymers as nanolithographic templates, or as photonic band gap materials, light emitting diodes and dielectric mirrors. The central challenge for widespread application in both areas is to achieve long-ranged domain order of the appropriate orientation.

[<img(30%+,auto)[http://homepages.spa.umn.edu/~vinals/research/bcopol/monomer.xfig.jpg]] Diblock copolymers are macromolecules comprising two chemically distinct and mutually incompatible segments (monomers A and B) that are covalently bonded. Their equilibrium properties are dictated by N, the degree or polymerization (i.e., the length of the chain), f, the volume fraction of one of the monomers, and $\chi$, the ~Flory-Huggins interaction parameter between the distinct segments. The first two parameters can be controlled through processing, whereas the third is determined by the choice of monomers involved. 

Above the order-disorder transition temperature $T_{ODT}$, the equilibrium phase is fluid like (disordered) (below, left).
[<img(25%+,auto)[http://homepages.spa.umn.edu/~vinals/research/bcopol/disordered.xfig.jpg]] Below $T_{ODT}$, equilibrium structures of a wide variety of symmetries have been predicted and experimentally observed. Around f=0.5 (symmetric mixture), a so called lamellar phase is observed (below, right), in which nanometer sized
layers of A and B rich regions alternate in space.

!!Orientation by oscillatory shear flows

Several methods are currently in use to accelerate the development of long-ranged order of block copolymer microstructures. We have focused on one the most common for bulk samples: an externally imposed reciprocating shear as shown in the figure [img(75%+,auto)[http://homepages.spa.umn.edu/~vinals/images/lam_3D_shear_transparent.jpg]].

In the absence of shear, an isotropic large scale configuration emerges. This is a visualization at fixed time. Surfaces shown are related to gradients of the nematic order parameter tensor and highlight grain boundaries in the system. Transparent regions correspond to locally ordered lamellae.


We also show animations of a thee dimensional lamellar phase as it coarsens as a function of time. Shown are defected regions (mostly grain boundaries) in the absence of shear.

<html><iframe width="420" height="315" src="http://www.youtube.com/embed/fuP9AyaOrKg" frameborder="0" allowfullscreen></iframe></html>

The same three dimensional system but under oscillatory shear (animation shown is in the reference frame co-moving with the oscillatory shear). Defects are now predominantly dislocation lines.

<html><iframe width="420" height="315" src="http://www.youtube.com/embed/WW-lAOIDLoc/" frameborder="0" allowfullscreen></iframe></html>


# Google Chrome does not allow """file:///""" URL's to use AJAX to load other files, so [[Plugin: jsMath]] cannot load {{{jsMath.js}}}.  This is a security design decision, and it seems unlikely that it will change.  To work around this, [[Plugin: jsMath]] will create a [[MarkupPostHead]] tiddler with a <script> tag to load it instead.  You will then be directed to save your TiddlyWiki.  (On Google Chrome this requires [[TiddlySaver.jar|http://www.tiddlywiki.com/TiddlySaver.jar]] in the same directory and a working Java plugin)  It is safe to pass around TiddlyWikis with this code in [[MarkupPostHead]], it will work on all browsers.  (But it makes the install 2-step and can create errors if you uninstall [[Plugin: jsMath]], beware!)  Another workaround is to add {{{--allow-file-access-from-files}}} to the {{{google-chrome}}} command line when you run it.
# Due to the same above "feature", certain sub-libraries loaded automatically by jsMath using AJAX will not work on Chrome using a """file:///""" URL.
Our research is of theoretical and computational nature, and focuses on mesoscale theories of nonequilibrium phenomena in extended systems, with applications to Materials Science and Soft Matter Physics. The evolution of systems outside of thermodynamic equilibrium generically involves unstable boundaries and moving topological defects. The mesoscale offers a convenient platform in which to bridge traditional microscopic theory and atomistic simulation of non equilibrium and fully macroscopic descriptions of transport models that need to accommodate discontinuities at moving boundaries and singular fields at defects. We develop mesocale models,  analyze their multiple scale asymptotics, and obtain their non equilibrium properties through large scale computation. Our research is currently motivated by the study of microstructure evolution in materials science, and fluid flows of topological origin in nematic suspensions.
!!Mesoscale theory of defected materials
[<img(45%+,auto)[http://homepages.spa.umn.edu/~vinals/tspot_files/PFC_amplitude_phase_dipole]]  A current objective in Materials Science, “reversing the arrow: materials by design”, calls for the development of theoretical and computational inverse methods to design materials that have specified properties and function. Such an inverse optimization problem requires robust solutions to the forward problem involved in the determination of macroscopic properties as a function of the nano and mesoscopic properties and composition of the material. Although great progress has been achieved in the inverse design of materials close to thermodynamic equilibrium, most materials, specially soft solids, are rarely uniform, but rather exhibit complex and often evolving microstructure. Therefore the standard tools of Solid State Physics and equilibrium Statistical Mechanics do not generally apply. In fact, the strong response of non equilibrium phases to external stresses and perturbations means that their properties strongly depend on interactions with boundaries, preparation methods, and prior history. The aim of our work is to establish the theoretical framework within which to predict structure evolution in non-equilibrium solids, and thus to develop the foundation of reliable forward models of processing-structure-property relationships.

Soft solids present an important class of materials for the study and eventual manipulation of defects in the design of material systems with tailored properties. Their elastic softness presents qualitatively and quantitatively different challenges for the study of collective defect equilibria and dynamics as compared to hard solids. In this sense, they hold great promise to become a practical avenue for allowing the resolution of new qualitative and quantitative questions in the field of defects and nonlinear elasticity theory. The larger size of the effective molecular units that constitute the soft solid not only lowers characteristic energies by several order of magnitude, but also characteristic distances (e.g., size of the unit cell) are much larger (hundreds of nm and above) so that they become accessible by conventional optical diagnostics. Decreases in characteristic energies also lead to shorter characteristic times for defect motion, and hence allow the study of their kinetics and their manipulation. Our research seeks to address key questions about the topological description of the kinematics of a defected solid, the appropriate constitutive laws for dissipative motion of defects, and to develop the theory in parallel with high resolution experiments and numerical analysis of mesoscale models.

!!Topology driven flows in nematic suspensions

[<img(20%+,auto)[http://homepages.spa.umn.edu/~vinals/tspot_files/transverse_chargedensitydipole.png]][<img(20%+,auto)[http://homepages.spa.umn.edu/~vinals/tspot_files/transverse_velocitydipole.png]]  The study of of liquid crystal based suspensions is motivated by applications in materials science as well as in biological systems. At a fundamental level, and in contrast with normal suspending fluids, nematic order in a liquid crystalline matrix leads to long range elastic interactions either among colloidal particles or with bounding walls, resulting in a variety of unexpected phenomena. Furthermore, long range order in the matrix is distorted by the suspended particles, resulting in unavoidable topological defects that must move with the particles. On the one hand, the existence of complex spatial structure in the liquid matrix affords new opportunities for flow design and control, processing, and suspension stability. At the same time, and for the same reasons, efficient engineering of these systems requires major advances to our current understanding of flows induced in media with complex topological structure. From proposals for new display technologies and nanofluidic devices to more fundamental questions about the mechanisms of clustering and de-clustering in systems of particles, new experimental findings call for major modeling and analysis efforts. For example, studies of electrophoresis in structured media can facilitate related efforts in biology to model and control nano-fluidic transport as well as contribute towards understanding of motion of cancer cells and their clustering in tumor metastasis.

The figure above (left) shows the spatial charge distribution induced by a (+1, -1) disclination pair under a uniform but oscillatory electric field normal to the line joining the defects. A (+1) disclination represents a suspended particle with homeotropic anchoring, and the (-1) disclination is the associated hyperbolic hedgehog. Both defects lead to spatial charge separation which, in turn, results in //streaming flows// (figure on the right), resulting in transport //normal// to the direction of the applied field. Thus a nematic matrix allows nonlinear anisotropic hydrodynamic mobilities. Effects like this one are being developed to engineer designer flows for use in microfluidic devices, including particle sorting and aggregation (including cell sorting), and stirring and the micro scale.
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
|border-right:0px;vertical-align:top;padding:15px;<br><br>School of Physics and Astronomy<br>University of Minnesota<br>116 Church St. S.E.<br>Minneapolis, MN 55455<br>Office: Tate Hall 130-17<br>(612) 624-9074<br>(612) 624-4578 (FAX)<br>vin&#97;ls&#64;&#117;mn.ed&#117;<br><br><br><br>[[Campus Map|https://goo.gl/maps/8PCy5gNpdYk]]<br>[[Campus webcam|http://cse.umn.edu/dashboard/webcam/]]<br><br>[[School of Physics Home Page|http://www.physics.umn.edu/]]<br>[[Minnesota Supercomputing Institute|http://www.msi.umn.edu]]|border-left-width:0;border-bottom:0px;padding:15px; [img(90%+,auto)[http://homepages.spa.umn.edu/~vinals/images/P1010104_small.jpg]]|
|~|border-left:0px;border-top:0px; Jorge at George's Mill in Sneinton |
|Author|Eric Shulman|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
The extended image syntax is:
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
2011.09.03 [1.2.3] bypass addStretchHandlers() if no '+' suffix is used (i.e., not resizable)
2010.07.24 [1.2.2] moved tip/dragtip text to config.formatterHelpers.imageSize object to enable customization
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 3, date: new Date(2011,9,3)};
var f=config.formatters[config.formatters.findByField("name","image")];
f.handler=function(w) {
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var floatLeft=lookaheadMatch[1];
		var floatRight=lookaheadMatch[2];
		var width=lookaheadMatch[3];
		var height=lookaheadMatch[4];
		var tooltip=lookaheadMatch[5];
		var src=lookaheadMatch[6];
		var link=lookaheadMatch[7];

		// Simple bracketted link
		var e = w.output;
		if(link) { // LINKED IMAGE
			if (config.formatterHelpers.isExternalLink(link)) {
				if (config.macros.attach && config.macros.attach.isAttachment(link)) {
					// see [[AttachFilePluginFormatters]]
					e = createExternalLink(w.output,link);
					e.title = config.macros.attach.linkTooltip + link;
				} else
					e = createExternalLink(w.output,link);
			} else 
				e = createTiddlyLink(w.output,link,false,null,w.isStatic);

		var img = createTiddlyElement(e,"img");
		if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
		if(width||height) {
			var x=width.trim(); var y=height.trim();
			var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
			var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
			if (x.substr(0,2)=="{{")
				{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			if (y.substr(0,2)=="{{")
				{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			img.style.width=x.trim(); img.style.height=y.trim();
			if (stretchW||stretchH) config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
		if(tooltip) img.title = tooltip;

		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
		else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
			if (config.browser.isIE || config.browser.isSafari) {
					return false;
			} else
		w.nextMatch = this.lookaheadRegExp.lastIndex;

	tip: 'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size',
	dragtip: 'DRAG=stretch/shrink, '

config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
	e.statusMsg='width=%0, height=%1';
	e.onmousedown=function(ev) { var ev=ev||window.event;
		return false;
	e.onmousemove=function(ev) { var ev=ev||window.event;
		if (this.sizing) {
			var s=this.style;
			var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
			var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
			var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
			var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
			if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
			if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
			clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
		return false;
	e.onmouseup=function(ev) { var ev=ev||window.event;
		if (ev.shiftKey) { this.style.width=this.style.height=''; }
		if (ev.ctrlKey)  { this.style.width=this.originalW; this.style.height=this.originalH; }
		return false;
	e.onmouseout=function(ev) { var ev=ev||window.event;
		return false;
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Date:''|mar 17, 2007|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
version.extensions.LoadRemoteFileThroughProxy = {
 major: 1, minor: 1, revision: 0, 
 date: new Date("mar 17, 2007"), 
 source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};

if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};

bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
 if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){ 
 url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
 return bidix.core.loadRemoteFile(url,callback,params);
[[Research|Current Research Areas]]
[[Preprints|Preprints of Recent Research]]
[[Publication Archive]]
[[Tag Cloud]]
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Date:''|Apr 19, 2007|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'

config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");

merge(config.macros.option.types, {
	'pas': {
		elementType: "input",
		valueField: "value",
		eventName: "onkeyup",
		className: "pasOptionInput",
		typeValue: config.macros.option.passwordInputType,
		create: function(place,type,opt,className,desc) {
			// password field
			// checkbox linked with this password "save this password on this computer"
			// text savePasswordCheckboxLabel
		onChange: config.macros.option.genericOnChange

merge(config.optionHandlers['chk'], {
	get: function(name) {
		// is there an option linked with this chk ?
		var opt = name.substr(3);
		if (config.options[opt]) 
		return config.options[name] ? "true" : "false";

merge(config.optionHandlers, {
	'pas': {
 		get: function(name) {
			if (config.options["chk"+name]) {
				return encodeCookie(config.options[name].toString());
			} else {
				return "";
		set: function(name,value) {config.options[name] = decodeCookie(value);}

// need to reload options to load passwordOptions

if (!config.options['pasPassword'])
	config.options['pasPassword'] = '';

		pasPassword: "Test password"
|Name|Plugin: Scientific Notation|
|Created by|BobMcElrath|
|Email|my first name at my last name dot org|
|Requires|[[TiddlyWiki|http://www.tiddlywiki.com]] &ge; 2.0.3, [[jsMath|http://www.math.union.edu/~dpvc/jsMath/]] &ge; 3.0, [[Plugin: jsMath]]|
This plugin will render numbers expressed in scientific notation, such as {{{3.5483e12}}} using the jsMath plugin to display it in an intuitive way such as 3.5483e12.  You may customize the number of significant figures displayed, as well as "normalize" numbers so that {{{47392.387e9}}} is displayed as 47392.387e9.
Install the Requirements, above, add this tiddler to your tiddlywiki, and give it the {{{systemConfig}}} tag.
* 1-Feb-06, version 1.0, Initial release
  name: "scientificNotation",
  match: "\\b[0-9]+\\.[0-9]+[eE][+-]?[0-9]+\\b",
  element: "span",
  className: "math",
  normalize: true,                          // set to 'true' to convert numbers to X.XXX \times 10^{y}
  sigfigs: 3,                               // with this many digits in the mantissa
  handler: function(w) {
    var snRegExp = new RegExp("\\b([0-9]+(?:\\.[0-9]+)?)[eE]([-0-9+]+)\\b");
    var mymatch = snRegExp.exec(w.matchText);
    var mantissa = mymatch[1];
    var exponent = parseInt(mymatch[2]);
    // normalize the number.
    if(this.normalize) {
      mantissa = parseFloat(mantissa);
      while(mantissa > 10.0) {
        mantissa = mantissa / 10.0;
      while(mantissa < 1.0) {
        mantissa = mantissa * 10.0;
      var sigfigsleft = this.sigfigs;
      mantissa = parseInt(mantissa) + "." + (Math.round(Math.pow(10,this.sigfigs-1)*mantissa)+"").substr(1,this.sigfigs-1);
    var e = document.createElement(this.element);
    e.className = this.className;
    if(exponent == 0) {
    } else {
      e.appendChild(document.createTextNode(mantissa + "\\times 10^{" + exponent + "}"));
|Name|Plugin: arXiv Links|
|Created by|BobMcElrath|
|Email|my first name at my last name dot org|
|Requires|[[TiddlyWiki|http://www.tiddlywiki.com]] &ge; 2.0.3|
This formatting plugin will render links to the [[arXiv|http://www.arxiv.org]] preprint system.  If you type a paper reference such as hep-ph/0509024, it will be rendered as an external link to the abstract of that paper.
Add this tiddler to your tiddlywiki, and give it the {{{systemConfig}}} tag.
* 1-Feb-06, version 1.0, Initial release
  name: "arXivLinks",
  match: "\\b(?:astro-ph|cond-mat|hep-ph|hep-th|hep-lat|gr-qc|nucl-ex|nucl-th|quant-ph|(?:cs|math|nlin|physics|q-bio)(?:\\.[A-Z]{2})?)/[0-9]{7}\\b",
  element: "a",
  handler: function(w) {
    var e = createExternalLink(w.output, "http://arxiv.org/abs/"+w.matchText);
    e.target = "_blank"; // open in new window
|Name|Plugin: jsMath|
|Created by|BobMcElrath|
|Email|my first name at my last name dot org|
|Requires|[[TiddlyWiki|http://www.tiddlywiki.com]] &ge; 2.0.3, [[jsMath|http://www.math.union.edu/~dpvc/jsMath/]] &ge; 3.0|
LaTeX is the world standard for specifying, typesetting, and communicating mathematics among scientists, engineers, and mathematicians.  For more information about LaTeX itself, visit the [[LaTeX Project|http://www.latex-project.org/]].  This plugin typesets math using [[jsMath|http://www.math.union.edu/~dpvc/jsMath/]], which is an implementation of the TeX math rules and typesetting in javascript, for your browser.  Notice the small button in the lower right corner which opens its control panel.
In addition to this plugin, you must also [[install jsMath|http://www.math.union.edu/~dpvc/jsMath/download/jsMath.html]] on the same server as your TiddlyWiki html file.  If you're using TiddlyWiki without a web server, then the jsMath directory must be placed in the same location as the TiddlyWiki html file.

I also recommend modifying your StyleSheet use serif fonts that are slightly larger than normal, so that the math matches surrounding text, and \\small fonts are not unreadable (as in exponents and subscripts).
.viewer {
  line-height: 125%;
  font-family: serif;
  font-size: 12pt;

You may also optionally add the following code to load jsMath in [[MarkupPostHead]] if you desire.
<script src="jsMath/jsMath.js"></script>
[[Plugin: jsMath]] will normally load jsMath dynamically using AJAX, but adding the above in [[MarkupPostHead]] may be useful if you have jsMath stored in a non-standard location, or if your browser's cross-site origin policy forbids loading files from file URL's using AJAX.  (e.g. Google Chrome)  
* 11-Nov-05, version 1.0, Initial release
* 22-Jan-06, version 1.1, updated for ~TW2.0, tested with jsMath 3.1, editing tiddlywiki.html by hand is no longer necessary.
* 24-Jan-06, version 1.2, fixes for Safari, Konqueror
* 27-Jan-06, version 1.3, improved error handling, detect if ajax was already defined (used by ZiddlyWiki)
* 12-Jul-06, version 1.4, fixed problem with not finding image fonts
* 26-Feb-07, version 1.5, fixed problem with Mozilla "unterminated character class".
* 27-Feb-07, version 1.5.1, Runs compatibly with TW 2.1.0+, by Bram Chen
* 5-May-11, version 1.6, Use a script tag to load in Chrome, use jQuery for ajax
|{{{The variable $x$ is real.}}}|The variable $x$ is real.|
|{{{The variable \(y\) is complex.}}}|The variable \(y\) is complex.|
|{{{This \[\int_a^b x = \frac{1}{2}(b^2-a^2)\] is an easy integral.}}}|This \[\int_a^b x = \frac{1}{2}(b^2-a^2)\] is an easy integral.|
|{{{This $$\int_a^b \sin x = -(\cos b - \cos a)$$ is another easy integral.}}}|This $$\int_a^b \sin x = -(\cos b - \cos a)$$ is another easy integral.|
|{{{Block formatted equations may also use the 'equation' environment \begin{equation}  \int \tan x = -\ln \cos x \end{equation} }}}|Block formatted equations may also use the 'equation' environment \begin{equation}  \int \tan x = -\ln \cos x \end{equation}|
|{{{Equation arrays are also supported \begin{eqnarray} a &=& b \\ c &=& d \end{eqnarray} }}}|Equation arrays are also supported \begin{eqnarray} a &=& b \\ c &=& d \end{eqnarray} |
|{{{I spent \$7.38 on lunch.}}}|I spent \$7.38 on lunch.|
|{{{I had to insert a backslash (\\) into my document}}}|I had to insert a backslash (\\) into my document|

// Load jsMath
if(typeof jsMath == 'undefined') {
  jsMath = {
    Setup: {inited: 1},          // don't run jsMath.Setup.Body() yet
    Autoload: {root: new String(document.location).replace(/[^\/]*$/,'jsMath/')}  // URL to jsMath directory, change if necessary
  try {
    jQuery.ajax({url: jsMath.Autoload.root+"jsMath.js", dataType: 'script',
                 async: false, error: function(j, s, e) { throw(e); } });
    jsMath.Setup.inited=0;  //  allow jsMath.Setup.Body() to run again
  } catch(e) {
    if(navigator.userAgent.toLowerCase().indexOf('chrome') > -1
        && document.location.toString().indexOf('file') == 0) {
      var jsMathScript = '<!--{{{-->\n<script src="jsMath/jsMath.js"></script>\n<!--}}}-->';
      var MarkupPostHead = store.fetchTiddler("MarkupPostHead");
      if(MarkupPostHead && !MarkupPostHead.match(jsMathScript)) {
        MarkupPostHead.text += jsMathScript;
      } else {
        MarkupPostHead = store.createTiddler("MarkupPostHead");
        MarkupPostHead.text = jsMathScript;
      throw("jsMath added to MarkupPostHead: now save and reload (Google Chrome cross origin file:/// URL workaround)");
    } else {
      alert("jsMath was not found: you must place the 'jsMath' directory in the same place as this file.  "
           +"The error was:\n"+e.name+": "+e.message);
      throw(e);  // abort eval

// Define wikifers for latex
config.formatterHelpers.mathFormatHelper = function(w) {
    var e = document.createElement(this.element);
    e.className = this.className;
    var endRegExp = new RegExp(this.terminator, "mg");
    endRegExp.lastIndex = w.matchStart+w.matchLength;
    var matched = endRegExp.exec(w.source);
    if(matched) {
        var txt = w.source.substr(w.matchStart+w.matchLength, 
        if(this.keepdelim) {
          txt = w.source.substr(w.matchStart, matched.index+matched[0].length-w.matchStart);
        w.nextMatch = endRegExp.lastIndex;

  name: "displayMath1",
  match: "\\\$\\\$",
  terminator: "\\\$\\\$\\n?", // 2.0 compatability
  termRegExp: "\\\$\\\$\\n?",
  element: "div",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper

  name: "inlineMath1",
  match: "\\\$", 
  terminator: "\\\$", // 2.0 compatability
  termRegExp: "\\\$",
  element: "span",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper

var backslashformatters = new Array(0);

  name: "inlineMath2",
  match: "\\\\\\\(",
  terminator: "\\\\\\\)", // 2.0 compatability
  termRegExp: "\\\\\\\)",
  element: "span",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper

  name: "displayMath2",
  match: "\\\\\\\[",
  terminator: "\\\\\\\]\\n?", // 2.0 compatability
  termRegExp: "\\\\\\\]\\n?",
  element: "div",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper

  name: "displayMath3",
  match: "\\\\begin\\{equation\\}",
  terminator: "\\\\end\\{equation\\}\\n?", // 2.0 compatability
  termRegExp: "\\\\end\\{equation\\}\\n?",
  element: "div",
  className: "math",
  handler: config.formatterHelpers.mathFormatHelper

// These can be nested.  e.g. \begin{equation} \begin{array}{ccc} \begin{array}{ccc} ...
  name: "displayMath4",
  match: "\\\\begin\\{eqnarray\\}",
  terminator: "\\\\end\\{eqnarray\\}\\n?", // 2.0 compatability
  termRegExp: "\\\\end\\{eqnarray\\}\\n?",
  element: "div",
  className: "math",
  keepdelim: true,
  handler: config.formatterHelpers.mathFormatHelper

// The escape must come between backslash formatters and regular ones.
// So any latex-like \commands must be added to the beginning of
// backslashformatters here.
    name: "escape",
    match: "\\\\.",
    handler: function(w) {
        w.nextMatch = w.matchStart+2;


window.wikify = function(source,output,highlightRegExp,tiddler)
    if(source && source != "") {
        if(version.major == 2 && version.minor > 0) {
            var wikifier = new Wikifier(source,getParser(tiddler),highlightRegExp,tiddler);
        } else {
            var wikifier = new Wikifier(source,formatter,highlightRegExp,tiddler);
!! Topological defect motion, microstructure, and stress response in materials
* [[Anisotropic linear response in block copolymer lamellar phases|http://homepages.spa.umn.edu/~vinals/mss/cy1.pdf]].
* [[The role of viscoelastic contrast in orientation selection of block copolymer lamellar phases under oscillatory shear|http://homepages.spa.umn.edu/~vinals/mss/cy3_interface.pdf]].
* [[Impact of lattice rotation on dislocation motion|http://homepages.spa.umn.edu/~vinals/mss/bp1.pdf]].
* [[Dislocation dynamics and crystal plasticity in the phase field crystal model|http://homepages.spa.umn.edu/~vinals/mss/as1.pdf]].
!! Transport in nematic suspensions
* [[Liquid crystals with patterned molecular orientation as an electrolytic active medium|http://homepages.spa.umn.edu/~vinals/mss/ActiveLC_Sept_29_2015.pdf]].
* [[Electrokinetic flows in liquid crystal thin films with fixed anchoring|http://homepages.spa.umn.edu/~vinals/mss/ck2.pdf]]
* [[Nonlinear electrophoresis of colloids controlled by anisotropy of conductivity and permittivity of liquid crystal electrolyte|http://homepages.spa.umn.edu/~vinals/mss/ck5.pdf]]
* [[Q-tensor model for electrokinetics in nematic liquid crystals|http://homepages.spa.umn.edu/~vinals/mss/1612.03446v1.pdf]].
* [[Electrokinetic effects in nematic suspensions: Single particle electroosmosis and inter particle interactions|http://homepages.spa.umn.edu/~vinals/mss/ck7.pdf]].
* [[A connection between Living Liquid Crystals and electrokinetic phenomena in nematic fluids|http://homepages.spa.umn.edu/~vinals/mss/ck8.pdf]].
!!Sample presentations
* [[Mesoscale description of defected materials|http://homepages.spa.umn.edu/~vinals/mss/ima_09142012.pdf]]. IMA Hot Topics Special Workshop: Mathematics and the Materials Genome Initiative.
* [[Pattern formation in mesophases|http://homepages.spa.umn.edu/~vinals/mss/msu-uab_10042012.pdf]]. 9th ~MSU-UAB Conference on Differential Equations and Computational Simulations.
* [[Liquid crystal electro osmosis|http://homepages.spa.umn.edu/~vinals/mss/siam_11MAY2016.pdf]]. SIAM Conference on the Mathematical Aspects of Materials Science.
* [[Mesoscale models and defect motion|http://homepages.spa.umn.edu/~vinals/mss/cmu_30SEP2016.pdf]]. Department of Civil and Environmental Engineering. Carnegie Mellon University.
* [[Liquid crystal electro kinetics|http://homepages.spa.umn.edu/~vinals/mss/cnls_3MAY2017.pdf]]. Center for Nonlinear Studies, Los Alamos National Laboratory.
* [[Mesoscale defects and transport|http://homepages.spa.umn.edu/~vinals/mss/ef_15JUN2017.pdf]]. ~EarthFlows 2017.

# J. Viñals, R.F. Sekerka, and P. Debroy. [[Morphological stability analysis of directional solidification in thin samples with lateral heat transfer|http://dx.doi.org/10.1016/0022-0248(88)90200-X]]. //J. Crystal Growth// ''89'', 405 (1988).
# J. Viñals and D. Jasnow. [[Dynamical scaling during interfacial growth following a morphological instability|http://journals.aps.org/pra/abstract/10.1103/PhysRevA.40.3864]]. //Phys. Rev. A// ''40'', 3864 (1989). 
# W.W. Mullins and J. Viñals. [[Self-similarity and growth kinetics driven by surface free energy reduction|http://dx.doi.org/10.1016/0001-6160(89)90096-5]]. //Acta metall.// ''37'', 991 (1989).
# P.H. Leo, W.W. Mullins, R.F. Sekerka, and J. Viñals. [[Effect of elasticity on late stage coarsening|http://dx.doi.org/10.1016/0956-7151(90)90125-Z]]. //Acta metall. mater.// ''38'', 1573 (1990).
# D. Jasnow and  Viñals. [[Dynamical scaling during interfacial growth in the one-sided model|http://journals.aps.org/pra/abstract/10.1103/PhysRevA.41.6910]]. //Phys. Rev. A// ''41'', 6910 (1990).
# J. Viñals, E. Hernandez Garcia, M. San Miguel, and R. Toral. [[Numerical study of the dynamical aspects of pattern selection in the stochastic ~Swift-Hohenberg equation in one dimension|http://dx.doi.org/10.1103/PhysRevA.44.1123]]. //Phys. Rev. A// ''44'', 1123 (1991).
# H.-W. Xi, J. Vi&ntilde;als, and J.D. Gunton. [[Numerical solution of the ~Swift-Hohenberg equation in two dimensions|http://dx.doi.org/10.1016/0378-4371(91)90173-A]]. //Physica A// ''177'', 356 (1991).
# K.R. Elder, J. Vi&ntilde;als, and M. Grant. [[Ordering Dynamics in the Two-Dimensional Stochastic Swift-Hohenberg Equation|http://dx.doi.org/10.1103/PhysRevLett.68.3024]]. //Phys. Rev. Lett.// ''68'', 3024 (1992).
# J.M. Rickman, J. Viñals, R.F. Sekerka, and W.W. Mullins. [[Effects of long-range crystalline order on collective diffusion in binary solids|http://dx.doi.org/10.1103/PhysRevB.45.7750]]. //Phys. Rev. B// ''45'', 7750 (1992).
# J. Vi&ntilde;als and D. Jasnow. [[Coarsening following a morphological instability in the one-sided model|http://dx.doi.org/10.1103/PhysRevA.46.7777]]. //Phys. Rev. A// ''46'', 7777 (1992).
# J. Vi&ntilde;als, H.-W. Xi, and J.D. Gunton. [[Numerical study of the influence of forcing terms and fluctuations near onset on the roll pattern in Rayleigh-Bénard convection in a simple fluid|http://dx.doi.org/10.1103/PhysRevA.46.918]]. //Phys. Rev. A// ''46'', 918 (1992).
# H. Xi, J. Viñals and J.D. Gunton. [[Numerical study of pattern formation following a convective instability in non-Boussinesq fluids|http://dx.doi.org/10.1103/PhysRevA.46.R4483]]. //Phys. Rev. A// ''46'', R4483 (1992).
# K.R. Elder, J. Viñals and M. Grant. [[Dynamic scaling and quasiordered states in the two-dimensional Swift-Hohenberg equation|http://dx.doi.org/10.1103/PhysRevA.46.7618]]. //Phys. Rev. A// ''46'', 7618 (1992).
# M. Lacasse, J. Viñals and M. Grant. [[Dynamic Monte Carlo renormalization-group method|http://dx.doi.org/10.1103/PhysRevB.47.5646]].  //Phys. Rev. B// ''47'', 5646 (1993).
# W.W. Mullins and J. Viñals. [[Scaling in linear bubble models of grain growth|http://dx.doi.org/10.1016/0956-7151(93)90245-N]]. //Acta metall. mater.// ''41'', 1359 (1993).
# H.-W. Xi, J.D. Gunton and J. Viñals. [[Spiral-pattern formation in Rayleigh-Benard Convection|http://dx.doi.org/10.1103/PhysRevE.47.R2987]]. //Phys. Rev. E// ''47'', R2987 (1993).
# E. ~Hernandez-Garcia, J. Viñals, R. Toral and M. San Miguel. [[Fluctuations and Pattern Selection near an Eckhaus Instability|http://dx.doi.org/10.1103/PhysRevLett.70.3576]]. //Phys. Rev. Lett.// ''70'', 3576 (1993).
# H.-W. Xi, J.D. Gunton and J. Viñals. [[Pattern formation duringYourName Rayleigh-Bénard convection in non-Boussinesq fluids|http://arxiv.org/abs/patt-sol/9305001]]. arXiv.org:patt-sol/9305001 (1993).
# H. Xi, J.D. Gunton and J. Viñals. [[Spiral Defect Chaos in a Model of ~Rayleigh-Bénard Convection|http://dx.doi.org/10.1103/PhysRevLett.71.2030]]. //Phys. Rev. Lett.// ''71'', 2030 (1993).
# J. Casademunt, W. Zhang, J. Viñals and R.F. Sekerka. [[Stability of a fluid surface in a microgravity environment|http://arc.aiaa.org/doi/abs/10.2514/3.11886?journalCode=aiaaj]]. //AIAA J.// ''31'', 2027 (1993).
# W. Zhang, J. Casademunt and J. Viñals. [[Study of the parametric oscillator driven by narrow band noise to model the response of a fluid surface to time-dependent accelerations|http://link.aip.org/link/doi/10.1063/1.858723]]. //Phys. Fluids A// ''5'', 3147 (1993).
# J.R. Thomson, J. Casademunt and J. Viñals. [[Cavity flow induced by a fluctuating acceleration field|http://link.aip.org/link/doi/10.1063/1.868627]]. //Phys. Fluids A// ''7'', 292 (1995).
# W. Zhang and J. Viñals. [[Secondary Instabilities and Spatiotemporal Chaos in Parametric Surface Waves|http://dx.doi.org/10.1103/PhysRevLett.74.690]]. //Phys. Rev. Lett.// ''74'', 690 (1995).
# R. Chella and J. Viñals. [[Mixing of a two-phase fluid by cavity flow|http://dx.doi.org/10.1103/PhysRevE.53.3832]]. //Phys. Rev. E// ''53'', 3832 (1996).
# J.R. Thomson and J Viñals. [[Statistical saturation of buoyant flow induced by a fluctuating acceleration|http://arc.aiaa.org/doi/abs/10.2514/3.13176?journalCode=aiaaj]] . //AIAA J.// ''34'', 975 (1996).
# M. Gurtin, D. Polignone and J. Viñals. [[Two-phase binary fluids and immiscible fluids described by an order parameter|http://dx.doi.org/10.1142/S0218202596000341]]. //Mathematical Models and Methods in Applied Sciences// ''6'', 815 (1996). Also at [[arXiv:patt-sol/9506001|http://arxiv.org/abs/patt-sol/9506001]], [[here|http://homepages.spa.umn.edu/~vinals/mss/mort.ps]], or [[here|http://homepages.spa.umn.edu/~vinals/mss/m3as_6_815_1996.pdf]].
# D. Jasnow and J. Viñals. [[Coarse-grained description of thermo-capillary flow|http://link.aip.org/link/doi/10.1063/1.868851]]. //Phys. Fluids// ''8'', 660 (1996).
# W. Zhang and J. Viñals. [[Square patterns and quasipatterns in weakly damped Faraday waves|http://dx.doi.org/10.1103/PhysRevE.53.R4283]]. //Phys. Rev. E// ''53'', R4283 (1996).
# J.R. Thomson, J. Casademunt, F. Drolet and J. Viñals. [[Coarsening of solid-liquid mixtures in a random acceleration field|http://link.aip.org/link/doi/10.1063/1.869259]]. //Phys. Fluids// ''9'', 1336 (1997).
# W. Zhang and J. Viñals. [[Pattern formation in weakly damped parametric surface waves|http://dx.doi.org/10.1017/S0022112096004764]]. //J. Fluid Mech.// ''336'', 301 (1997).
# J.M. Rickman and J. Viñals. [[Modeling of dislocation structures in materials|http://dx.doi.org/10.1080/01418619708209855]]. //Phil. Mag. A// ''75'', 1251 (1997).
# W. Zhang and J. Viñals. [[Pattern formation in weakly damped parametric surface waves driven by two frequency components|http://dx.doi.org/10.1017/S0022112097005387]]. //J. Fluid Mech.// ''341'', 225 (1997).
# P. Chen and J. Viñals. [[Pattern selection in Faraday waves|http://dx.doi.org/10.1103/PhysRevLett.79.2670]]. //Phys. Rev. Lett.// ''79'', 2670 (1997).
# W. Zhang and J. Viñals. [[Numerical study of pattern formation in weakly damped parametric surface waves|http://dx.doi.org/10.1016/S0167-2789(97)00172-3]]. //Physica D// ''116'', 225 (1998).
# F. Drolet and J. Viñals. [[Onset of oscillatory instabilities under stochastic modulation|http://dx.doi.org/10.1103/PhysRevE.56.2649]]. //Phys. Rev. E// ''56'', 2649 (1997).
# J. Viñals and W.W. Mullins. [[Self-similarity and coarsening of three dimensional particles on a one or two dimensional matrix|http://link.aip.org/link/doi/10.1063/1.366751]]. //J. Appl. Phys.// ''83'', 621 (1998).
# F. Drolet and J. Viñals. [[Abiabatic reduction near a bifurcation in stochastically modulated systems|http://dx.doi.org/10.1103/PhysRevE.57.5036]]. //Phys. Rev. E// ''57'', 5036 (1998).
# P. Chen and J. Viñals. [[Amplitude equations and pattern selection in Faraday waves|http://dx.doi.org/10.1103/PhysRevE.60.559]]. //Phys. Rev. E// ''60'', 551 (1999).
# F. Drolet, P. Chen, and J. Viñals. [[Lamellae alignment by shear flow in a model of a diblock copolymer|http://dx.doi.org/10.1021/ma990448o]]. //Macromolecules// ''32'', 8603 (1999).
# H.-Y. Chen, D. Jasnow and J. Viñals. [[Interface and contact line motion in a two phase fluid under shear flow|http://dx.doi.org/10.1103/PhysRevLett.85.1686]]. //Phys. Rev. Lett.// ''85'', 1686 (2000).
# D. Volfson and J. Viñals. [[Flow induced by a randomly vibrating boundary|http://journals.cambridge.org/action/displayAbstract?fromPage=online&aid=78605]]. //J. Fluid Mech.// ''432'', 387 (2001).
# D. Boyer and J. Viñals. [[Grain boundary motion in layered phases|http://dx.doi.org/10.1103/PhysRevE.63.061704]]. //Phys. Rev. E// ''63'', 061704 (2001).
# D. Boyer and J. Viñals. [[Domain coarsening of stripe patterns close to onset|http://dx.doi.org/10.1103/PhysRevE.64.050101]]. //Phys. Rev. E// ''64'', 050101(R) (2001).
# F. Drolet and J. Viñals. [[Adiabatic elimination and reduced probability distribution functions in spatially extended systems with a fluctuating control parameter|http://dx.doi.org/10.1103/PhysRevE.64.026120]]. //Phys. Rev. E// ''64'', 026120 (2001).
# D. Volfson and J. Viñals. [[Morphological stability analysis of directional solidification into an oscillatory fluid layer|http://link.aip.org/link/doi/10.1063/1.1416883]]. //Phys. Fluids// ''13'', 3599 (2001).
# P. Chen and J. Viñals. [[Lamellar phase stability in diblock copolymers under oscillatory shear flows|http://dx.doi.org/10.1021/ma011586s]]. //Macromolecules// ''35'', 4183 (2002).
# D. Boyer and J. Viñals. [[Grain boundary pinning and glassy dynamics in stripe phases|http://dx.doi.org/10.1103/PhysRevE.65.046119]]. //Phys. Rev. E// ''65'', 046119 (2002).
# W.W. Mullins and J. Viñals. [[Linear bubble model of abnormal grain growth|http://dx.doi.org/10.1016/S1359-6454(02)00121-0]]. //Acta Materialia// ''50'', 2945 (2002).
# D. Boyer and J. Viñals. [[Weakly nonlinear theory of grain boundary motion in patterns with crystalline symmetry|http://dx.doi.org/10.1103/PhysRevLett.89.055501]]. //Phys. Rev. Lett.// ''89'', 055501 (2002).
# J. Viñals, A. Kolinski and J. Skolnick. [[Numerical study of the entropy loss of dimerization and the folding thermodynamics of the ~GCN4 leucine zipper|http://dx.doi.org/10.1016/S0006-3495(02)75289-2]]. //Biophys. J.// ''83'', 2801 (2002).
# Z.-F. Huang, F. Drolet and J. Viñals. [[Motion of a transverse/parallel grain boundary in a block copolymer under oscillatory shear flow|http://dx.doi.org/10.1021/ma034083q]]. //Macromolecules// ''36'', 9622 (2003).
# Z.-F. Huang and J. Viñals. [[Shear induced grain boundary motion for lamellar phases in the weakly nonlinear regime|http://dx.doi.org/10.1103/PhysRevE.69.041504]]. //Phys. Rev. E// ''69'', 041504 (2004).
# J.M. Vega, S. Ruediger, and J. Viñals. [[A phenomenological model of weakly damped Faraday waves and the associated mean flow|http://dx.doi.org/10.1103/PhysRevE.70.046306]]. //Phys. Rev. E// ''70'', 046306 (2004).
# J.M. Rickman, J. Viñals, and R. ~LeSar. [[Unified framework for dislocation-based defect energetics|http://dx.doi.org/10.1080/14786430412331314618]]. //Phil. Mag. A// ''85'', 917 (2005).
# Z.-F. Huang and J. Viñals. [[Tilt grain boundary instabilities in three dimensional lamellar patterns|http://dx.doi.org/10.1103/PhysRevE.71.031501]]. //Phys. Rev. E// ''71'', 031501 (2005).
# Z.-F. Huang and J. Viñals. [[Orientation selection in lamellar phases by oscillatory shears|http://dx.doi.org//10.1103/PhysRevE.73.060501]]. //Phys. Rev. E// ''73'', 060501(R) (2006).
# Z.-F. Huang and J. Viñals. [[Stability of parallel/perpendicular domain boundaries in lamellar block copolymers under oscillatory shear|http://dx.doi.org/10.1122/1.2399088]]. //J. Rheol.// ''51'', 99 (2007).
# Z.-F. Huang and J. Viñals. [[Grain boundary dynamics in stripe phases of non potential systems|http://dx.doi.org/10.1103/PhysRevE.75.056202]]. //Phys. Rev. E// ''75'', 056202 (2007).
# S.-S. Yeh, C. Hsueh, P. Chen, and J. Viñals. [[Field induced columnar structures in a quasi two dimensional system of dipolar particles|http://dx.doi.org/10.1103/PhysRevE.76.051407]]. //Phys. Rev. E// ''76'', 051407 (2007).
# R. Tamate, K. Yamada, J . Viñals, and T. Ohta. [[Structural rheology of microphase separated diblock copolymers|http://homepages.spa.umn.edu/~vinals/mss/JPSJ-77-034802.pdf]]. //J. Phys. Soc. Jpn.// ''73'', 034802 (2008).
# J . Viñals. [[Defect dynamics in mesophases|http://dx.doi.org/10.1143/JPSJ.78.041011]]. //J. Phys. Soc. Jpn.// ''78'', 041011 (2009).
# M. Gaudreault and J . Viñals. [[Collapse transition of a hydrophobic self avoiding random walk in a coarse-grained model solvent|http://dx.doi.org/10.1103/PhysRevE.80.021916]]. //Phys. Rev. E// ''80'', 021916 (2009).
# X. Zhang, Z.-F. Huang, and J . Viñals. [[Stability analysis of twist grain boundaries in lamellar phases of lamellar phases of block copolymers|http://homepages.spa.umn.edu/~vinals/mss/xz1_arxiv_0804.pdf]]. arXiv:0804.2091.
# M. Gaudreault, F. Lepine and J . Viñals. [[Pitchfork and Hopf bifurcation threshold in stochastic equations with delayed feedback|http://dx.doi.org/10.1103/PhysRevE.80.061920]]. //Phys. Rev. E// ''80'', 061920 (2009).
# M. Gaudreault, F. Drolet, and J . Viñals. [[Analytical determination of the bifurcation thresholds in stochastic differential equatoins with delayed feedback|http://dx.doi.org/10.1103/PhysRevE.82.051124]]. //Phys. Rev. E// ''82'', 051124 (2010).
# M. Gaudreault, J. Berbert, and J . Viñals. [[Correlation times in stochastic equations with delayed feedback and multiplicative noise|http://dx.doi.org/10.1103/PhysRevE.83.011903]]. //Phys. Rev. E// ''83'', 011903 (2011).
# M. Gaudreault, F. Drolet, and J . Viñals. [[Bifurcation threshold of the delayed van der Pol oscilaltor under stochastic modulation|http://link.aps.org/doi/10.1103/PhysRevE.85.056214]]. //Phys. Rev. E// ''85'', 056214 (2012).
# C.-D. Yoo and J . Viñals. [[Anisotropic linear response in block copolymer lamellar phases|http://dx.doi.org/10.1021/ma300547y]]. //Macromolecules// ''45'', 4848 (2012).
# C.-D. Yoo and J . Viñals. [[The role of viscoelastic contrast in orientation selection of block copolymer lamellar phases under oscillatory shear|http://dx.doi.org/10.1039/c3sm00099k]]. //Soft Matter// ''9'', 7817 (2013).
# C.-D. Yoo and J . Vi&ntilde;als. [[Extended constitutive laws for lamellar phases|http://ejde.math.txstate.edu/conf-proc/20/y1/abstr.html]]. //Electronic Journal of Differential Equations// ''2013(20)'', 165 (2013).
# C. Peng, Y. Guo, C. Conklin, J. Vi&ntilde;als, S. V. Shiyanovskii, Q. Wei and O. D. Lavrentovich. [[Liquid crystals with patterned molecular orientation as an electrolytic active medium|http://journals.aps.org/pre/abstract/10.1103/PhysRevE.92.052502]]. //Phys. Rev. E// ''92'', 052502 (2015).
# B. Perreault, J . Viñals, and J.M. Rickman. [[Impact of lattice rotation on dislocation motion|http://link.aps.org/doi/10.1103/PhysRevB.93.014107]]. //Phys. Rev. B// ''93'', 014107 (2016).
# C. Conklin and J. Vi&ntilde;als. [[Electrokinetic flows in liquid crystal thin films with fixed anchoring|http://pubs.rsc.org/en/content/articlelanding/2017/sm/c6sm02393b#!divAbstract]]. //Soft Matter// ''13'', 725 (2017).
# S. Paladugu, C. Conklin, J. Vi&ntilde;als, and O. D. Lavrentovich. [[Nonlinear electrophoresis of colloids controlled by anisotropy of conductivity and permittivity of liquid crystal electrolyte|https://journals.aps.org/prapplied/abstract/10.1103/PhysRevApplied.7.034033]]. //Phys. Rev. Applied// ''7'', 034033 (2017).
# Oleh M. Tovkach, Christopher Conklin, M. Carme Calderer, Dmitry Golovaty, Oleg D. Lavrentovich, Jorge Vi&ntilde;als, Noel J. Walkington. [[Q-tensor model for electrokinetics in nematic liquid crystals|https://journals.aps.org/prfluids/abstract/10.1103/PhysRevFluids.2.053302]]. //Phys. Rev. Fluids// ''2'', 053302 (2017).
# A. Skaugen, L. Angheluta, and J. Vi&ntilde;als. [[Dislocation dynamics and crystal plasticity in the phase field crystal model|http://homepages.spa.umn.edu/~vinals/mss/as1.pdf]]. //Phys. Rev. B//, in press.
# Christopher Conklin, Oleh M. Tovkach, M. Carme Calderer, Dmitry Golovaty, Oleg D. Lavrentovich, Jorge Vi&ntilde;als, Noel J. Walkington. [[Electrokinetic effects in nematic suspensions: Single particle electroosmosis and inter particle interactions|http://homepages.spa.umn.edu/~vinals/mss/ck7.pdf]]. Submitted to //Phys. Rev. E//.
# Christopher Conklin, Jorge Vi&ntilde;als, and Oriol T. Valls. [[A connection between Living Liquid Crystals and electrokinetic phenomena in nematic fluids|http://homepages.spa.umn.edu/~vinals/mss/ck8.pdf]]. //Soft Matter//, in press.
[[Group Site|http://vtcnls.tiddlyspot.com]]
[[Nematic Colloids (OSF)|https://osf.io/8hcpe/]]
[[Personal Site|http://jv2037.tiddlyspot.com]]
[[PHYS 4041|http://phys4041.tiddlyspot.com]]
[[PHYS 5201|http://phys5201.tiddlyspot.com]]
[[PHYS 8702|http://phys8702.tiddlyspot.com]]
!!!Conference Information
[[Soft Matter|http://soft-matter.us/]]
[[Physics calendar|http://www.conference-service.com/conferences/physics.html]]
[[Physics Today calendar|http://www.physicstoday.org/cal/eventhome.jsp]]
[[International Society for Computational Biology|http://www.iscb.org/iscb-conference-events]]
School of Physics and Astronomy. University of Minnesota.
Jorge Vi&ntilde;als
.viewer img { padding-left:1em; padding-right:1em; } 

A:link {text-decoration: none}
A:visited {text-decoration: none}
A:active {text-decoration: none}
A:hover {text-decoration: underline;}
/* A:hover {text-decoration: underline; font-weight:bold}*/

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

#mainMenu {margin:1em; text-align:left;}
/* #mainMenu {margin:1em; text-align:left; border-style:solid;border-width:thin;border-color:#0000f0} */
 <<cloud systemConfig systemTiddlers DiscoveryPackage IconPackage NavigationPackage>>
|Author|Eric Shulman|
|Original Author|Clint Checketts|
|Description|present a 'cloud' of tags (or links) using proportional font display|
<<cloud type action:... limit:... tag tag tag ...>>
<<cloud type action:... limit:... +TiddlerName>>
<<cloud type action:... limit:... -TiddlerName>>
<<cloud type action:... limit:... =tagvalue>>
* //type// is a keyword, one of:
** ''tags'' (default) - displays a cloud of tags, based on frequency of use
** ''links'' - displays a cloud of tiddlers, based on number of links //from// each tiddler
** ''references'' - displays a cloud of tiddlers, based on number of links //to// each tiddler
* ''action:popup'' (default) - clicking a cloud item shows a popup with links to related tiddlers<br>//or//<br> ''action:goto'' - clicking a cloud item immediately opens the tiddler corresponding to that item
* ''limit:N'' (optional) - restricts the cloud display to only show the N most popular tags/links
* ''tag tag tag...'' (or ''title title title'' if ''links''/''references'' is used)<br>shows all tags/links in the document //except// for those listed as macro parameters
* ''+TiddlerName''<br>show only tags/links read from a space-separated, bracketed list stored in a separate tiddler.
* ''-TiddlerName''<br>show all tags/links //except// those read from a space-separated, bracketed list stored in a separate tiddler.
* ''=tagvalue'' (//only if type=''tags''//)<br>shows only tags that are themselves tagged with the indicated tag value (i.e., ~TagglyTagging usage)
//note: for backward-compatibility, you can also use the macro {{{<<tagCloud ...>>}}} in place of {{{<<cloud ...>>}}}//
//all tags excluding<<tag systemConfig>>, <<tag excludeMissing>> and <<tag script>>//
{{{<<cloud systemConfig excludeMissing script>>}}}
{{groupbox{<<cloud systemConfig excludeMissing script>>}}}
//top 10 tags excluding<<tag systemConfig>>, <<tag excludeMissing>> and <<tag script>>//
{{{<<cloud limit:10 systemConfig excludeMissing script>>}}}
{{groupbox{<<cloud limit:10 systemConfig excludeMissing script>>}}}
//tags listed in// [[FavoriteTags]]
{{{<<cloud +FavoriteTags>>}}}
{{groupbox{<<cloud +FavoriteTags>>}}}
//tags NOT listed in// [[FavoriteTags]]
{{{<<cloud -FavoriteTags>>}}}
{{groupbox{<<cloud -FavoriteTags>>}}}
//links to tiddlers tagged with 'package'//
{{{<<cloud action:goto =package>>}}}
{{groupbox{<<cloud action:goto =package>>}}}
//top 20 most referenced tiddlers//
{{{<<cloud references limit:20>>}}}
{{groupbox{<<cloud references limit:20>>}}}
//top 20 tiddlers that contain the most links//
{{{<<cloud links limit:20>>}}}
{{groupbox{<<cloud links limit:20>>}}}
2009.07.17 [1.7.0] added {{{-TiddlerName}}} parameter to exclude tags that are listed in the indicated tiddler
2009.02.26 [1.6.0] added {{{action:...}}} parameter to apply popup vs. goto action when clicking cloud items
2009.02.05 [1.5.0] added ability to show links or back-links (references) instead of tags and renamed macro to {{{<<cloud>>}}} to reflect more generalized usage.
2008.12.16 [1.4.2] corrected group calculation to prevent 'group=0' error
2008.12.16 [1.4.1] revised tag filtering so excluded tags don't affect calculations
2008.12.15 [1.4.0] added {{{limit:...}}} parameter to restrict the number of tags displayed to the top N most popular
2008.11.15 [1.3.0] added {{{+TiddlerName}}} parameter to include only tags that are listed in the indicated tiddler
2008.09.05 [1.2.0] added '=tagname' parameter to include only tags that are themselves tagged with the specified value (i.e., ~TagglyTagging usage)
2008.07.03 [1.1.0] added 'segments' property to macro object.  Extensive code cleanup
version.extensions.TagCloudPlugin= {major: 1, minor: 7 , revision: 0, date: new Date(2009,7,17)};
//Originally created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman
//Currently maintained and enhanced by Eric Shulman
config.macros.cloud = {
	tagstip: "%1 tiddlers tagged with '%0'",
	refslabel: " (%0 references)",
	refstip: "%1 tiddlers have links to '%0'",
	linkslabel: " (%0 links)",
	linkstip: "'%0' has links to %1 other tiddlers",
	groups: 9,
	init: function() {
		config.macros.tagCloud=config.macros.cloud; // for backward-compatibility
			+'.tagCloud span {line-height: 3.5em; margin:3px;}\n'
			+'.tagCloud1{font-size: 80%;}\n'
			+'.tagCloud2{font-size: 100%;}\n'
			+'.tagCloud3{font-size: 120%;}\n'
			+'.tagCloud4{font-size: 140%;}\n'
			+'.tagCloud5{font-size: 160%;}\n'
			+'.tagCloud6{font-size: 180%;}\n'
			+'.tagCloud7{font-size: 200%;}\n'
			+'.tagCloud8{font-size: 220%;}\n'
			+'.tagCloud9{font-size: 240%;}\n'
	getLinks: function(tiddler) { // get list of links to existing tiddlers and shadows
		if (!tiddler.linksUpdated) tiddler.changed();
		var list=[]; for (var i=0; i<tiddler.links.length; i++) {
			var title=tiddler.links[i];
			if (store.isShadowTiddler(title)||store.tiddlerExists(title))
		return list;
	handler: function(place,macroName,params) {
		// unpack params
		var inc=[]; var ex=[]; var limit=0; var action='popup';
		var links=(params[0]&&params[0].toLowerCase()=='links'); if (links) params.shift();
		var refs=(params[0]&&params[0].toLowerCase()=='references'); if (refs) params.shift();
		if (params[0]&&params[0].substr(0,7).toLowerCase()=='action:')
		if (params[0]&&params[0].substr(0,6).toLowerCase()=='limit:')
		while (params.length) {
			if (params[0].substr(0,1)=='+') { // read taglist from tiddler
			} else if (params[0].substr(0,1)=='-') { // exclude taglist from tiddler
			} else if (params[0].substr(0,1)=='=') { // get tag list using tagged tags
				var tagged=store.getTaggedTiddlers(params[0].substr(1));
				for (var t=0; t<tagged.length; t++) inc.push(tagged[t].title);
			} else ex.push(params[0]); // exclude params
		// get all items, include/exclude specific items
		var items=[];
		var list=(links||refs)?store.getTiddlers('title','excludeLists'):store.getTags();
		for (var t=0; t<list.length; t++) {
			var title=(links||refs)?list[t].title:list[t][0];
			if (links)	var count=this.getLinks(list[t]).length;
			else if (refs)	var count=store.getReferringTiddlers(title).length;
			else 		var count=list[t][1];
			if ((!inc.length||inc.contains(title))&&(!ex.length||!ex.contains(title)))
				items.push({ title:title, count:count });
		if(!items.length) return;
		// sort by decending count, limit results (optional)
		while (limit && items.length>limit) items.pop();
		// find min/max and group size
		var most=items[0].count;
		var least=items[items.length-1].count;
		var groupSize=(most-least+1)/this.groups;
		// sort by title and draw the cloud of items
		var cloudWrapper = createTiddlyElement(place,'div',null,'tagCloud',null);
		for (var t=0; t<items.length; t++) {
			cloudWrapper.appendChild(document.createTextNode(' '));
			var group=Math.ceil((items[t].count-least)/groupSize)||1;
			var className='tagCloudtag tagCloud'+group;
			var tip=refs?this.refstip:links?this.linkstip:this.tagstip;
			if (action=='goto') { // TAG/LINK/REFERENCES GOTO
				var btn=createTiddlyLink(cloudWrapper,items[t].title,true,className);
			} else if (!links&&!refs) { // TAG POPUP
				var btn=createTiddlyButton(cloudWrapper,items[t].title,tip,onClickTag,className);
				var btn=createTiddlyButton(cloudWrapper,items[t].title,tip,
					function(ev) { var e=ev||window.event; var cmt=config.macros.cloud;
						var popup = Popup.create(this);
						var title = this.getAttribute('tiddler');
						var count = this.getAttribute('count');
						var refs  = this.getAttribute('refs')=='T';
						var links = this.getAttribute('links')=='T';
						var label = (refs?cmt.refslabel:cmt.linkslabel).format([count]);
						if (refs) {
						if (links) {
							var tiddler = store.fetchTiddler(title);
							var links=config.macros.cloud.getLinks(tiddler);
							for(var i=0;i<links.length;i++)
						e.cancelBubble=true; if(e.stopPropagation) e.stopPropagation();
						return false;
					}, className);
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.

// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'vinals';

// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)
window.showBackstage = true; // show backstage too

// disable autosave in d3
if (window.location.protocol != "file:")
	config.options.chkGTDLazyAutoSave = false;

// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
	SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
	SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
	OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
	DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[WelcomeToTiddlyspot]] ");
	MainMenu = MainMenu.replace(/^/,"[[WelcomeToTiddlyspot]] ");

// create some shadow tiddler content

 "| tiddlyspot password:|<<option pasUploadPassword>>|",
 "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<br>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
 "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[blog|http://tiddlyspot.blogspot.com/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"

 "tiddlyspot password:",
 "<<option pasUploadPassword>>",

 "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"

 "This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
 "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
 "<<tiddler TspotControls>>",
 "See also GettingStarted.",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."

| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 14/08/2017 13:39:35 | Jorge | [[/|http://vinals.tiddlyspot.com/]] | [[store.cgi|http://vinals.tiddlyspot.com/store.cgi]] | . | [[index.html | http://vinals.tiddlyspot.com/index.html]] | . |
| 24/08/2017 16:02:53 | Jorge | [[/|http://vinals.tiddlyspot.com/]] | [[store.cgi|http://vinals.tiddlyspot.com/store.cgi]] | . | [[index.html | http://vinals.tiddlyspot.com/index.html]] | . | ok |
| 24/08/2017 16:03:51 | Jorge | [[/|http://vinals.tiddlyspot.com/]] | [[store.cgi|http://vinals.tiddlyspot.com/store.cgi]] | . | [[index.html | http://vinals.tiddlyspot.com/index.html]] | . |
| 10/10/2017 10:08:43 | Jorge | [[/|http://vinals.tiddlyspot.com/]] | [[store.cgi|http://vinals.tiddlyspot.com/store.cgi]] | . | [[index.html | http://vinals.tiddlyspot.com/index.html]] | . |
| 18/10/2017 10:56:12 | Jorge | [[/|http://vinals.tiddlyspot.com/]] | [[store.cgi|http://vinals.tiddlyspot.com/store.cgi]] | . | [[index.html | http://vinals.tiddlyspot.com/index.html]] | . |
| 14/11/2017 10:24:56 | Jorge | [[/|http://vinals.tiddlyspot.com/]] | [[store.cgi|http://vinals.tiddlyspot.com/store.cgi]] | . | [[index.html | http://vinals.tiddlyspot.com/index.html]] | . |
| 04/12/2017 14:30:24 | Jorge | [[/|http://vinals.tiddlyspot.com/]] | [[store.cgi|http://vinals.tiddlyspot.com/store.cgi]] | . | [[index.html | http://vinals.tiddlyspot.com/index.html]] | . |
| 13/12/2017 15:47:20 | Jorge | [[/|http://vinals.tiddlyspot.com/]] | [[store.cgi|http://vinals.tiddlyspot.com/store.cgi]] | . | [[index.html | http://vinals.tiddlyspot.com/index.html]] | . |
| 15/12/2017 12:04:58 | Jorge | [[/|http://vinals.tiddlyspot.com/]] | [[store.cgi|http://vinals.tiddlyspot.com/store.cgi]] | . | [[index.html | http://vinals.tiddlyspot.com/index.html]] | . |
| 11/01/2018 11:06:52 | Jorge | [[/|http://vinals.tiddlyspot.com/]] | [[store.cgi|http://vinals.tiddlyspot.com/store.cgi]] | . | [[index.html | http://vinals.tiddlyspot.com/index.html]] | . |
|''Description:''|Save to web a TiddlyWiki|
|''Date:''|Feb 24, 2008|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 3,
	date: new Date("Feb 24, 2008"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'

// Environment

if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false;	// true to activate both in Plugin and UploadService
// Upload Macro

config.macros.upload = {
// default values
	defaultBackupDir: '',	//no backup
	defaultStoreScript: "store.php",
	defaultToFilename: "index.html",
	defaultUploadDir: ".",
	authenticateUser: true	// UploadService Authenticate User
config.macros.upload.label = {
	promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
	promptParamMacro: "Save and Upload this TiddlyWiki in %0",
	saveLabel: "save to web", 
	saveToDisk: "save to disk",
	uploadLabel: "upload"	

config.macros.upload.messages = {
	noStoreUrl: "No store URL in parmeters or options",
	usernameOrPasswordMissing: "Username or password missing"

config.macros.upload.handler = function(place,macroName,params) {
	if (readOnly)
	var label;
	if (document.location.toString().substr(0,4) == "http") 
		label = this.label.saveLabel;
		label = this.label.uploadLabel;
	var prompt;
	if (params[0]) {
		prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0], 
			(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
	} else {
		prompt = this.label.promptOption;
	createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);

config.macros.upload.action = function(params)
		// for missing macro parameter set value from options
		if (!params) params = {};
		var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
		var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
		var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
		var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
		var username = params[4] ? params[4] : config.options.txtUploadUserName;
		var password = config.options.pasUploadPassword; // for security reason no password as macro parameter	
		// for still missing parameter set default value
		if ((!storeUrl) && (document.location.toString().substr(0,4) == "http")) 
			storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
		if (storeUrl.substr(0,4) != "http")
			storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
		if (!toFilename)
			toFilename = bidix.basename(window.location.toString());
		if (!toFilename)
			toFilename = config.macros.upload.defaultToFilename;
		if (!uploadDir)
			uploadDir = config.macros.upload.defaultUploadDir;
		if (!backupDir)
			backupDir = config.macros.upload.defaultBackupDir;
		// report error if still missing
		if (!storeUrl) {
			return false;
		if (config.macros.upload.authenticateUser && (!username || !password)) {
			return false;
		bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password); 
		return false; 

config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir) 
	if (!storeUrl)
		return null;
		var dest = bidix.dirname(storeUrl);
		if (uploadDir && uploadDir != '.')
			dest = dest + '/' + uploadDir;
		dest = dest + '/' + toFilename;
	return dest;

// uploadOptions Macro

config.macros.uploadOptions = {
	handler: function(place,macroName,params) {
		var wizard = new Wizard();
		var markList = wizard.getElement("markList");
		var listWrapper = document.createElement("div");
		var uploadCaption;
		if (document.location.toString().substr(0,4) == "http") 
			uploadCaption = config.macros.upload.label.saveLabel;
			uploadCaption = config.macros.upload.label.uploadLabel;
				{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption, 
					onClick: config.macros.upload.action},
				{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
	options: [
	refreshOptions: function(listWrapper) {
		var opts = [];
		for(i=0; i<this.options.length; i++) {
			var opt = {};
			opt.option = "";
			n = this.options[i];
			opt.name = n;
			opt.lowlight = !config.optionsDesc[n];
			opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
		var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
		for(n=0; n<opts.length; n++) {
			var type = opts[n].name.substr(0,3);
			var h = config.macros.option.types[type];
			if (h && h.create) {
	onCancel: function(e)
		return false;
	wizardTitle: "Upload with options",
	step1Title: "These options are saved in cookies in your browser",
	step1Html: "<input type='hidden' name='markList'></input><br>",
	cancelButton: "Cancel",
	cancelButtonPrompt: "Cancel prompt",
	listViewTemplate: {
		columns: [
			{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
			{name: 'Option', field: 'option', title: "Option", type: 'String'},
			{name: 'Name', field: 'name', title: "Name", type: 'String'}
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'} 

// upload functions

if (!bidix.upload) bidix.upload = {};

if (!bidix.upload.messages) bidix.upload.messages = {
	//from saving
	invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
	backupSaved: "Backup saved",
	backupFailed: "Failed to upload backup file",
	rssSaved: "RSS feed uploaded",
	rssFailed: "Failed to upload RSS feed file",
	emptySaved: "Empty template uploaded",
	emptyFailed: "Failed to upload empty template file",
	mainSaved: "Main TiddlyWiki file uploaded",
	mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
	//specific upload
	loadOriginalHttpPostError: "Can't get original file",
	aboutToSaveOnHttpPost: 'About to upload on %0 ...',
	storePhpNotFound: "The store script '%0' was not found."

bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
	var callback = function(status,uploadParams,original,url,xhr) {
		if (!status) {
		if (bidix.debugMode) 
		// Locate the storeArea div's 
		var posDiv = locateStoreArea(original);
		if((posDiv[0] == -1) || (posDiv[1] == -1)) {
	if(onlyIfDirty && !store.isDirty())
	// save on localdisk ?
	if (document.location.toString().substr(0,4) == "file") {
		var path = document.location.toString();
		var localPath = getLocalPath(path);
	// get original
	var uploadParams = new Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
	var originalPath = document.location.toString();
	// If url is a directory : add index.html
	if (originalPath.charAt(originalPath.length-1) == "/")
		originalPath = originalPath + "index.html";
	var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
	var log = new bidix.UploadLog();
	log.startUpload(storeUrl, dest, uploadDir,  backupDir);
	if (bidix.debugMode) 
		alert("about to execute Http - GET on "+originalPath);
	var r = doHttp("GET",originalPath,null,null,username,password,callback,uploadParams,null);
	if (typeof r == "string")
	return r;

bidix.upload.uploadRss = function(uploadParams,original,posDiv) 
	var callback = function(status,params,responseText,url,xhr) {
		if(status) {
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
		} else {
	// do uploadRss
	if(config.options.chkGenerateAnRssFeed) {
		var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
		var rssUploadParams = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
		var rssString = generateRss();
		// no UnicodeToUTF8 conversion needed when location is "file" !!!
		if (document.location.toString().substr(0,4) != "file")
			rssString = convertUnicodeToUTF8(rssString);	
	} else {

bidix.upload.uploadMain = function(uploadParams,original,posDiv) 
	var callback = function(status,params,responseText,url,xhr) {
		var log = new bidix.UploadLog();
		if(status) {
			// if backupDir specified
			if ((params[3]) && (responseText.indexOf("backupfile:") > -1))  {
				var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
		} else {
	// do uploadMain
	var revised = bidix.upload.updateOriginal(original,posDiv);

bidix.upload.httpUpload = function(uploadParams,data,callback,params)
	var localCallback = function(status,params,responseText,url,xhr) {
		url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
		if (xhr.status == 404)
		if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
			if (responseText.indexOf("Debug mode") >= 0 )
				responseText = responseText.substring(responseText.indexOf("\n\n")+2);
		} else if (responseText.charAt(0) != '0') 
		if (responseText.charAt(0) != '0')
			status = null;
	// do httpUpload
	var boundary = "---------------------------"+"AaB03x";	
	var uploadFormName = "UploadPlugin";
	// compose headers data
	var sheader = "";
	sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
	sheader += uploadFormName +"\"\r\n\r\n";
	sheader += "backupDir="+uploadParams[3] +
				";user=" + uploadParams[4] +
				";password=" + uploadParams[5] +
				";uploaddir=" + uploadParams[2];
	if (bidix.debugMode)
		sheader += ";debug=1";
	sheader += ";;\r\n"; 
	sheader += "\r\n" + "--" + boundary + "\r\n";
	sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
	sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
	sheader += "Content-Length: " + data.length + "\r\n\r\n";
	// compose trailer data
	var strailer = new String();
	strailer = "\r\n--" + boundary + "--\r\n";
	data = sheader + data + strailer;
	if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
	var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charset=UTF-8; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
	if (typeof r == "string")
	return r;

// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
	if (!posDiv)
		posDiv = locateStoreArea(original);
	if((posDiv[0] == -1) || (posDiv[1] == -1)) {
	var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
				store.allTiddlersAsHtml() + "\n" +
	var newSiteTitle = getPageTitle().htmlEncode();
	revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
	revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
	revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
	revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
	revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
	return revised;

// UploadLog
// config.options.chkUploadLog :
//		false : no logging
//		true : logging
// config.options.txtUploadLogMaxLine :
//		-1 : no limit
//      0 :  no Log lines but UploadLog is still in place
//		n :  the last n lines are only kept
//		NaN : no limit (-1)

bidix.UploadLog = function() {
	if (!config.options.chkUploadLog) 
		return; // this.tiddler = null
	this.tiddler = store.getTiddler("UploadLog");
	if (!this.tiddler) {
		this.tiddler = new Tiddler();
		this.tiddler.title = "UploadLog";
		this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
		this.tiddler.created = new Date();
		this.tiddler.modifier = config.options.txtUserName;
		this.tiddler.modified = new Date();
	return this;

bidix.UploadLog.prototype.addText = function(text) {
	if (!this.tiddler)
	// retrieve maxLine when we need it
	var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
	if (isNaN(maxLine))
		maxLine = -1;
	// add text
	if (maxLine != 0) 
		this.tiddler.text = this.tiddler.text + text;
	// Trunck to maxLine
	if (maxLine >= 0) {
		var textArray = this.tiddler.text.split('\n');
		if (textArray.length > maxLine + 1)
			this.tiddler.text = textArray.join('\n');		
	// update tiddler fields
	this.tiddler.modifier = config.options.txtUserName;
	this.tiddler.modified = new Date();
	// refresh and notifiy for immediate update
	store.notify(this.tiddler.title, true);

bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {
	if (!this.tiddler)
	var now = new Date();
	var text = "\n| ";
	var filename = bidix.basename(document.location.toString());
	if (!filename) filename = '/';
	text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
	text += config.options.txtUserName + " | ";
	text += "[["+filename+"|"+location + "]] |";
	text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
	text += uploadDir + " | ";
	text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
	text += backupDir + " |";

bidix.UploadLog.prototype.endUpload = function(status) {
	if (!this.tiddler)
	this.addText(" "+status+" |");

// Utilities

bidix.checkPlugin = function(plugin, major, minor, revision) {
	var ext = version.extensions[plugin];
	if (!
		(ext  && 
			((ext.major > major) || 
			((ext.major == major) && (ext.minor > minor))  ||
			((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
			// write error in PluginManager
			if (pluginInfo)
				pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
			eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"

bidix.dirname = function(filePath) {
	if (!filePath) 
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(0, lastpos);
	} else {
		return filePath.substring(0, filePath.lastIndexOf("\\"));

bidix.basename = function(filePath) {
	if (!filePath) 
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("#")) != -1) 
		filePath = filePath.substring(0, lastpos);
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(lastpos + 1);
	} else
		return filePath.substring(filePath.lastIndexOf("\\")+1);

bidix.initOption = function(name,value) {
	if (!config.options[name])
		config.options[name] = value;

// Initializations

// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);

// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");

	txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
	txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
	txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
	txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
	txtUploadUserName: "Upload Username",
	pasUploadPassword: "Upload Password",
	chkUploadLog: "do Logging in UploadLog (default: true)",
	txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"

// Options Initializations

// Backstage
	uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}


This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.

a = \sqrt{b}

@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://vinals.tiddlyspot.com/controlpanel]] (your control panel username is //vinals//).
<<tiddler TspotControls>>
See also GettingStarted.

@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the "save to web" button in the column on the right.

@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click "upload" and your ~TiddlyWiki will be saved back to tiddlyspot.com.

@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].

@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions.
© Jorge Viñals, 2009-2013