changeset 315:297d2cbfbe15 feature/beams

Cleaning of variable 2nd deriv in 4th order.
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 23 Sep 2016 22:58:45 +0200
parents 88584b0cfba1
children 203afa156f59
files +sbp/+implementations/d4_variable_4.m
diffstat 1 files changed, 55 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
diff -r 88584b0cfba1 -r 297d2cbfbe15 +sbp/+implementations/d4_variable_4.m
--- a/+sbp/+implementations/d4_variable_4.m	Fri Sep 23 22:55:30 2016 +0200
+++ b/+sbp/+implementations/d4_variable_4.m	Fri Sep 23 22:58:45 2016 +0200
@@ -59,52 +59,20 @@
 
 
     % Second derivative
-    M=sparse(m,m);
+    M = sparse(m,m);
 
     scheme_width = 5;
     scheme_radius = (scheme_width-1)/2;
     r = (1+scheme_radius):(m-scheme_radius);
 
     function D2 = D2_fun(c)
-        % ALTERNATIVES %%%%%%%%%%%%%
-        % for i=4:m-3
-        %     M(i,i-2:i+2)=[-c(i-1)/0.6e1 + c(i-2)/0.8e1 + c(i)/0.8e1 -c(i-2)/0.6e1 - c(i+1)/0.6e1 - c(i-1)/0.2e1 - c(i)/0.2e1 c(i-2)/0.24e2 + 0.5e1/0.6e1 * c(i-1) + 0.5e1/0.6e1 * c(i+1) + c(i+2)/0.24e2 + 0.3e1/0.4e1 * c(i) -c(i-1)/0.6e1 - c(i+2)/0.6e1 - c(i)/0.2e1 - c(i+1)/0.2e1 -c(i+1)/0.6e1 + c(i)/0.8e1 + c(i+2)/0.8e1;];
-        % end
-        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-        % for i=4:m-3
-        %     M(i,i-2:i+2)= [
-        %      c(i-2)/0.8e1 - c(i-1)/0.6e1 + c(i)  /0.8e1                                   ,
-        %     -c(i-2)/0.6e1 - c(i-1)/0.2e1 - c(i)  /0.2e1 - c(i+1)/0.6e1                  ,
-        %      c(i-2)/2.4e1 + c(i-1)/1.2e0 + c(i) * 0.3/0.4 + c(i+1)/1.2e0 + c(i+2)/2.4e1 ,
-        %                      -c(i-1)/0.6e1 - c(i)  /0.2e1 - c(i+1)/0.2e1 - c(i+2)/0.6e1 ,
-        %                                        c(i)  /0.8e1 - c(i+1)/0.6e1 + c(i+2)/0.8e1 ,
-        %     ];
-        % end
-        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
         Mm2 =  c(r-2)/0.8e1 - c(r-1)/0.6e1 + c(r)  /0.8e1                                  ;
         Mm1 = -c(r-2)/0.6e1 - c(r-1)/0.2e1 - c(r)  /0.2e1 - c(r+1)/0.6e1                 ;
         M0  =  c(r-2)/2.4e1 + c(r-1)/1.2e0 + c(r) * 0.3/0.4 + c(r+1)/1.2e0 + c(r+2)/2.4e1;
         Mp1 =                  -c(r-1)/0.6e1 - c(r)  /0.2e1 - c(r+1)/0.2e1 - c(r+2)/0.6e1;
         Mp2 =                                    c(r)  /0.8e1 - c(r+1)/0.6e1 + c(r+2)/0.8e1;
-        % printSize(Mm2);
-        % scheme_radius
-        % m
+
         M(r,:) = spdiags([Mm2 Mm1 M0 Mp1 Mp2],0:2*scheme_radius,length(r),m);
