How do I damp a membrane subject to a time-dependent force with PDE Toolbox

2 views (last 30 days)
I have a membrane wave equation simulation using PDE toolbox functions with time-independent but spatially constant or varying m and c. I can excite it with a a time dependent edge boundary or with a time and space dependent f. WIthout f, I can Rayleigh damp an initial state using the M and K matrix for in the documentation (I cannot set d= constant, consarnit, nor is it at all clear how to make the damping expressed in terms of node space dependent.) Anyway, when I during on damping with a nonvanishing f I receive the following error: after the followign code. Any advice/help resolving this would be appreciated as I can't find in the documentation any example or advice.
if damping==1
fem = assembleFEMatrices(model);
alpha_damp = 1/tau;
beta_damp = 0.01;
dampmat = alpha_damp*fem.M + beta_damp*fem.K;
CA=specifyCoefficients(model,"m",m,"d",dampmat,"c",c,"a",a,"f",f);
end
For a time-dependent model, the last argument must be a structure array with the time data as its 'time' field.
FEMatricesOut = assembleFEMatricesInternal(pdem,BCEnforcementOption,matrix,state);

Accepted Answer

akshatsood
akshatsood on 14 Aug 2024
Edited: akshatsood on 14 Aug 2024
I see that you are encountering issues with incorporating Rayleigh damping into your PDE model using MATLAB's PDE Toolbox. The error message suggests that the assembly of the finite element matrices requires a structure array with time data for time-dependent models. Please refer to the approach discussed below to help resolve this issue:
  1. Define the Damping Matrix: correctly assemble the damping matrix using the mass and stiffness matrices.
  2. Incorporate Damping into the Model: since "specifyCoefficients" function does not allow directly setting a damping matrix, you might need to manually adjust the system of equations to include damping.
  3. Time-Dependent Structure Array: create a structure array that includes time data for assembly of matrices.
Please refer to the following code to include the damping matrix correctly:
% assemble the FEM matrices
fem = assembleFEMatrices(model);
% define Rayleigh damping parameters
alpha_damp = 1/tau;
beta_damp = 0.01;
% create the damping matrix
dampmat = alpha_damp * fem.M + beta_damp * fem.K;
% define the time-dependent structure array
timeStruct = struct('time', 0);
% assemble the FEM matrices with the time-dependent structure
fem = assembleFEMatrices(model, timeStruct);
% specify coefficients with damping
specifyCoefficients(model, 'm', m, 'd', dampmat, 'c', c, 'a', a, 'f', f);
% run the simulation
results = solvepde(model);
Have a look at the documeentation for these functions for better understanding
  1. specifyCoefficients: https://www.mathworks.com/help/pde/ug/pde.pdemodel.specifycoefficients.html
  2. assembleFEMatrices: https://www.mathworks.com/help/pde/ug/assemblefematrices.html
I hope this helps.
  2 Comments
Duncan Carlsmith
Duncan Carlsmith on 14 Aug 2024
Thanks for responding. I solved my problem with a tip from tech support by specifying m and c and then a damping matrix (and figured out a way to do that node by node to make one region of nodes damp but not all) and THEN specified time dependent forcing functions for the membrane surface and edges. (I had previously specified time-dependent forces prior to specifying damping) and it worked - I can have damping with external forces. The script is posted at https://www.mathworks.com/matlabcentral/fileexchange/171104-membrane-wave-explorer?s_tid=srchtitle
I looked at the Finite element Matrices for Time-Dependent Problem example at https://www.mathworks.com/help/pde/ug/assemblefematrices.html#mw_b10d92ba-4770-4f21-aea9-55b6f4b49582
but frankly I've no idea what it is doing. In the example, it seem a harmonic pressure on Face 2 ws specified and then some matrices are generated at three times to what end I'm clueless.
akshatsood
akshatsood on 16 Aug 2024
Edited: akshatsood on 16 Aug 2024
I am glad you were able to resolve the issue. Regarding the example you provided, I believe it effectively demonstrates how to set up and solve a transient structural problem using finite element analysis for a 3-D solid model. The steps involed in the example can be summarised as follows:
Model Creation: A transient structural model is created for a solid 3-D problem using "createpde".
Geometry Definition and Visualisation: A cylindrical geometry is defined and added to the model. The geometry is plotted with face labels to visualize the setup leveraging the "pdegplot" function.
Material Properties: such as Young's modulus, Poisson's ratio and mass density are specified for cylinder.
Boundary Conditions:
  • The bottom face of the cylinder is constrained as a fixed boundary.
  • A harmonic pressure load is applied to the top face of cylinder with a given magnitude and freq.
Initial Conditions: are set with zero displacement and velocity for the model.
Mesh Generation: A linear mesh is generated to discretize the geometry for finite element analysis.
Assembling Finite Element Matrices:
  • Finite element matrices are assembled for the initial time step, capturing the stiffness matrix "K", mass matrix "M" and other relevant matrices.The boundary-load matrix "G" is assembled for the initial, intermediate, and final time steps to account for the time-dependent pressure load.
Please let me know if this is helpful, or if you have any other questions. I will do my best to address them.

Sign in to comment.

More Answers (0)

Products


Release

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!