58 if nargin == 1 && isscalar(varargin[1])
59 varargin = [
" Version ",varargin[1]];
62 this =
this@models.muscle.AMuscleConfig(varargin[:]);
91 m.ODESolver.RelTol= 1e-5;
92 m.ODESolver.AbsTol= 1e-3;
97 m.DefaultMu(1:2) = [1; m.T/2];
101 types = [0 .2 .4 .6 .8 1];
104 ftw = zeros(fe.GaussPointsPerElem,length(types),geo.NumElements);
113 p = models.motorunit.Pool;
118 m.Plotter.DefaultArgs= [
" Pool ",
true];
123 m.DefaultMu(5) = 3.05907e-10;
126 m.DefaultMu(6) = 47.270456264135881;
129 m.DefaultMu(9) = 35.6463903963;
132 m.DefaultMu(10) = 3.859558659683;
136 m.DefaultMu(13) = .300;
139 m.DefaultMu(14) = 1.4;
145 m.DefaultMu(5) = 0.00355439810963035e-3;
147 m.DefaultMu(6) = 12.660539325481963;
149 m.DefaultMu(9) = 6.352e-13;
151 m.DefaultMu(10) = 3.627e-3;
156 m.ODESolver.RelTol= .001;
157 m.ODESolver.AbsTol= .03;
158 m.DefaultMu(1:3) = [0;0;1];
163 m.ODESolver.RelTol= .001;
164 m.ODESolver.AbsTol= .05;
168 m.DefaultMu(1:2) = [.1; 50];
169 m.System.UseCrossFibreStiffness=
true;
178 m.SpaceReducer.Value= length(m.SpaceReducer.TargetDimensions);
185 if elemidx == 1 && faceidx == 2
215 geo = fem.geometry.RegularHex8Grid([0 1],[0 1],[0 1]);
218 geo = fem.geometry.RegularHex8Grid([-1 1],[-1 1],[-1 1]);
220 cubes = geo.Elements;
223 R = [cos(theta) -sin(theta) 0
224 sin(theta) cos(theta) 0
226 pts = circshift(R,[1 1])*R*pts;
227 geo = fem.geometry.Cube8Node(pts, cubes);
229 geo = geo.toCube27Node;
239 geo = this.
FEM.Geometry;
243 displ_dir(:,geo.Elements(1,geo.MasterFaces(4,:))) =
true;
245 displ_dir(1,geo.Elements(1,geo.MasterFaces(1,:))) =
true;
247 displ_dir(:,geo.Elements(1,geo.MasterFaces(1:2,:))) =
true;
249 displ_dir(:,geo.Elements(1,geo.MasterFaces(1,:))) =
true;
255 geo = this.
FEM.Geometry;
259 velo_dir(2,geo.Elements(1,geo.MasterFaces(3,:))) =
true;
260 velo_dir_val(velo_dir) = -.01;
262 velo_dir(1,geo.Elements(1,geo.MasterFaces(2,:))) =
true;
263 velo_dir_val(velo_dir) = .01;
265 velo_dir(1,geo.Elements(1,geo.MasterFaces(2,:))) =
true;
266 velo_dir_val(velo_dir) = .04;
268 velo_dir(:,geo.Elements(1,geo.MasterFaces(2,:))) =
true;
271 velo_dir_val(hlp) = .01;
305 m = models.muscle.Model(models.muscle.examples.Debug(version));
307 pdf = m.getResidualForces(
t,y);
310 force_on_fixed_side = sum(pdf(1:27,:),1);
312 force_on_moved_side = sum(pdf(28:end,:),1);
314 plot(
t,force_on_fixed_side,
" r ",
t,force_on_moved_side,
" b ");
315 xlabel(
" time "); ylabel(
" force [N] ");
318 yall = m.System.includeDirichletValues(
t,y);
319 xpos = yall((15-1)*3+1,end);
320 fprintf(
" Force at T=%g, x-position (center node) %g: %gN\n ",
t(end),xpos,force_on_moved_side(end));
322 m.plot(
t,y,
" DF ",pdf,
" Velo ",
true,
" Pause ",.02);
345 versions = [1 2 3 10 11];
348 fprintf(
" Testing DebugConfig Version %d\n ",k);
349 m = models.muscle.Model(models.muscle.examples.Debug(k));
351 df = m.getResidualForces(
t,y);
352 m.plot(
t,y,
" DF ",df,
" Velo ",
true);
function configureModelFinal()
function addOption(name, default, varargin)
function alpha = getAlphaRamp(ramptime,double alphamax,double starttime)
Creates a linearly increasing scalar function starting at starttime milliseconds ranging from zero to...
function anull = seta0(anull)
function geo = getGeometry()
Single cube with same config as reference element.
function configureModel(m)
A simple configuration for Debug purposes.
function P = getBoundaryPressure(elemidx, faceidx)
Determines the neumann forces on the boundary.
A variable number of input arguments.
Debug(varargin)
Quick fix for old-style DebugConfig call passing in the version number directly.
static function test_DebugConfigV4_9(version)
Results: 4: Force at T=20, x-position (center node) 1.49844: -0.0476511N 5: Force at T=20...
double T
The final timestep up to which to simulate.
VelocityBCTimeFun
Velocity conditions application function.
function displ_dir = setPositionDirichletBC(displ_dir)
static function test_DebugConfigs(versions)
function [ velo_dir , velo_dir_val ] = setVelocityDirichletBC(velo_dir, velo_dir_val)
Determines the dirichlet velocities.
Model: Model for a FEM-discretized muscle model.