(************** Content-type: application/mathematica ************** Mathematica-Compatible Notebook This notebook can be used with any Mathematica-compatible application, such as Mathematica, MathReader or Publicon. The data for the notebook starts with the line containing stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info@wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. *******************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 40340, 1035]*) (*NotebookOutlinePosition[ 41414, 1069]*) (* CellTagsIndexPosition[ 41370, 1065]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{ Cell["\<\ Incremental Solution Methods For Two-Bar Arch \ Modeled by the Total Lagrangian Formulation\ \>", "Section", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 1, 0]], Cell["\<\ This Notebook is a testbed of incremental solution methods, \ converted from ancient Fortran. The methods are applied to the 2-bar arch problem of Chapter 8. It is used for the first two Exercises of Chapter 18. The present implementation includes three integration methods: FE: Forward Euler MR: Midpoint Rule (a 2-step Runge Kutta) RK4: Classical 4-step Runge Kutta with three Increment Control Strategies LC: Lambda Control, also called Load Control DC: Displacement Control AC : ArcLength Control The implementations below use a constant stepsize ell and a positive-work \ criterion to traverse limit points. To run the main programs in Cells 12ff, Cells 1 through 11 must be \ initialized. \ \>", "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, FontSize->14, Background->RGBColor[0, 1, 0]], Cell[TextData[{ "Cell 1. The modules ", StyleBox["FormTanStiffnessOfTwoBarArch", FontWeight->"Bold"], " and ", StyleBox["FormInternalForceOfTwoBarArch", FontWeight->"Bold"], "\n below form return the internal force p and tangent stiffness K for the \ two-bar arch structure of Chapter 8,\n which is discretized by two Total \ Lagrangian (TL) bar elements.\n They are extracted directly from the \ Mathematica modules of that Chapter, with minor edits.\n", StyleBox[" DetTanStiffness", FontWeight->"Bold"], " returns exactly that.\n", StyleBox[" FormIncrementalLoadVector", FontWeight->"Bold"], " simply returns its argument force as q. This trivial operation\n is \ implemented as a module to have a placeholder for more complicated cases.\n \n\ The inputs to ", StyleBox["FormTanStiffnessOfTwoBarArch", FontWeight->"Bold"], " and ", StyleBox["FormInternalForceOfTwoBarArch\n ", FontWeight->"Bold"], "includes four structural properties collected in sprop:\n S \ arch span between supports\n H arch height \ under zero load\n Em bar elastic modulus\n A0 \ cross section area in reference state\n and the displacements \ u={uX,uY} of the crown from the reference state" }], "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell[TextData[{ "FormTanStiffnessOfTwoBarArch[{S_,H_,Em_,A0_},{uX_,uY_}]:=\n \ Module[{c,K},c=4*Em*A0/(4*H^2+S^2)^(3/2); \n \ K=c*{{(S^2+6*uX^2+4*H*uY+2*uY^2), \n 4*uX*(H+uY)},{4*uX*(H+uY), \n \ 2*(2*H^2+uX^2+6*H*uY+3*uY^2)}};\n Return[K]];\n \n\ FormInternalForceOfTwoBarArch[{S_,H_,Em_,A0_},{uX_,uY_}]:=\n \ Module[{c,p},c=4*Em*A0/(4*H^2+S^2)^(3/2); \n \ p=c*{uX*(S^2+2*uX^2+4*H*uY+2*uY^2),\n 2*(H+uY)*(uX^2+2*H*uY+uY^2)};\n \ Return[p]];\n \nFormIncrementalLoadVector[lambda_,force_,u_]:=Module[{},\n\ Return[force]];\n \nDetTanStiffness[sprop_,u_]:=Module[{K11,K12,K21,K22},\n\ {{K11,K12},{K21,K22}}=FormTanStiffnessOfTwoBarArch[sprop,u];\n \ Return[K11*K22-K12*K21]];\n ", StyleBox["\nClearAll[uX,uY];\nK= \ FormTanStiffnessOfTwoBarArch[{S,H,Em,A0},{uX,uY}];\np= \ FormInternalForceOfTwoBarArch[{S,H,Em,A0},{uX,uY}];\nKK={D[p,uX],D[p,uY]};\n\ Print[\"Check K=grad(p): \",Simplify[K-KK]];\n\ Print[Simplify[Together[DetTanStiffness[{S,H,Em,A0},{0,uY}]]]];\n", FontColor->RGBColor[1, 0, 0]] }], "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, InitializationCell->True, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0.647715, 0.521981]], Cell[TextData[{ "Cell 2. ", StyleBox["SolveTwoLinearEqs", FontWeight->"Bold"], " is an ad-hoc module that solves a system of two linear equations: \n\ Ax=b. It returns x and a regularity/singularity indicator." }], "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell[TextData[{ "SolveTwoLinearEqs[A_,b_]:=Module[{A11,A12,A21,A22,b1,b2,\n \ dnorm,Adet,x,eps=10.^(-15)},\n {{A11,A12},{A21,A22}}=A; \ Adet=A11*A22-A12*A21; {b1,b2}=b;\n dnorm=Max[Abs[A11*A22],Abs[A12*A21]];\n \ If [Abs[Adet]<=eps*dnorm, \n Return[{Null,False}]];\n \ x={A22*b1-A12*b2,-A21*b1+A11*b2}/Adet; \n Return[{x,True}]];\n", StyleBox[" \nPrint[SolveTwoLinearEqs[{{2,6},{1,3}},{8,4}]];\n\ Print[SolveTwoLinearEqs[{{2,5},{1,3}},{7,4}]];", FontColor->RGBColor[1, 0, 0]] }], "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, InitializationCell->True, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0.647715, 0.521981]], Cell[TextData[{ "Cell 3. ", StyleBox["IncVelocity ", FontWeight->"Bold"], "computes the incremental velocity vector v at a given state (lambda,u). \ On entry\n K and q are evaluated. If K is numerically singular u is \ perturbed by a tiny random amount and\n the process repeated up to 10 times. \ If K is not numerically singular, the velocity v=Kinv.q is returned." }], "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell[TextData[{ "IncVelocity[sprop_,force_,{lambda_,u_}]:= \n \ Module[{q,nudge,un=u,v,OK,ueps=10.^(-10)},\n nudge=0; SeedRandom[7654321];\ \n While [nudge<=10,\n K=FormTanStiffnessOfTwoBarArch[sprop,un]; \ K=N[K];\n ", StyleBox[" (*Print[\"IncVelocity K=\",K];*)", FontColor->RGBColor[1, 0, 0]], "\n q=FormIncrementalLoadVector[lambda,force,un]; q=N[q];\n \ {v,OK}=SolveTwoLinearEqs[K,q]; \n ", StyleBox[" (*Print[\"IncVelocity v=\",v,\" OK= \",OK];*)\n ", FontColor->RGBColor[1, 0, 0]], "If [OK, Break[]];\n nudge++; un+=Table[Random[]*ueps,{2}] ];\n If \ [OK, Return [{N[v],N[q],\" \"}]];\n Return [Null,Null,\"IncVelocity: Cant \ escape singularity\"]];\n ", StyleBox["\nClearAll[uX,uY];\n{v,q,status}= \ IncVelocity[{2,3,1,1},{4,0},{1,{1,1}}];\nPrint[\"v=\",v]; Print[\"q=\",q]; \n\ If[status!=\" \", Print[\"status=\",status]];", FontColor->RGBColor[1, 0, 0]] }], "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, InitializationCell->True, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0.647715, 0.521981]], Cell[TextData[{ "Cell 4. ", StyleBox["IncSolution ", FontWeight->"Bold"], "advances the solution over one increment, without executing\nequilibrium \ corrections. The module arguments provide the following input data:\n \n \ method Keywords specifying the solution method: {integ,ics} \ where \n integ identifies the integrator: \ FE, MR or RK4\n ics identifies the \ increment control strategy: LC, DC or AC\n sprop \ Properties of arch structure: {H,S,Em,A0}. See Cell 1.\n force \ A list specifying the applied forces. In this problem, force is \ same as q.\n sol A list of entities at the last \ computed solution:\n n \ current increment number (n=0 for first step)\n \ lambdan the stage control parameter \n \ un ={uXn,uYn} the crown displacement components\n \ vn={vXn,vYn} incremental velocity over \ previous step\n qn={qXn,qYn} \ incremental force over previous step\n \ Kdetn the determinant of Kn\n \ elln same as ell for a fixed stepsize incrementation\n \ an cosine of angle \ between last 2 incremental directions\n \ kappan the limit point sensor\n \ kappa0 kappa at n=0\n \ rem a char string storing remarks about any remarkable \ happenings\n solpar A list of solution control \ parameters: \n nmax maximum \ number of incremental steps\n lambdamax \ bound on abs(lambda)\n umax \ {uXmax,uYmax} bounds on node displacements\n \ ell dimensionless length of increment\n \ ellmin not used here\n \ ellmax not used here\n \ acctol not used here\n \ lref a reference length for scaling u if ics is DC or \ AC\n\n If n>nmax, abs(lambda)>lambdamax, \ abs(uX)>uXmax or\n abs(uY)>uYmax, the \ solution is terminated. If a variable stepsize\n \ implementation is adopted, ellmin, elklmax and epsacc are used\n \ In corrective and perturbation-injection method, \ this list is\n expanded.\n \ \n The function returns {solnext,status} where\n \ solnext Updated values of sol at the next solution if status \ is blank\n status A character string status \ indicator. If nonblank, the solution process has been\n \ terminated for the reason stated in this string.\n \ \n In essence ", StyleBox["IncSolution ", FontWeight->"Bold"], "is a driver that checks whether certain bounds are exceeded (for example\n\ number of steps) and if satisfied simply calls the appropriate integrator. \ If termination is\n indicated by bound violation(s) or other reasons, it \ returns Null; else it reports the next solution." }], "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell["\<\ IncSolution[method_,sprop_,force_,sol_,solpar_]:= Module[ {integ,ics,n=sol[[1]],lambda=sol[[2]],u=sol[[3]], nmax=solpar[[1]],lambdamax=solpar[[2]],umax=solpar[[3]], solnext,status}, If [n>nmax, Return[{Null, \"IncSolution: Max steps reached\"}]]; If [Abs[lambda]>Abs[lambdamax], Return[{Null, \"IncSolution: lambda exceeds bound\"}]]; If [Abs[u[[1]]]>Abs[umax[[1]]], Return[{Null, \"IncSolution: uX exceeds bound\"}]]; If [Abs[u[[2]]]>Abs[umax[[2]]], Return[{Null, \"IncSolution: uY exceeds bound\"}]]; {integ,ics}=method; If [integ==\"FE\", {solnext,status}=FEstep [ics,sprop,force,sol,solpar]]; If [integ==\"MR\", {solnext,status}=MRstep [ics,sprop,force,sol,solpar]]; If [integ==\"RK4\", {solnext,status}=RK4step[ics,sprop,force,sol,solpar]]; Return[{solnext,status}]];\ \>", "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, InitializationCell->True, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0.647715, 0.521981]], Cell[TextData[{ "Cell 5. ", StyleBox["FEstep", FontWeight->"Bold"], " is the Forward Euler (FE) driver module. It simply calls FELCstep, \ FEDCstep or\nFEACstep according to the increment control strategy specified \ in ics." }], "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell["\<\ FEstep[ics_,sprop_,force_,sol_,solpar_]:=Module[ {solnext,status}, If [ics==\"LC\", {solnext,status}=FELCstep[ics,sprop,force,sol,solpar]]; If [ics==\"DC\", {solnext,status}=FEDCstep[ics,sprop,force,sol,solpar]]; If [ics==\"AC\", {solnext,status}=FEACstep[ics,sprop,force,sol,solpar]]; Return[{solnext,status}]];\ \>", "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, InitializationCell->True, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0.647715, 0.521981]], Cell[TextData[{ "Cell 6. ", StyleBox["FELCstep, FEDCstep ", FontWeight->"Bold"], "and", StyleBox[" FEACstep ", FontWeight->"Bold"], " implement the Forward Euler (FE) integrator for Load\nControl, \ Displacement Control and ArcLength Control, respectively." }], "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell["\<\ FELCstep[ics_,sprop_,force_,sol_,solpar_]:=Module[ {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn, rem=\" \",v,q,qv,lambda,u,Kdet,a,kappa,nmax,lambdamax,umax, ell,ellmin,ellmax,acctol,lref,f,status}, {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn}=sol; {nmax,lambdamax,umax,ell,ellmin,ellmax,acctol,lref}=solpar; {v,q,status}=IncVelocity[sprop,force,{lambdan,un}]; If [status!=\" \", rem=status; Return[{Null,status}]]; n++; qv=q.v; f=Sign[qv]; ell=elln; lambda=lambdan+ell/f; u=un+v*ell/f; Kdet=DetTanStiffness[sprop,u]; a=(v/Sqrt[v.v]).(vn/Sqrt[vn.vn]); kappa=((q.v)/(v.v))/kappa0; Return[{{n,lambda,u,v,q,Kdet,ell,a,kappa,kappa0,rem},\" \"}]]; FEDCstep[ics_,sprop_,force_,sol_,solpar_]:=Module[ {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn, rem=\" \",v,q,qv,lambda,u,Kdet,a,kappa,nmax,lambdamax,umax, ell,ellmin,ellmax,acctol,lref,f,status}, {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn}=sol; {nmax,lambdamax,umax,ell,ellmin,ellmax,acctol,lref}=solpar; {v,q,status}=IncVelocity[sprop,force,{lambdan,un}]; If [status!=\" \", rem=status; Return[{Null,status}]]; n++; qv=q.v; f=Sqrt[(v.v)/lref^2]*Sign[qv]; ell=elln; lambda=lambdan+ell/f; u=un+v*ell/f; Kdet=DetTanStiffness[sprop,u]; a=(v/Sqrt[v.v]).(vn/Sqrt[vn.vn]); kappa=((q.v)/(v.v))/kappa0; Return[{{n,lambda,u,v,q,Kdet,ell,a,kappa,kappa0,rem},\" \"}]]; FEACstep[ics_,sprop_,force_,sol_,solpar_]:=Module[ {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn, rem=\" \",v,q,qv,lambda,u,Kdet,a,kappa,nmax,lambdamax,umax, ell,ellmin,ellmax,acctol,lref,f,status}, {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn}=sol; {nmax,lambdamax,umax,ell,ellmin,ellmax,acctol,lref}=solpar; {v,q,status}=IncVelocity[sprop,force,{lambdan,un}]; If [status!=\" \", rem=status; Return[{Null,status}]]; n++; qv=q.v; f=Sqrt[1+(v.v)/lref^2]*Sign[qv]; ell=elln; lambda=lambdan+ell/f; u=un+v*ell/f; Kdet=DetTanStiffness[sprop,u]; a=(v/Sqrt[v.v]).(vn/Sqrt[vn.vn]); kappa=((q.v)/(v.v))/kappa0; Return[{{n,lambda,u,v,q,Kdet,ell,a,kappa,kappa0,rem},\" \"}]];\ \>", \ "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, InitializationCell->True, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0.647715, 0.521981]], Cell[TextData[{ "Cell 7. ", StyleBox[" MRstep", FontWeight->"Bold"], " is the Midpoint Rule (MR) driver module. It simply calls MRLCstep, \ MRDCstep or\nMRACstep according to the increment control strategy specified \ in ics." }], "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell["\<\ MRstep[ics_,sprop_,force_,sol_,solpar_]:=Module[ {solnext,status}, If [ics==\"LC\", {solnext,status}=MRLCstep[ics,sprop,force,sol,solpar]]; If [ics==\"DC\", {solnext,status}=MRDCstep[ics,sprop,force,sol,solpar]]; If [ics==\"AC\", {solnext,status}=MRACstep[ics,sprop,force,sol,solpar]]; Return[{solnext,status}]];\ \>", "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, InitializationCell->True, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0.647715, 0.521981]], Cell[TextData[{ StyleBox["Cell 8.", FontFamily->"Times", FontWeight->"Plain"], StyleBox[" MRLCstep, MRDCstep ", FontFamily->"Times"], StyleBox["and ", FontFamily->"Times", FontWeight->"Plain"], StyleBox["MRACstep ", FontFamily->"Times"], StyleBox[" implement the Midpoint Rule (MR) integrator for Load\nControl, \ Displacement Control and ArcLength Control, respectively.", FontFamily->"Times", FontWeight->"Plain"] }], "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell["\<\ MRLCstep[ics_,sprop_,force_,sol_,solpar_]:=Module[ {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn, rem=\" \",v,q,qv,lambda,u,Kdet,a,kappa,nmax,lambdamax,umax, ell,ellmin,ellmax,acctol,lref,f,status}, {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn}=sol; {nmax,lambdamax,umax,ell,ellmin,ellmax,acctol,lref}=solpar; {v,q,status}=IncVelocity[sprop,force,{lambdan,un}]; If [status!=\" \", Return[{Null,status}]]; qv=q.v; f=Sign[qv]; ell=elln; lambdaM=lambdan+ell/(2*f); uM=un+v*ell/(2*f); {v,q,status}=IncVelocity[sprop,force,{lambdaM,uM}]; If [status!=\" \", rem=status; Return[{Null,status}]]; n++; qv=q.v; f=Sign[qv]; ell=elln; lambda=lambdan+ell/f; u=un+v*ell/f; Kdet=DetTanStiffness[sprop,u]; a=(v/Sqrt[v.v]).(vn/Sqrt[vn.vn]); kappa=((q.v)/(v.v))/kappa0; Return[{{n,lambda,u,v,q,Kdet,ell,a,kappa,kappa0,rem},\" \"}]]; MRDCstep[ics_,sprop_,force_,sol_,solpar_]:=Module[ {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn, rem=\" \",v,q,qv,lambda,u,Kdet,a,kappa,nmax,lambdamax,umax, ell,ellmin,ellmax,acctol,lref,f,status}, {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rem}=sol; {nmax,lambdamax,umax,ell,ellmin,ellmax,acctol,lref}=solpar; {v,q,status}=IncVelocity[sprop,force,{lambdan,un}]; If [status!=\" \", Return[{Null,status}]]; qv=q.v; f=Sqrt[(v.v)/lref^2]*Sign[qv]; ell=elln; lambdaM=lambdan+ell/(2*f); uM=un+v*ell/(2*f); {v,q,status}=IncVelocity[sprop,force,{lambdaM,uM}]; If [status!=\" \", rem=status; Return[{Null,status}]]; n++; qv=q.v; f=Sqrt[(v.v)/lref^2]*Sign[qv]; ell=elln; lambda=lambdan+ell/f; u=un+v*ell/f; Kdet=DetTanStiffness[sprop,u]; a=(v/Sqrt[v.v]).(vn/Sqrt[vn.vn]); kappa=((q.v)/(v.v))/kappa0; Return[{{n,lambda,u,v,q,Kdet,ell,a,kappa,kappa0,rem},\" \"}]]; MRACstep[ics_,sprop_,force_,sol_,solpar_]:=Module[ {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn, rem=\" \",v,q,qv,lambda,u,Kdet,a,kappa,nmax,lambdamax,umax, ell,ellmin,ellmax,acctol,lref,f,status}, {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn}=sol; {nmax,lambdamax,umax,ell,ellmin,ellmax,acctol,lref}=solpar; {v,q,status}=IncVelocity[sprop,force,{lambdan,un}]; If [status!=\" \", Return[{Null,status}]]; qv=q.v; f=Sqrt[1+(v.v)/lref^2]*Sign[qv]; ell=elln; lambdaM=lambdan+ell/(2*f); uM=un+v*ell/(2*f); {v,q,status}=IncVelocity[sprop,force,{lambdaM,uM}]; If [status!=\" \", rem=status; Return[{Null,status}]]; n++; qv=q.v; f=Sqrt[1+(v.v)/lref^2]*Sign[qv]; ell=elln; lambda=lambdan+ell/f; u=un+v*ell/f; Kdet=DetTanStiffness[sprop,u]; a=(v/Sqrt[v.v]).(vn/Sqrt[vn.vn]); kappa=((q.v)/(v.v))/kappa0; Return[{{n,lambda,u,v,q,Kdet,ell,a,kappa,kappa0,rem},\" \"}]]; \ \>", \ "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, InitializationCell->True, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0.647715, 0.521981]], Cell[TextData[{ "Cell 9. ", StyleBox[" RK4step", FontWeight->"Bold"], " is the 4th order Runge Kutta (RK4) driver module. It simply calls \ RK4LCstep, \nRK4DCstep or RK4ACstep according to the increment control \ strategy specified in ics." }], "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0, 0]], Cell["\<\ RK4step[ics_,sprop_,force_,sol_,solpar_]:=Module[ {solnext,status}, If [ics==\"LC\", {solnext,status}=RK4LCstep[ics,sprop,force,sol,solpar]]; If [ics==\"DC\", {solnext,status}=RK4DCstep[ics,sprop,force,sol,solpar]]; If [ics==\"AC\", {solnext,status}=RK4ACstep[ics,sprop,force,sol,solpar]]; If [status!=\" \", Return[{Null,status}]]; Return[{solnext,\" \"}]];\ \>", "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, InitializationCell->True, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0.647715, 0.521981]], Cell[TextData[{ StyleBox["Cell 10. ", FontFamily->"Times", FontWeight->"Plain"], StyleBox["RK4LCstep, RK4DCstep ", FontFamily->"Times"], StyleBox["and ", FontFamily->"Times", FontWeight->"Plain"], StyleBox["RK4ACstep ", FontFamily->"Times"], StyleBox[" implement the classical Runge-Kutta (RK4) integrator\n for Load \ Control, Displacement Control and ArcLength Control, respectively. ", FontFamily->"Times", FontWeight->"Plain"] }], "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0, 0]], Cell["\<\ RK4LCstep[ics_,sprop_,force_,sol_,solpar_]:=Module[ {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn, rem=\" \",v,v1,v2,v3,v4,q,qv,lambda,u,Kdet,a,kappa,nmax,lambdamax,umax, ell,ellmin,ellmax,acctol,lref,f,status}, {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn}=sol; {nmax,lambdamax,umax,ell,ellmin,ellmax,acctol,lref}=solpar; {v1,q,status}=IncVelocity[sprop,force,{lambdan,un}]; If [status!=\" \", Return[{Null,status}]]; qv=q.v1; f=Sqrt[(v1.v1)/lref^2]*Sign[qv]; ell=elln; lambdaM=lambdan+ell/(2*f); uM=un+v1*ell/(2*f); {v2,q,status}=IncVelocity[sprop,force,{lambdaM,uM}]; If [status!=\" \", Return[{Null,status}]]; qv=q.v2; f=Sqrt[(v2.v2)/lref^2]*Sign[qv]; ell=elln; lambdaM=lambdan+ell/(2*f); uM=un+v2*ell/(2*f); {v3,q,status}=IncVelocity[sprop,force,{lambdaM,uM}]; If [status!=\" \", Return[{Null,status}]]; qv=q.v3; f=Sqrt[(v3.v3)/lref^2]*Sign[qv]; ell=elln; lambdaM=lambdan+ell/(f); uM=un+v3*ell/(f); {v4,q,status}=IncVelocity[sprop,force,{lambdaM,uM}]; If [status!=\" \", rem=status; Return[{Null,status}]]; v=(v1+2*v2+2*v3+v4)/6; n++; qv=q.v; f=Sqrt[(v.v)/lref^2]*Sign[qv]; ell=elln; lambda=lambdan+ell/f; u=un+v*ell/f; Kdet=DetTanStiffness[sprop,u]; a=(v/Sqrt[v.v]).(vn/Sqrt[vn.vn]); kappa=((q.v)/(v.v))/kappa0; Return[{{n,lambda,u,v,q,Kdet,ell,a,kappa,kappa0,rem},\" \"}]]; RK4DCstep[ics_,sprop_,force_,sol_,solpar_]:=Module[ {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn, rem=\" \",v,v1,v2,v3,v4,q,qv,lambda,u,Kdet,a,kappa,nmax,lambdamax,umax, ell,ellmin,ellmax,acctol,lref,f,status}, {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rem}=sol; {nmax,lambdamax,umax,ell,ellmin,ellmax,acctol,lref}=solpar; {v1,q,status}=IncVelocity[sprop,force,{lambdan,un}]; If [status!=\" \", Return[{Null,status}]]; qv=q.v1; f=Sqrt[(v1.v1)/lref^2]*Sign[qv]; ell=elln; lambdaM=lambdan+ell/(2*f); uM=un+v1*ell/(2*f); {v2,q,status}=IncVelocity[sprop,force,{lambdaM,uM}]; If [status!=\" \", Return[{Null,status}]]; qv=q.v2; f=Sqrt[(v2.v2)/lref^2]*Sign[qv]; ell=elln; lambdaM=lambdan+ell/(2*f); uM=un+v2*ell/(2*f); {v3,q,status}=IncVelocity[sprop,force,{lambdaM,uM}]; If [status!=\" \", Return[{Null,status}]]; qv=q.v3; f=Sqrt[(v3.v3)/lref^2]*Sign[qv]; ell=elln; lambdaM=lambdan+ell/(f); uM=un+v3*ell/(f); {v4,q,status}=IncVelocity[sprop,force,{lambdaM,uM}]; If [status!=\" \", rem=status; Return[{Null,status}]]; v=(v1+2*v2+2*v3+v4)/6; n++; qv=q.v; f=Sqrt[(v.v)/lref^2]*Sign[qv]; ell=elln; lambda=lambdan+ell/f; u=un+v*ell/f; Kdet=DetTanStiffness[sprop,u]; a=(v/Sqrt[v.v]).(vn/Sqrt[vn.vn]); kappa=((q.v)/(v.v))/kappa0; Return[{{n,lambda,u,v,q,Kdet,ell,a,kappa,kappa0,rem},\" \"}]]; RK4ACstep[ics_,sprop_,force_,sol_,solpar_]:=Module[ {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn, rem=\" \",v,v1,v2,v3,v4,q,qv,lambda,u,Kdet,a,kappa,nmax,lambdamax,umax, ell,ellmin,ellmax,acctol,lref,f,status}, {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rn}=sol; {nmax,lambdamax,umax,ell,ellmin,ellmax,acctol,lref}=solpar; {v1,q,status}=IncVelocity[sprop,force,{lambdan,un}]; If [status!=\" \", Return[{Null,status}]]; qv=q.v1; f=Sqrt[(v1.v1)/lref^2]*Sign[qv]; ell=elln; lambdaM=lambdan+ell/(2*f); uM=un+v1*ell/(2*f); {v2,q,status}=IncVelocity[sprop,force,{lambdaM,uM}]; If [status!=\" \", Return[{Null,status}]]; qv=q.v2; f=Sqrt[(v2.v2)/lref^2]*Sign[qv]; ell=elln; lambdaM=lambdan+ell/(2*f); uM=un+v2*ell/(2*f); {v3,q,status}=IncVelocity[sprop,force,{lambdaM,uM}]; If [status!=\" \", Return[{Null,status}]]; qv=q.v3; f=Sqrt[(v3.v3)/lref^2]*Sign[qv]; ell=elln; lambdaM=lambdan+ell/(f); uM=un+v3*ell/(f); {v4,q,status}=IncVelocity[sprop,force,{lambdaM,uM}]; If [status!=\" \", rem=status; Return[{Null,status}]]; v=(v1+2*v2+2*v3+v4)/6; n++; qv=q.v; f=Sqrt[(v.v)/lref^2]*Sign[qv]; ell=elln; lambda=lambdan+ell/f; u=un+v*ell/f; Kdet=DetTanStiffness[sprop,u]; a=(v/Sqrt[v.v]).(vn/Sqrt[vn.vn]); kappa=((q.v)/(v.v))/kappa0; Return[{{n,lambda,u,v,q,Kdet,ell,a,kappa,kappa0,rem},\" \"}]]; \ \>", "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, InitializationCell->True, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0.647715, 0.521981]], Cell["\<\ Cell 11. Module to print computed solution table. Looks weird \ because it is adapted from Fortran.\ \>", "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell["\<\ PrintSolutionTable[soltab_]:= Module[{numsteps, n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rem,t}, numsteps=Length[soltab]; t=Table[\" \",{numsteps+1},{8}]; For [i=1, i<=numsteps, i++, {n,lambdan,un,vn,qn,Kdetn,elln,an,kappan,kappa0,rem}= Chop[soltab[[i]],.00000001]; t[[i+1,1]]=ToString[n]; t[[i+1,2]]=ToString[lambdan]; t[[i+1,3]]=ToString[un]; t[[i+1,4]]=ToString[vn]; t[[i+1,5]]=ToString[Kdetn]; t[[i+1,6]]=ToString[an]; t[[i+1,7]]=ToString[kappan]; t[[i+1,8]]=rem]; t[[1]] = {\"n\",\"lambda\",\"u={uX,uY}\",\"v={vX,vY}\", \"Kdet\", \"a\", \"kappa\", \"remarks\"}; Print[TableForm[t,TableAlignments->{Left}, TableDirections->{Column,Row},TableSpacing->{0,1}]]; ]; q={0,-1}; soltab= { {0,0.0,{ 0.0,0.},{0.42,0.0},q,45.,0.02,1.0,1.0,2.5,\"ref state\"}, {1,0.2,{-0.3,0.},{0.35,0.0},q,43.,0.02,1.0,0.9,2.5,\"step 1\"} }; PrintSolutionTable[soltab];\ \>", "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, InitializationCell->True, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[1, 0.647715, 0.521981]], Cell["\<\ Cell 12. The main program to run the two-bar arch structure. \ S=2, H=1, Em=1, A0=1, q={0,-1}, ell=0.010. Method: Forward Euler (FE) with Load Control \ (LC)\ \>", "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell["\<\ ClearAll[S,H,Em,A0]; (* Define solution method via method={integ,ics} *) method={\"FE\",\"LC\"}; (* Define structural properties: {S,H,Em,A0} (see Cell 1) *) S=2; H=1; Em=1; A0=1; sprop={S,H,Em,A0}; (* Define applied force reference: fx=0, fy=-lambda *) force={0,-1}; (* Define solution parameters *) nmax=50; lambdamax=2; umax={2*S,2*H}; ell=0.010; acctol=0; lref=H; solpar={nmax,lambdamax,umax,ell,ell,ell,acctol,H}; (* Define reference state solution *) lambda0=0.; u0={0.,0.}; {v0,q0,status}=IncVelocity[sprop,force,{lambda0,u0}]; If[status!=\" \", Print[\"status=\",status]]; kappa0=(q0.v0)/(v0.v0); Kdet=DetTanStiffness[sprop,u0]; sol={0,lambda0,u0,v0,q0,Kdet,ell,1,1,kappa0,\"C0 cfg\"}; (* Prepare Table to save solutions and store initial one *) solnull={0,0,0,0,0,0,0,0,0,0,\" \"}; soltab=Table[solnull,{nmax+1}]; soltab[[1]]=sol; (* Now do nmax steps and record solutions in soltab *) n=0; While [status==\" \" && nTrue,PlotRange->All, AxesOrigin->{0,0},AxesLabel->{\"uY\",\"lambda\"}, PlotLabel->\"Response: lambda vs uY, \\nMethod:\"<>method]; ListPlot[uYvskappa,PlotJoined->True,PlotRange->All, AxesOrigin->{0,0},AxesLabel->{\"uY\",\"kappa\"}, PlotLabel->\"LP sensor kappa vs uY, \\nMethod:\"<>method];\ \>", \ "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 0]], Cell["\<\ Cell 13. The main program to run the two-bar arch structure. \ S=2, H=1, Em=1, A0=1, q={0,-1}, ell=0.010. Method: Midpoint Rule (MR) with Load Control \ (LC)\ \>", "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell["\<\ ClearAll[S,H,Em,A0]; (* Define solution method via method={integ,ics} *) method={\"RK4\",\"AC\"}; (* Define structural properties: {S,H,Em,A0} (see Cell 1) *) S=2; H=1; Em=1; A0=1; sprop={S,H,Em,A0}; (* Define applied force reference: fx=0, fy=-lambda *) force={0,-1}; (* Define solution parameters *) nmax=50; lambdamax=2; umax={2*S,2*H}; ell=0.010; acctol=0; lref=H; solpar={nmax,lambdamax,umax,ell,ell,ell,acctol,H}; (* Define reference state solution *) lambda0=0.; u0={0.,0.}; {v0,q0,status}=IncVelocity[sprop,force,{lambda0,u0}]; If[status!=\" \", Print[\"status=\",status]]; kappa0=(q0.v0)/(v0.v0); Kdet=DetTanStiffness[sprop,u0]; sol={0,lambda0,u0,v0,q0,Kdet,ell,1,1,kappa0,\"C0 cfg\"}; (* Prepare Table to save solutions and store initial one *) solnull={0,0,0,0,0,0,0,0,0,0,\" \"}; soltab=Table[solnull,{nmax+1}]; soltab[[1]]=sol; (* Now do nmax steps and record solutions in soltab *) n=0; While [status==\" \" && nTrue,PlotRange->All, AxesOrigin->{0,0},AxesLabel->{\"uY\",\"lambda\"}, PlotLabel->\"Response: lambda vs uY\\nMethod:\"<>method]; ListPlot[uYvskappa,PlotJoined->True,PlotRange->All, AxesOrigin->{0,0},AxesLabel->{\"uY\",\"kappa\"}, PlotLabel->\"LP sensor kappa vs uY\\nMethod:\"<>method];\ \>", \ "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 0]], Cell["\<\ Cell 14. As in cell 12, but with arclength control. Note the much \ larger ell.\ \>", "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell["\<\ ClearAll[S,H,Em,A0]; (* Define solution method via method={integ,ics} *) method={\"FE\",\"AC\"}; (* Define structural properties: {S,H,Em,A0} (see Cell 1) *) S=2; H=5; Em=1; A0=1; sprop={S,H,Em,A0}; (* Define applied force reference: fx=0, fy=-lambda *) force={-0.01,-1}; (* Define solution parameters *) nmax=80; lambdamax=2; umax={2*S,2*H}; ell=0.01; acctol=0; lref=H; solpar={nmax,lambdamax,umax,ell,ell,ell,acctol,H}; (* Define reference state solution *) lambda0=0.; u0={0.,0.}; {v0,q0,status}=IncVelocity[sprop,force,{lambda0,u0}]; If[status!=\" \", Print[\"status=\",status]]; kappa0=(q0.v0)/(v0.v0); Kdet=DetTanStiffness[sprop,u0]; sol={0,lambda0,u0,v0,q0,Kdet,ell,1,1,kappa0,\"C0 cfg\"}; (* Prepare Table to save solutions and store initial one *) solnull={0,0,0,0,0,0,0,0,0,0,\" \"}; soltab=Table[solnull,{nmax+1}]; soltab[[1]]=sol; (* Now do nmax steps and record solutions in soltab *) n=0; While [status==\" \" && nTrue,PlotRange->All, AxesOrigin->{0,0},AxesLabel->{\"uY\",\"lambda\"}, PlotLabel->\"Response: lambda vs uY, \\nMethod:\"<>method]; ListPlot[uXvslambda,PlotJoined->True,PlotRange->All, AxesOrigin->{0,0},AxesLabel->{\"uX\",\"lambda\"}, PlotLabel->\"Response: lambda vs uX, \\nMethod:\"<>method]; ListPlot[uYvskappa,PlotJoined->True,PlotRange->All, AxesOrigin->{0,0},AxesLabel->{\"uY\",\"kappa\"}, PlotLabel->\"LP sensor kappa vs uY, \\nMethod:\"<>method];\ \>", \ "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 0]], Cell["\<\ Cell 15. As in Cell 13 but with arclegth control. Note the much \ larger ell.\ \>", "Text", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 1]], Cell["\<\ ClearAll[S,H,Em,A0]; (* Define solution method via method={integ,ics} *) method={\"FE\",\"AC\"}; (* Define structural properties: {S,H,Em,A0} (see Cell 1) *) S=2; H=2; Em=1; A0=1; sprop={S,H,Em,A0}; (* Define applied force reference: fx=0, fy=-lambda *) force={0.001,-1}; (* Define solution parameters *) nmax=400; lambdamax=2; umax={4*S,2*H}; ell=0.01; acctol=0; lref=H; solpar={nmax,lambdamax,umax,ell,ell,ell,acctol,H}; (* Define reference state solution *) lambda0=0.; u0={0.,0.}; {v0,q0,status}=IncVelocity[sprop,force,{lambda0,u0}]; If[status!=\" \", Print[\"status=\",status]]; kappa0=(q0.v0)/(v0.v0); Kdet=DetTanStiffness[sprop,u0]; sol={0,lambda0,u0,v0,q0,Kdet,ell,1,1,kappa0,\"C0 cfg\"}; (* Prepare Table to save solutions and store initial one *) solnull={0,0,0,0,0,0,0,0,0,0,\" \"}; soltab=Table[solnull,{nmax+1}]; soltab[[1]]=sol; (* Now do nmax steps and record solutions in soltab *) n=0; While [status==\" \" && nTrue,PlotRange->All, AxesOrigin->{0,0},AxesLabel->{\"uY\",\"lambda\"}, PlotLabel->\"Response: lambda vs uY\\nMethod:\"<>method]; ListPlot[uXvslambda,PlotJoined->True,PlotRange->All, AxesOrigin->{0,0},AxesLabel->{\"uX\",\"lambda\"}, PlotLabel->\"Response: lambda vs uX\\nMethod:\"<>method]; ListPlot[uYvskappa,PlotJoined->True,PlotRange->All, AxesOrigin->{0,0},AxesLabel->{\"uY\",\"kappa\"}, PlotLabel->\"LP sensor kappa vs uY\\nMethod\"<>method];\ \>", "Input", CellFrame->True, CellMargins->{{14, 37}, {Inherited, Inherited}}, CellLabelMargins->{{8, Inherited}, {Inherited, Inherited}}, ImageRegion->{{-0, 1}, {0, 1}}, Background->RGBColor[0, 1, 0]] }, Open ]] }, FrontEndVersion->"4.1 for Macintosh", ScreenRectangle->{{0, 1152}, {0, 850}}, AutoGeneratedPackage->None, WindowToolbars->{}, CellGrouping->Manual, WindowSize->{805, 731}, WindowMargins->{{1, Automatic}, {Automatic, 1}}, PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}}, ShowCellLabel->True, ShowCellTags->False, RenderingOptions->{"ObjectDithering"->True, "RasterDithering"->False}, MacintoshSystemPageSetup->"\<\ 00<0001804P000000]P2:?oQon82n@960dL5:0?l0080001804P000000]P2:001 0000I00000400`<300000BL?00400@00000000000000060801T1T00000000000 00000000000000000000000000000000\>" ] (******************************************************************* Cached data follows. If you edit this Notebook file directly, not using Mathematica, you must remove the line containing CacheID at the top of the file. The cache data will then be recreated when you save this file from within Mathematica. *******************************************************************) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[1727, 52, 319, 9, 96, "Section"], Cell[2049, 63, 1002, 26, 334, "Text"], Cell[3054, 91, 1525, 34, 280, "Text"], Cell[4582, 127, 1304, 24, 433, "Input", InitializationCell->True], Cell[5889, 153, 435, 11, 64, "Text"], Cell[6327, 166, 756, 15, 193, "Input", InitializationCell->True], Cell[7086, 183, 595, 13, 80, "Text"], Cell[7684, 198, 1195, 24, 298, "Input", InitializationCell->True], Cell[8882, 224, 4118, 60, 738, "Text"], Cell[13003, 286, 1126, 27, 328, "Input", InitializationCell->True], Cell[14132, 315, 449, 12, 64, "Text"], Cell[14584, 329, 614, 16, 163, "Input", InitializationCell->True], Cell[15201, 347, 488, 14, 64, "Text"], Cell[15692, 363, 2385, 49, 643, "Input", InitializationCell->True], Cell[18080, 414, 448, 12, 64, "Text"], Cell[18531, 428, 614, 16, 163, "Input", InitializationCell->True], Cell[19148, 446, 670, 20, 58, "Input"], Cell[19821, 468, 2977, 61, 823, "Input", InitializationCell->True], Cell[22801, 531, 462, 12, 64, "Text"], Cell[23266, 545, 663, 17, 178, "Input", InitializationCell->True], Cell[23932, 564, 686, 20, 58, "Input"], Cell[24621, 586, 4384, 90, 1273, "Input", InitializationCell->True], Cell[29008, 678, 324, 8, 46, "Text"], Cell[29335, 688, 1225, 31, 388, "Input", InitializationCell->True], Cell[30563, 721, 385, 10, 62, "Text"], Cell[30951, 733, 2002, 64, 883, "Input"], Cell[32956, 799, 385, 10, 62, "Text"], Cell[33344, 811, 1999, 64, 883, "Input"], Cell[35346, 877, 304, 8, 46, "Text"], Cell[35653, 887, 2186, 67, 928, "Input"], Cell[37842, 956, 301, 8, 46, "Text"], Cell[38146, 966, 2178, 66, 928, "Input"] }, Open ]] } ] *) (******************************************************************* End of Mathematica Notebook file. *******************************************************************)