vibstring_dirichlet_boundary
Graham Dennis
Vibrating string with Dirichlet boundary conditions.

This script is the first of two scripts that demonstrate how to refine or coarsen a grid between simulations. This simulation saves the final state as part of the output moment groups in Fourier space, and the next simulation (vibstring_dirichlet_boundary2.xmds) initialises from the results of this simulation in Fourier space, but with a higher (spatial) resolution. Because the spatial grid widths are the same, the step size in Fourier space is the same, and so the higher resolution simulation simply initialises the lower kx values from the results of the lower resolution simulation and all higher fourier components are set to zero.

Note that when saving the state of the simulation for later loading by another simulation, it is better to use a breakpoint element rather than a moment_group as used below. A moment group is used in this case to demonstrate how to load from a specific moment group rather than a breakpoint, which is demonstrated elsewhere.
const real T = 10.0; const real mass = 1e-3; const real length = 1.0; const real mu = mass/length;

const real xmax = _max_x; const real width = 0.1;
t
u uDot
u = exp(-100.0*(x-0.5)*(x-0.5)); uDot = 0.0;
bc
real r = abs(x); real rright = xmax-width;

if ( r > rright) bc = 0.0; else bc = 1.0;

500 1
L
L = -T*kx*kx/mu;
main
boundary
du_dt = uDot; duDot_dt = bc*L[u];
amp
main
amp = u.Re();
uR uI uDotR uDotI
main
uR = u.Re(); uI = u.Im(); uDotR = uDot.Re(); uDotI = uDot.Im();