From e665c5f960a9525a1be5a3024fa4a23a2686497b Mon Sep 17 00:00:00 2001
From: "Lang, Jens" <jens.lang@tu-darmstadt.de>
Date: Thu, 17 Oct 2024 13:34:58 +0200
Subject: [PATCH] Upload New File

---
 def_adjoint_peer_meth.m | 152 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 152 insertions(+)
 create mode 100644 def_adjoint_peer_meth.m

diff --git a/def_adjoint_peer_meth.m b/def_adjoint_peer_meth.m
new file mode 100644
index 0000000..2715f56
--- /dev/null
+++ b/def_adjoint_peer_meth.m
@@ -0,0 +1,152 @@
+function Coeffs = def_adjoint_peer_meth(meth)
+%%%
+%%% Coefficients of the adjoint discrete Peer methods
+%%% AP4o33pa, AP4o33pfs, and AP4o43p
+%%% Jens Lang and Bernhard A. Schmitt, 2024
+%%%
+
+if strcmpi(meth,'AP4o33pa')
+   name = 'AP4o33pa';
+   %%%
+   matA0 = [ -1.15776545053745785, 4.18041982218309242, -3.57123751413811795, 0.434466878981726612;
+              9.32004641586842444, -20.4351525197780492, 20.5366807975868225, -2.66042073507155447;
+             -9.50244685490493157, 18.1429495340814519, -17.8883756002821434, 2.64370625443895640;
+              1.57386544684708436, -2.96819811062586224, 2.20164646613211905, 0.149815169218439022];
+    matA = [ 0.707317073170731707, 0, 0, 0;
+            -1.45804476935905381, 2.01111111111111111, 0, 0;
+             0.896349914369814958, -3.44664312359408312, 2.17021276595744681, 0;
+             0.0880773390916265128, 0.355550738343604843, -0.891498616658766582, 0.567567567567567568];
+   matAN = [ 0.0357084153869351479, 0.4969703797836259, 0, 0;
+             2.797947998593283, -2.71711108917965831, 1.82758705410503492, -0.312035927923425972;
+            -3.79705846746989449, 4.49820885580674127, -2.91372512780947156, 0.817341669948077132;
+             0.483707383234413883, 0.109314879436931450, -0.402129665205866941, 0.0752736412932744167];
+   matK0 = [ 0.152542372881355932, 0.0634328358208955224, -0.0442477876106194690, 0;
+             0.245541449414229068, 0.347952853495927220, 0.264344548327940914, 0;
+            -0.238911975758696484, 0.368727925011343261, -0.235427961469025681, 0;
+             0.0344709234285259469, -0.0532011508785264731, 0.0371106414248961343, 0.247953574563469228];
+    matK = diag([0.224081702550453405, 0.291151862763378534, 0.255813953488372093, 0.228952481197795968]);
+   matKN = [ 0.2323465386026342, 0.08709000303247828, 0, 0;
+             0.000657849752067898742, -0.280033661681469416, 0, 0;
+            -0.000640088198525566162, 0.506244371575439921, 0.326948793781323850, 0;
+             0.0000923538102634218939, -0.0730424287576300562, 0, 0.0100480194317023389];
+    matR = [0, 0, 0, -0.210599403449096441;
+            0, 0, 0,  0.187644579213773871;
+            0, 0, 0, -0.129794666599707980;
+            0, 0, 0,  0.152749490835030550];
+   matRN = [0, 0, 0, -0.175110107050592060;
+            0, 0, 0,  0.229602241151716507;
+            0, 0, 0, -0.524736500544361632;
+            0, 0, 0, -0.07622773831802632];
+       s = 4;
+    vecC = [46/5253; 29/51; 1723/2193; 17131/12189];   
+      e4 = ones(4,1);
+    vecA = matA0*e4;
+    vecW = matAN'*e4;
+   matV4 = [vecC.^0,vecC.^1,vecC.^2,vecC.^3];
+   matV4inv = matV4^(-1);
+   matP4 = [1 1 1 1; 0 1 2 3; 0 0 1 3; 0 0 0 1];
+   matE4 = diag([1 2 3], 1);
+    matB = (matA*matV4 - matK*matV4*matE4 + matR)*matP4*matV4inv;
+   matBN = (matAN*matV4 - matKN*matV4*matE4 + matRN)*matP4*matV4inv;
+     e4m = [1;0;0;0];
+    vecV = (matV4')^(-1)*e4m;            
+       
+elseif strcmpi(meth,'AP4o33pfs')
+   name = 'AP4o33pfs';
+   %%%
+   matA0 = [ 1.333333333333333, 0, 0, 0;
+            -2.789814648187671, 2.243282202070159, 0.06686328023669716, 0.01646570267735142;
+             4.349477807846901,-6.391186028966211, 2.276667661951199, -0.06058221663260115;
+            -6.567438826613935, 9.406667237260441,-4.671899050533916,  1.788163545558252];
+    matA = [ 0.7857142857142857,0, 0, 0;
+            -2.028837530067695, 2.203900659027200, 0, 0;
+             4.063000939519495,-6.340099591541239, 2.287165301103365, 0;
+            -6.494320028787459, 9.394962342878431,-4.615533409449387, 1.744047031603003];
+   matAN = [ 1, 0, 0, 0;
+            -1.037159659693408,   0.4363577782952090, 0.6845553714934806,-0.2064640160522880;
+             0.03605110452225963,-0.5660510638564654,-0.1074762596776216, 0.7596425122215622;
+             0.001108555171148741,0.1296932855612564,-0.5770791118158589, 0.4468215038307258];
+   matK0 = diag([0, 0.2868808051464541, 0.4845433642003949, 0.2814200916147642]);
+    matK = diag([0, 0.2754665812532002, 0.4295774647887324, 0.2949559539580673]);
+   matKN = [ 0.3333333333333333, 0, 0, 0;
+            -0.3406285072951739, 0.1264725806602174, 0, 0;
+             0.1282327493289677, 0, 0.5627483658896584, 0;
+            -0.03272942952658255, 0, 0, 0.1697266466479663];
+    matR = [ 0, 0, 0, 0;
+             0, 0, 0, 0.156340095159149050;
+             0, 0, 0, -0.0212049600240154176;
+             0, 0, 0, -0.135135135135135135];
+   matRN = [ 0, 0, 0, 0.0463093438915248733;
+             0, 0, 0, 0.191797796516481359;
+             0, 0, 0, -0.286597642859776972;
+             0, 0, 0, 0.1785714285714285754];
+       s = 4;
+    vecC = [0; 9/86; 321/602; 1];   
+      e4 = ones(4,1);
+    vecA = matA0*e4;
+    vecW = matAN'*e4;
+   matV4 = [vecC.^0,vecC.^1,vecC.^2,vecC.^3];
+   matV4inv = matV4^(-1);
+   matP4 = [1 1 1 1; 0 1 2 3; 0 0 1 3; 0 0 0 1];
+   matE4 = diag([1 2 3], 1);
+    matB = (matA*matV4 - matK*matV4*matE4 + matR)*matP4*matV4inv;
+   matBN = (matAN*matV4 - matKN*matV4*matE4 + matRN)*matP4*matV4inv;
+     e4m = [1;0;0;0];
+    vecV = (matV4')^(-1)*e4m;  
+    
+elseif strcmpi(meth,'AP4o43p')
+   name = 'AP4o43p';     
+   %%% 
+   matA0 = [ 7.66666666666666667, -7.95238095238095238, 6.42857142857142857, -1;
+           -37.6457338578986401, 46.5146502212408503, -35.3473322450148652, 5.55674296649591893;
+            38.9040130866197642, -51.0331029412282968, 39.8467476911860376, -5.98762214872148145;
+            -9.13203968686396021, 14.1961513461232192, -13.4262421473903337, 3.41091057259464445];
+    matA = [ 2.08043751302843489, 0, 0, 0;
+            -6.58276780946094426, 2.84348148772695733, 0, 0;
+             5.64006409116323650, -4.38156354525157551, 2.01079068332727525, 0;
+            -1.34482758620689655, 3.26339973127943850, -4.50904595597500808, 1.98003139036908193];
+   matAN = [ 2.60294117647058824, 0.0942130055561403664, -1.07290671521259909, 0.6;
+            -9.77053883888651374, 3.64351749199891370, 4.76596963882955695, -3.17233604139706978;
+             9.12175843871911709, -5.32432432432432432, -3.19354838709677419, 3.51407117409450770;
+            -2.13701803226019819, 3.21740454865792099, -2.95625433768097550, 1.06705120253170978];
+   matK0 = [ 0.220130981453414013, -0.00168533108311871587, 0.0321442613056029265, 0;
+             0.111184598670213729, 0.431174554102291788, -0.177496780465271151, 0;
+            -0.118824307411673744, -0.00994564422562632893, 0.227995417316306658, 0;
+             0.0277749854684269964, 0.00232477789989438888, -0.0443404082676804983, 0.288385222035427183];
+    matK = diag([0.252309394841236446, 0.450431330440438822, 0, 0.297259274718324732]);
+   matKN = [ 0.275212206036510905, 0, 0.0307692307692307692, 0.0649350649350649351;
+            -0.0708868062462349264, 0.373542271243861921, -0.169904025698654343, -0.358563690597809490;
+             0.0757575757575757576, 0, 0.275092628801415933, 0.383201295033972388;
+            -0.0177082081236116078, 0, -0.0424436648712894966, 0.192173796161760009];
+       s = 4;
+    vecC = [4657/46172; 43/97; 3991/6596; 21111803999/23798723875];  
+      e4 = ones(4,1);
+    vecA = matA0*e4;
+    vecW = matAN'*e4;
+   matV4 = [vecC.^0,vecC.^1,vecC.^2,vecC.^3];
+   matV4inv = matV4^(-1);
+   matP4 = [1 1 1 1; 0 1 2 3; 0 0 1 3; 0 0 0 1];
+   matE4 = diag([1 2 3], 1);
+    matB = (matA*matV4 - matK*matV4*matE4)*matP4*matV4inv;
+   matBN = (matAN*matV4 - matKN*matV4*matE4)*matP4*matV4inv;
+     e4m = [1;0;0;0];
+    vecV = (matV4')^(-1)*e4m; 
+    
+end %%% end if
+    
+Coeffs = struct('c',vecC,...
+                's',s,...
+                'A',matA,...
+                'A0',matA0,...
+                'AN',matAN,...
+                'B',matB,...
+                'BN',matBN,...
+                'K',matK,...
+                'K0',matK0,...
+                'KN',matKN,...
+                'vA',vecA,...
+                'vW',vecW,...
+                'vV',vecV,...
+                'name',name);
+            
+end %%% end function                
\ No newline at end of file
-- 
GitLab