-        % M(r,:) = spdiags([Mm2 Mm1 M0 Mp1 Mp2],(-2:2)+scheme_radius,M(r,:)); % This is slower
-        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-        % %% Somthing is wrong here!!
-        % Mm2 =  c(r-2)/0.8e1 - c(r-1)/0.6e1 + c(r)  /0.8e1                                  ;
-        % Mm1 = -c(r-2)/0.6e1 - c(r-1)/0.2e1 - c(r)  /0.2e1 - c(r+1)/0.6e1                 ;
-        % M0  =  c(r-2)/2.4e1 + c(r-1)/1.2e0 + c(r) * 0.3/0.4 + c(r+1)/1.2e0 + c(r+2)/2.4e1;
-        % Mp1 =                  -c(r-1)/0.6e1 - c(r)  /0.2e1 - c(r+1)/0.2e1 - c(r+2)/0.6e1;
-        % Mp2 =                                    c(r)  /0.8e1 - c(r+1)/0.6e1 + c(r+2)/0.8e1;
-        % % printSize(M_diag_ind);
-        % % Mdiags = [Mm2 Mm1 M0  Mp1 Mp2];
-        % % printSize(Mdiags);
-        % M(M_diag_ind) = [Mm2 Mm1 M0  Mp1 Mp2]; % This is slightly faster
-        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-        % Kan man skriva det som en multiplikation av en 3-dim matris?
-        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
         M(1:6,1:6) = [
             0.12e2/0.17e2 * c(1) + 0.59e2/0.192e3 * c(2) + 0.27010400129e11/0.345067064608e12 * c(3) + 0.69462376031e11/0.2070402387648e13 * c(4) -0.59e2/0.68e2 * c(1) - 0.6025413881e10/0.21126554976e11 * c(3) - 0.537416663e9/0.7042184992e10 * c(4) 0.2e1/0.17e2 * c(1) - 0.59e2/0.192e3 * c(2) + 0.213318005e9/0.16049630912e11 * c(4) + 0.2083938599e10/0.8024815456e10 * c(3) 0.3e1/0.68e2 * c(1) - 0.1244724001e10/0.21126554976e11 * c(3) + 0.752806667e9/0.21126554976e11 * c(4) 0.49579087e8/0.10149031312e11 * c(3) - 0.49579087e8/0.10149031312e11 * c(4) -c(4)/0.784e3 + c(3)/0.784e3;
@@ -113,8 +81,7 @@
             0.3e1/0.68e2 * c(1) - 0.1244724001e10/0.21126554976e11 * c(3) + 0.752806667e9/0.21126554976e11 * c(4) -0.59e2/0.1088e4 * c(1) + 0.260297319232891e15/0.2556411742685888e16 * c(3) - 0.60834186813841e14/0.1278205871342944e16 * c(4) c(1)/0.136e3 - 0.125059e6/0.743572e6 * c(5) - 0.4836340090442187227e19/0.5525802884687299744e19 * c(3) - 0.17220493277981e14/0.89177153814624e14 * c(4) 0.3e1/0.1088e4 * c(1) + 0.507284006600757858213e21/0.475219048083107777984e21 * c(3) + 0.1869103e7/0.2230716e7 * c(5) + c(6)/0.24e2 + 0.1950062198436997e16/0.3834617614028832e16 * c(4) -0.4959271814984644613e19/0.20965546238960637264e20 * c(3) - c(6)/0.6e1 - 0.15998714909649e14/0.37594290333616e14 * c(4) - 0.375177e6/0.743572e6 * c(5) -0.368395e6/0.2230716e7 * c(5) + 0.752806667e9/0.539854092016e12 * c(3) + 0.1063649e7/0.8712336e7 * c(4) + c(6)/0.8e1;
             0.49579087e8/0.10149031312e11 * c(3) - 0.49579087e8/0.10149031312e11 * c(4) -0.1328188692663e13/0.37594290333616e14 * c(3) + 0.1328188692663e13/0.37594290333616e14 * c(4) -0.10532412077335e14/0.42840005263888e14 * c(4) + 0.1613976761032884305e19/0.7963657098519931984e19 * c(3) + 0.564461e6/0.4461432e7 * c(5) -0.4959271814984644613e19/0.20965546238960637264e20 * c(3) - c(6)/0.6e1 - 0.15998714909649e14/0.37594290333616e14 * c(4) - 0.375177e6/0.743572e6 * c(5) 0.8386761355510099813e19/0.128413970713633903242e21 * c(3) + 0.2224717261773437e16/0.2763180339520776e16 * c(4) + 0.5e1/0.6e1 * c(6) + c(7)/0.24e2 + 0.280535e6/0.371786e6 * c(5) -0.35039615e8/0.213452232e9 * c(4) - c(7)/0.6e1 - 0.13091810925e11/0.13226425254392e14 * c(3) - 0.1118749e7/0.2230716e7 * c(5) - c(6)/0.2e1;
             -c(4)/0.784e3 + c(3)/0.784e3 -0.8673e4/0.2904112e7 * c(3) + 0.8673e4/0.2904112e7 * c(4) -0.960119e6/0.1280713392e10 * c(4) - 0.3391e4/0.6692148e7 * c(5) + 0.33235054191e11/0.26452850508784e14 * c(3) -0.368395e6/0.2230716e7 * c(5) + 0.752806667e9/0.539854092016e12 * c(3) + 0.1063649e7/0.8712336e7 * c(4) + c(6)/0.8e1 -0.35039615e8/0.213452232e9 * c(4) - c(7)/0.6e1 - 0.13091810925e11/0.13226425254392e14 * c(3) - 0.1118749e7/0.2230716e7 * c(5) - c(6)/0.2e1 0.3290636e7/0.80044587e8 * c(4) + 0.5580181e7/0.6692148e7 * c(5) + 0.5e1/0.6e1 * c(7) + c(8)/0.24e2 + 0.660204843e9/0.13226425254392e14 * c(3) + 0.3e1/0.4e1 * c(6);
-         ];
-
+        ];
 
         M(m-5:m,m-5:m) = [
             c(m-7)/0.24e2 + 0.5e1/0.6e1 * c(m-6) + 0.5580181e7/0.6692148e7 * c(m-4) + 0.4887707739997e13/0.119037827289528e15 * c(m-3) + 0.3e1/0.4e1 * c(m-5) + 0.660204843e9/0.13226425254392e14 * c(m-2) + 0.660204843e9/0.13226425254392e14 * c(m-1) -c(m-6)/0.6e1 - 0.1618585929605e13/0.9919818940794e13 * c(m-3) - c(m-5)/0.2e1 - 0.1118749e7/0.2230716e7 * c(m-4) - 0.13091810925e11/0.13226425254392e14 * c(m-2) - 0.13091810925e11/0.13226425254392e14 * c(m-1) -0.368395e6/0.2230716e7 * c(m-4) + c(m-5)/0.8e1 + 0.48866620889e11/0.404890569012e12 * c(m-3) + 0.752806667e9/0.539854092016e12 * c(m-2) + 0.752806667e9/0.539854092016e12 * c(m-1) -0.3391e4/0.6692148e7 * c(m-4) - 0.238797444493e12/0.119037827289528e15 * c(m-3) + 0.33235054191e11/0.26452850508784e14 * c(m-2) + 0.33235054191e11/0.26452850508784e14 * c(m-1) -0.8673e4/0.2904112e7 * c(m-2) - 0.8673e4/0.2904112e7 * c(m-1) + 0.8673e4/0.1452056e7 * c(m-3) -c(m-3)/0.392e3 + c(m-2)/0.784e3 + c(m-1)/0.784e3;
@@ -123,7 +90,7 @@
              -0.3391e4/0.6692148e7 * c(m-4) - 0.238797444493e12/0.119037827289528e15 * c(m-3) + 0.33235054191e11/0.26452850508784e14 * c(m-2) + 0.33235054191e11/0.26452850508784e14 * c(m-1) -0.365281640980e12/0.1653303156799e13 * c(m-3) + 0.564461e6/0.4461432e7 * c(m-4) + 0.1613976761032884305e19/0.7963657098519931984e19 * c(m-2) - 0.198407225513315475e18/0.7963657098519931984e19 * c(m-1) -0.125059e6/0.743572e6 * c(m-4) + c(m)/0.136e3 - 0.23099342648e11/0.101222642253e12 * c(m-3) - 0.4836340090442187227e19/0.5525802884687299744e19 * c(m-2) + 0.193950157930938693e18/0.5525802884687299744e19 * c(m-1) 0.564461e6/0.13384296e8 * c(m-4) + 0.470299699916357e15/0.952302618316224e15 * c(m-3) + 0.550597048646198778781e21/0.1624586048098066124736e22 * c(m-1) + c(m)/0.51e2 + 0.378288882302546512209e21/0.270764341349677687456e21 * c(m-2) -0.59e2/0.408e3 * c(m) - 0.29294615794607e14/0.29725717938208e14 * c(m-2) - 0.2234477713167e13/0.29725717938208e14 * c(m-1) - 0.8673e4/0.363014e6 * c(m-3) -0.59e2/0.3136e4 * c(m-3) - 0.13249937023e11/0.48148892736e11 * c(m-1) + 0.2e1/0.17e2 * c(m) + 0.2083938599e10/0.8024815456e10 * c(m-2);
              -0.8673e4/0.2904112e7 * c(m-2) - 0.8673e4/0.2904112e7 * c(m-1) + 0.8673e4/0.1452056e7 * c(m-3) -0.1328188692663e13/0.37594290333616e14 * c(m-2) + 0.2226377963775e13/0.37594290333616e14 * c(m-1) - 0.8673e4/0.363014e6 * c(m-3) 0.260297319232891e15/0.2556411742685888e16 * c(m-2) - 0.59e2/0.1088e4 * c(m) - 0.106641839640553e15/0.1278205871342944e16 * c(m-1) + 0.26019e5/0.726028e6 * c(m-3) -0.59e2/0.408e3 * c(m) - 0.29294615794607e14/0.29725717938208e14 * c(m-2) - 0.2234477713167e13/0.29725717938208e14 * c(m-1) - 0.8673e4/0.363014e6 * c(m-3) 0.9258282831623875e16/0.7669235228057664e16 * c(m-2) + 0.3481e4/0.3264e4 * c(m) + 0.228389721191751e15/0.1278205871342944e16 * c(m-1) + 0.8673e4/0.1452056e7 * c(m-3) -0.6025413881e10/0.21126554976e11 * c(m-2) - 0.59e2/0.68e2 * c(m) - 0.537416663e9/0.7042184992e10 * c(m-1);
              -c(m-3)/0.392e3 + c(m-2)/0.784e3 + c(m-1)/0.784e3 c(m-3)/0.49e2 + 0.49579087e8/0.10149031312e11 * c(m-2) - 0.256702175e9/0.10149031312e11 * c(m-1) -0.1244724001e10/0.21126554976e11 * c(m-2) + 0.3e1/0.68e2 * c(m) + 0.752806667e9/0.21126554976e11 * c(m-1) -0.59e2/0.3136e4 * c(m-3) - 0.13249937023e11/0.48148892736e11 * c(m-1) + 0.2e1/0.17e2 * c(m) + 0.2083938599e10/0.8024815456e10 * c(m-2) -0.6025413881e10/0.21126554976e11 * c(m-2) - 0.59e2/0.68e2 * c(m) - 0.537416663e9/0.7042184992e10 * c(m-1) 0.3e1/0.3136e4 * c(m-3) + 0.27010400129e11/0.345067064608e12 * c(m-2) + 0.234566387291e12/0.690134129216e12 * c(m-1) + 0.12e2/0.17e2 * c(m);
-         ];
+        ];
 
         M = M/h;
         D2 = HI*(-M-c(1)*e_1*S_1'+c(m)*e_m*S_m');
