Mercurial > repos > public > sbplib
annotate +noname/calculateErrors.m @ 1322:412b8ceafbc6 feature/poroelastic
Add Zt to output args for Elastic2dCurvilinearAnisotropic.interfaceNormalTangential
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Sat, 24 Oct 2020 20:58:26 -0700 |
parents | 1201eb16557e |
children |
rev | line source |
---|---|
616
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 % [discr, trueSolution] = schemeFactory(m) |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 % where trueSolution should be a timeSnapshot of the true solution a time T |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 % T is the end time |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 % m are grid size parameters. |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 % N are number of timesteps to use for each gird size |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
6 % timeOpt are options for the timeStepper |
658
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
7 % errorFun is a function_handle taking 2 or 3 arguments, errorFun(trueSolution, approxSolution), errorFun(trueSolution, approxSolution, discr) |
616
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 function e = calculateErrors(schemeFactory, T, m, N, errorFun, timeOpt) |
657
b59345f905f0
Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents:
616
diff
changeset
|
9 %TODO: Ability to choose paralell or not |
616
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 assertType(schemeFactory, 'function_handle'); |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
11 assertNumberOfArguments(schemeFactory, 1); |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 assertScalar(T); |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
13 assert(length(m) == length(N), 'Vectors m and N must have the same length'); |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 assertType(errorFun, 'function_handle'); |
658
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
15 |
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
16 if ~ismember(nargin(errorFun), [2,3]) |
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
17 error('sbplib:noname:calculateErrors:wrongNumberOfArguments', '"%s" must have 2 or 3, found %d', toString(errorFun), nargin(errorFun)); |
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
18 end |
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
19 |
657
b59345f905f0
Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents:
616
diff
changeset
|
20 default_arg('timeOpt', struct()); |
b59345f905f0
Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents:
616
diff
changeset
|
21 |
616
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 |
658
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
23 e = zeros(1,length(m)); |
657
b59345f905f0
Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents:
616
diff
changeset
|
24 parfor i = 1:length(m) |
616
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 done = timeTask('m = %3d ', m(i)); |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 [discr, trueSolution] = schemeFactory(m(i)); |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 |
657
b59345f905f0
Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents:
616
diff
changeset
|
29 timeOptTemp = timeOpt; |
b59345f905f0
Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents:
616
diff
changeset
|
30 timeOptTemp.k = T/N(i); |
b59345f905f0
Make noname.calculateErrors parallel
Jonatan Werpers <jonatan@werpers.com>
parents:
616
diff
changeset
|
31 ts = discr.getTimestepper(timeOptTemp); |
616
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 ts.stepTo(N(i), true); |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 approxSolution = discr.getTimeSnapshot(ts); |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
34 |
658
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
35 switch nargin(errorFun) |
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
36 case 2 |
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
37 e(i) = errorFun(trueSolution, approxSolution); |
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
38 case 3 |
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
39 e(i) = errorFun(trueSolution, approxSolution, discr); |
1201eb16557e
Allow the possibility to have discr as an input the an error function
Jonatan Werpers <jonatan@werpers.com>
parents:
657
diff
changeset
|
40 end |
616
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
42 fprintf('e = %.4e', e(i)) |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
43 done() |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
44 end |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
45 fprintf('\n') |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
46 end |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
47 |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
49 %% Example error function |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
50 % u_true = grid.evalOn(dr.grid, @(x,y)trueSolution(T,x,y)); |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 % err = u_true-u_false; |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
52 % e(i) = norm(err)/norm(u_true); |
818d52d4928f
Add helper function for convergence runs on discretizations
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
53 % % e(i) = sqrt(err'*d.H*d.J*err/(u_true'*d.H*d.J*u_true)); |