@@ -151,3 +118,54 @@
 
     D4=HI*(M4 - e_l*d3_l'+e_r*d3_r' + d1_l*d2_l'-d1_r*d2_r');
 end
+
+
+% Alternatives for variable 2nd derivative
+        % % ALTERNATIVES %%%%%%%%%%%%%
+        % % for i=4:m-3
+        % %     M(i,i-2:i+2)=[-c(i-1)/0.6e1 + c(i-2)/0.8e1 + c(i)/0.8e1 -c(i-2)/0.6e1 - c(i+1)/0.6e1 - c(i-1)/0.2e1 - c(i)/0.2e1 c(i-2)/0.24e2 + 0.5e1/0.6e1 * c(i-1) + 0.5e1/0.6e1 * c(i+1) + c(i+2)/0.24e2 + 0.3e1/0.4e1 * c(i) -c(i-1)/0.6e1 - c(i+2)/0.6e1 - c(i)/0.2e1 - c(i+1)/0.2e1 -c(i+1)/0.6e1 + c(i)/0.8e1 + c(i+2)/0.8e1;];
+        % % end
+        % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+        % % for i=4:m-3
+        % %     M(i,i-2:i+2)= [
+        % %      c(i-2)/0.8e1 - c(i-1)/0.6e1 + c(i)  /0.8e1                                   ,
+        % %     -c(i-2)/0.6e1 - c(i-1)/0.2e1 - c(i)  /0.2e1 - c(i+1)/0.6e1                  ,
+        % %      c(i-2)/2.4e1 + c(i-1)/1.2e0 + c(i) * 0.3/0.4 + c(i+1)/1.2e0 + c(i+2)/2.4e1 ,
+        % %                      -c(i-1)/0.6e1 - c(i)  /0.2e1 - c(i+1)/0.2e1 - c(i+2)/0.6e1 ,
+        % %                                        c(i)  /0.8e1 - c(i+1)/0.6e1 + c(i+2)/0.8e1 ,
+        % %     ];
+        % % end
+        % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+        % Mm2 =  c(r-2)/0.8e1 - c(r-1)/0.6e1 + c(r)  /0.8e1                                  ;
+        % Mm1 = -c(r-2)/0.6e1 - c(r-1)/0.2e1 - c(r)  /0.2e1 - c(r+1)/0.6e1                 ;
+        % M0  =  c(r-2)/2.4e1 + c(r-1)/1.2e0 + c(r) * 0.3/0.4 + c(r+1)/1.2e0 + c(r+2)/2.4e1;
+        % Mp1 =                  -c(r-1)/0.6e1 - c(r)  /0.2e1 - c(r+1)/0.2e1 - c(r+2)/0.6e1;
+        % Mp2 =                                    c(r)  /0.8e1 - c(r+1)/0.6e1 + c(r+2)/0.8e1;
+
+        % M(r,:) = spdiags([Mm2 Mm1 M0 Mp1 Mp2],0:2*scheme_radius,length(r),m);
+        % % M(r,:) = spdiags([Mm2 Mm1 M0 Mp1 Mp2],(-2:2)+scheme_radius,M(r,:)); % This is slower
+        % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+        % % %% Somthing is wrong here!!
+        % % Mm2 =  c(r-2)/0.8e1 - c(r-1)/0.6e1 + c(r)  /0.8e1                                  ;
+        % % Mm1 = -c(r-2)/0.6e1 - c(r-1)/0.2e1 - c(r)  /0.2e1 - c(r+1)/0.6e1                 ;
+        % % M0  =  c(r-2)/2.4e1 + c(r-1)/1.2e0 + c(r) * 0.3/0.4 + c(r+1)/1.2e0 + c(r+2)/2.4e1;
+        % % Mp1 =                  -c(r-1)/0.6e1 - c(r)  /0.2e1 - c(r+1)/0.2e1 - c(r+2)/0.6e1;
+        % % Mp2 =                                    c(r)  /0.8e1 - c(r+1)/0.6e1 + c(r+2)/0.8e1;
+        % % % printSize(M_diag_ind);
+        % % % Mdiags = [Mm2 Mm1 M0  Mp1 Mp2];
+        % % % printSize(Mdiags);
+        % % M(M_diag_ind) = [Mm2 Mm1 M0  Mp1 Mp2]; % This is slightly faster
+        % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+        % % Kan man skriva det som en multiplikation av en 3-dim matris?
+        % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
+
+
+
+