Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Thread Subject:
pde toolbox

Subject: pde toolbox

From: Sashankh Rao

Date: 9 Mar, 2013 00:04:08

Message: 1 of 14

Using the Matlab pde toolbox I obtain a solution to the Poisson equation for a given geometry using dirichlet boundary conditions. First, I want to determine the gradient at all the boundary nodes. Is this possible using the toolbox? Second, I want to use these gradient values as an input boundary condition for the same boundary to solve a different equation (same geometry). Is this possible to do using the toolbox? Thanks.

Subject: pde toolbox

From: Bill Greene

Date: 9 Mar, 2013 14:20:15

Message: 2 of 14

Hi,

"Sashankh Rao" wrote in message <khdu9o$j3c$1@newscl01ah.mathworks.com>...
> Using the Matlab pde toolbox I obtain a solution to the Poisson equation for a given geometry using dirichlet boundary conditions. First, I want to determine the gradient at all the boundary nodes. Is this possible using the toolbox? Second, I want to use these gradient values as an input boundary condition for the same boundary to solve a different equation (same geometry). Is this possible to do using the toolbox? Thanks.

Yes, this is definitely possible. I'll try to point you in the right direction.

The function pdegrad can be used to calculate the gradient of the solution at the
element centroids.
http://www.mathworks.com/help/pde/ug/pdegrad.html?searchHighlight=pdegrad
Then the function pdeprtni can be used to interpolate these centroid values back
to the nodes.
http://www.mathworks.com/help/pde/ug/pdeprtni.html

Using these gradient values in the boundary conditions will require you to write your
own boundary condition function, referred to as a "boundary file" in the PDE
Toolbox documentation.
http://www.mathworks.com/help/pde/ug/pdebound.html

This documentation page has some examples of how to write such a function.
http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html

Bill

Subject: pde toolbox

From: Sashankh Rao

Date: 11 Mar, 2013 19:12:13

Message: 3 of 14

Hi Bill,

That was very helpful. Thank you very much.

Sai

"Bill Greene" wrote in message <khfgev$sgb$1@newscl01ah.mathworks.com>...
> Hi,
>
> "Sashankh Rao" wrote in message <khdu9o$j3c$1@newscl01ah.mathworks.com>...
> > Using the Matlab pde toolbox I obtain a solution to the Poisson equation for a given geometry using dirichlet boundary conditions. First, I want to determine the gradient at all the boundary nodes. Is this possible using the toolbox? Second, I want to use these gradient values as an input boundary condition for the same boundary to solve a different equation (same geometry). Is this possible to do using the toolbox? Thanks.
>
> Yes, this is definitely possible. I'll try to point you in the right direction.
>
> The function pdegrad can be used to calculate the gradient of the solution at the
> element centroids.
> http://www.mathworks.com/help/pde/ug/pdegrad.html?searchHighlight=pdegrad
> Then the function pdeprtni can be used to interpolate these centroid values back
> to the nodes.
> http://www.mathworks.com/help/pde/ug/pdeprtni.html
>
> Using these gradient values in the boundary conditions will require you to write your
> own boundary condition function, referred to as a "boundary file" in the PDE
> Toolbox documentation.
> http://www.mathworks.com/help/pde/ug/pdebound.html
>
> This documentation page has some examples of how to write such a function.
> http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
>
> Bill

Subject: pde toolbox

From: Sashankh Rao

Date: 16 Mar, 2013 17:10:07

Message: 4 of 14

Hi Bill,

There is a follow up question to the one listed below. I am using the following method to solve my elliptic problem:

I create a geometry 'g'.
I then mesh it: [p,e,t] = initmesh(g);
Then I create my boundary matrix using [Q,G,H,R] = pdebound(p2,e2);
I then assemble other matrices using [K,M,F] = assema(p,t,c,a,f);
Finally I solve the problem using u = assempde(K,M,F,Q,G,H,R);

I get the following error from assempde
------------------------------------------
??? Error using ==> plus
Matrix dimensions must agree.

Error in ==> assempde at 245
KK=K+M+Q;
------------------------------------------
As per the link below the size of the Q matrix in the boundary file is (N^2 ne) which for a one-dimensional system is (1 ne), where ne is the number of edges in the mesh.

http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html

However the size for the K and M matrices is (Np Np) where Np is the number of nodes in the matrix.

So I see that the K matrix and Q matrix are not of the same dimensions and hence the error. I am not able to figure out how to fix this problem. Any help will be appreciated very much.

Thank you.

"Bill Greene" wrote in message <khfgev$sgb$1@newscl01ah.mathworks.com>...
> Hi,
>
> "Sashankh Rao" wrote in message <khdu9o$j3c$1@newscl01ah.mathworks.com>...
> > Using the Matlab pde toolbox I obtain a solution to the Poisson equation for a given geometry using dirichlet boundary conditions. First, I want to determine the gradient at all the boundary nodes. Is this possible using the toolbox? Second, I want to use these gradient values as an input boundary condition for the same boundary to solve a different equation (same geometry). Is this possible to do using the toolbox? Thanks.
>
> Yes, this is definitely possible. I'll try to point you in the right direction.
>
> The function pdegrad can be used to calculate the gradient of the solution at the
> element centroids.
> http://www.mathworks.com/help/pde/ug/pdegrad.html?searchHighlight=pdegrad
> Then the function pdeprtni can be used to interpolate these centroid values back
> to the nodes.
> http://www.mathworks.com/help/pde/ug/pdeprtni.html
>
> Using these gradient values in the boundary conditions will require you to write your
> own boundary condition function, referred to as a "boundary file" in the PDE
> Toolbox documentation.
> http://www.mathworks.com/help/pde/ug/pdebound.html
>
> This documentation page has some examples of how to write such a function.
> http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
>
> Bill

Subject: pde toolbox

From: Bill Greene

Date: 16 Mar, 2013 21:40:19

Message: 5 of 14

"Sashankh Rao" wrote in message <ki291f$56f$1@newscl01ah.mathworks.com>...

> I then mesh it: [p,e,t] = initmesh(g);
> Then I create my boundary matrix using [Q,G,H,R] = pdebound(p2,e2);
> I then assemble other matrices using [K,M,F] = assema(p,t,c,a,f);
> Finally I solve the problem using u = assempde(K,M,F,Q,G,H,R);


Ah, I see that the documentation page I pointed you to doesn't
show you what to do with the pdebound function once you've created it--
sorry.

That function is actually called by the PDE Toolbox routines-- not by you.
If you don't want to do anything fancy, but simply want a solution, do this:

b=@pdebound; % the "pdebound" function can have any name
% also define p,e,t,c,a,f
u=assempde(b,p,e,t,c,a,f);

Regards,

Bill
> ------------------------------------------
> As per the link below the size of the Q matrix in the boundary file is (N^2 ne) which for a one-dimensional system is (1 ne), where ne is the number of edges in the mesh.
>
> http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
>
> However the size for the K and M matrices is (Np Np) where Np is the number of nodes in the matrix.
>
> So I see that the K matrix and Q matrix are not of the same dimensions and hence the error. I am not able to figure out how to fix this problem. Any help will be appreciated very much.
>
> Thank you.
>
> "Bill Greene" wrote in message <khfgev$sgb$1@newscl01ah.mathworks.com>...
> > Hi,
> >
> > "Sashankh Rao" wrote in message <khdu9o$j3c$1@newscl01ah.mathworks.com>...
> > > Using the Matlab pde toolbox I obtain a solution to the Poisson equation for a given geometry using dirichlet boundary conditions. First, I want to determine the gradient at all the boundary nodes. Is this possible using the toolbox? Second, I want to use these gradient values as an input boundary condition for the same boundary to solve a different equation (same geometry). Is this possible to do using the toolbox? Thanks.
> >
> > Yes, this is definitely possible. I'll try to point you in the right direction.
> >
> > The function pdegrad can be used to calculate the gradient of the solution at the
> > element centroids.
> > http://www.mathworks.com/help/pde/ug/pdegrad.html?searchHighlight=pdegrad
> > Then the function pdeprtni can be used to interpolate these centroid values back
> > to the nodes.
> > http://www.mathworks.com/help/pde/ug/pdeprtni.html
> >
> > Using these gradient values in the boundary conditions will require you to write your
> > own boundary condition function, referred to as a "boundary file" in the PDE
> > Toolbox documentation.
> > http://www.mathworks.com/help/pde/ug/pdebound.html
> >
> > This documentation page has some examples of how to write such a function.
> > http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
> >
> > Bill

Subject: pde toolbox

From: Sashankh Rao

Date: 17 Mar, 2013 14:28:08

Message: 6 of 14

Hi Bill,

You suggestion worked out perfectly. Thank you very much.

Sai

"Bill Greene" wrote in message <ki2os3$gna$1@newscl01ah.mathworks.com>...
> "Sashankh Rao" wrote in message <ki291f$56f$1@newscl01ah.mathworks.com>...
>
> > I then mesh it: [p,e,t] = initmesh(g);
> > Then I create my boundary matrix using [Q,G,H,R] = pdebound(p2,e2);
> > I then assemble other matrices using [K,M,F] = assema(p,t,c,a,f);
> > Finally I solve the problem using u = assempde(K,M,F,Q,G,H,R);
>
>
> Ah, I see that the documentation page I pointed you to doesn't
> show you what to do with the pdebound function once you've created it--
> sorry.
>
> That function is actually called by the PDE Toolbox routines-- not by you.
> If you don't want to do anything fancy, but simply want a solution, do this:
>
> b=@pdebound; % the "pdebound" function can have any name
> % also define p,e,t,c,a,f
> u=assempde(b,p,e,t,c,a,f);
>
> Regards,
>
> Bill
> > ------------------------------------------
> > As per the link below the size of the Q matrix in the boundary file is (N^2 ne) which for a one-dimensional system is (1 ne), where ne is the number of edges in the mesh.
> >
> > http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
> >
> > However the size for the K and M matrices is (Np Np) where Np is the number of nodes in the matrix.
> >
> > So I see that the K matrix and Q matrix are not of the same dimensions and hence the error. I am not able to figure out how to fix this problem. Any help will be appreciated very much.
> >
> > Thank you.
> >
> > "Bill Greene" wrote in message <khfgev$sgb$1@newscl01ah.mathworks.com>...
> > > Hi,
> > >
> > > "Sashankh Rao" wrote in message <khdu9o$j3c$1@newscl01ah.mathworks.com>...
> > > > Using the Matlab pde toolbox I obtain a solution to the Poisson equation for a given geometry using dirichlet boundary conditions. First, I want to determine the gradient at all the boundary nodes. Is this possible using the toolbox? Second, I want to use these gradient values as an input boundary condition for the same boundary to solve a different equation (same geometry). Is this possible to do using the toolbox? Thanks.
> > >
> > > Yes, this is definitely possible. I'll try to point you in the right direction.
> > >
> > > The function pdegrad can be used to calculate the gradient of the solution at the
> > > element centroids.
> > > http://www.mathworks.com/help/pde/ug/pdegrad.html?searchHighlight=pdegrad
> > > Then the function pdeprtni can be used to interpolate these centroid values back
> > > to the nodes.
> > > http://www.mathworks.com/help/pde/ug/pdeprtni.html
> > >
> > > Using these gradient values in the boundary conditions will require you to write your
> > > own boundary condition function, referred to as a "boundary file" in the PDE
> > > Toolbox documentation.
> > > http://www.mathworks.com/help/pde/ug/pdebound.html
> > >
> > > This documentation page has some examples of how to write such a function.
> > > http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
> > >
> > > Bill

Subject: pde toolbox

From: Sashankh Rao

Date: 25 Mar, 2013 18:06:06

Message: 7 of 14

"Bill Greene" wrote in message <ki2os3$gna$1@newscl01ah.mathworks.com>...
> "Sashankh Rao" wrote in message <ki291f$56f$1@newscl01ah.mathworks.com>...
>
> > I then mesh it: [p,e,t] = initmesh(g);
> > Then I create my boundary matrix using [Q,G,H,R] = pdebound(p2,e2);
> > I then assemble other matrices using [K,M,F] = assema(p,t,c,a,f);
> > Finally I solve the problem using u = assempde(K,M,F,Q,G,H,R);
>
>
> Ah, I see that the documentation page I pointed you to doesn't
> show you what to do with the pdebound function once you've created it--
> sorry.
>
> That function is actually called by the PDE Toolbox routines-- not by you.
> If you don't want to do anything fancy, but simply want a solution, do this:
>
> b=@pdebound; % the "pdebound" function can have any name
> % also define p,e,t,c,a,f
> u=assempde(b,p,e,t,c,a,f);
>
> Regards,
>
> Bill
> > ------------------------------------------
> > As per the link below the size of the Q matrix in the boundary file is (N^2 ne) which for a one-dimensional system is (1 ne), where ne is the number of edges in the mesh.
> >
> > http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
> >
> > However the size for the K and M matrices is (Np Np) where Np is the number of nodes in the matrix.
> >
> > So I see that the K matrix and Q matrix are not of the same dimensions and hence the error. I am not able to figure out how to fix this problem. Any help will be appreciated very much.
> >
> > Thank you.
> >
> > "Bill Greene" wrote in message <khfgev$sgb$1@newscl01ah.mathworks.com>...
> > > Hi,
> > >
> > > "Sashankh Rao" wrote in message <khdu9o$j3c$1@newscl01ah.mathworks.com>...
> > > > Using the Matlab pde toolbox I obtain a solution to the Poisson equation for a given geometry using dirichlet boundary conditions. First, I want to determine the gradient at all the boundary nodes. Is this possible using the toolbox? Second, I want to use these gradient values as an input boundary condition for the same boundary to solve a different equation (same geometry). Is this possible to do using the toolbox? Thanks.
> > >
> > > Yes, this is definitely possible. I'll try to point you in the right direction.
> > >
> > > The function pdegrad can be used to calculate the gradient of the solution at the
> > > element centroids.
> > > http://www.mathworks.com/help/pde/ug/pdegrad.html?searchHighlight=pdegrad
> > > Then the function pdeprtni can be used to interpolate these centroid values back
> > > to the nodes.
> > > http://www.mathworks.com/help/pde/ug/pdeprtni.html
> > >
> > > Using these gradient values in the boundary conditions will require you to write your
> > > own boundary condition function, referred to as a "boundary file" in the PDE
> > > Toolbox documentation.
> > > http://www.mathworks.com/help/pde/ug/pdebound.html
> > >
> > > This documentation page has some examples of how to write such a function.
> > > http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
> > >
> > > Bill

Hi Bill,

I have another question related to the above thread.

I am trying to impose the Neumann condition at nodes on the boundary. To do this I need to pass additional information to pdebound as shown below.

function [qmatrix,gmatrix,hmatrix,rmatrix] = pdebound2(p,e,u,time,u2bn,loc)

where u2bn and loc are the additional data. However, I get the following error in trying to do so:

Input argument "u2bn" is undefined.
Error in ==> pdebound2 at 13

Looks like pdebound will not accept additional data. I am using

b = @pdebound;

to assemble my boundary matrix.

Thanks for taking time to help me. Really appreciate it.

Sashankh

Subject: pde toolbox

From: Sashankh Rao

Date: 25 Mar, 2013 18:41:17

Message: 8 of 14

"Sashankh Rao" wrote in message <kiq3me$m50$1@newscl01ah.mathworks.com>...
> "Bill Greene" wrote in message <ki2os3$gna$1@newscl01ah.mathworks.com>...
> > "Sashankh Rao" wrote in message <ki291f$56f$1@newscl01ah.mathworks.com>...
> >
> > > I then mesh it: [p,e,t] = initmesh(g);
> > > Then I create my boundary matrix using [Q,G,H,R] = pdebound(p2,e2);
> > > I then assemble other matrices using [K,M,F] = assema(p,t,c,a,f);
> > > Finally I solve the problem using u = assempde(K,M,F,Q,G,H,R);
> >
> >
> > Ah, I see that the documentation page I pointed you to doesn't
> > show you what to do with the pdebound function once you've created it--
> > sorry.
> >
> > That function is actually called by the PDE Toolbox routines-- not by you.
> > If you don't want to do anything fancy, but simply want a solution, do this:
> >
> > b=@pdebound; % the "pdebound" function can have any name
> > % also define p,e,t,c,a,f
> > u=assempde(b,p,e,t,c,a,f);
> >
> > Regards,
> >
> > Bill
> > > ------------------------------------------
> > > As per the link below the size of the Q matrix in the boundary file is (N^2 ne) which for a one-dimensional system is (1 ne), where ne is the number of edges in the mesh.
> > >
> > > http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
> > >
> > > However the size for the K and M matrices is (Np Np) where Np is the number of nodes in the matrix.
> > >
> > > So I see that the K matrix and Q matrix are not of the same dimensions and hence the error. I am not able to figure out how to fix this problem. Any help will be appreciated very much.
> > >
> > > Thank you.
> > >
> > > "Bill Greene" wrote in message <khfgev$sgb$1@newscl01ah.mathworks.com>...
> > > > Hi,
> > > >
> > > > "Sashankh Rao" wrote in message <khdu9o$j3c$1@newscl01ah.mathworks.com>...
> > > > > Using the Matlab pde toolbox I obtain a solution to the Poisson equation for a given geometry using dirichlet boundary conditions. First, I want to determine the gradient at all the boundary nodes. Is this possible using the toolbox? Second, I want to use these gradient values as an input boundary condition for the same boundary to solve a different equation (same geometry). Is this possible to do using the toolbox? Thanks.
> > > >
> > > > Yes, this is definitely possible. I'll try to point you in the right direction.
> > > >
> > > > The function pdegrad can be used to calculate the gradient of the solution at the
> > > > element centroids.
> > > > http://www.mathworks.com/help/pde/ug/pdegrad.html?searchHighlight=pdegrad
> > > > Then the function pdeprtni can be used to interpolate these centroid values back
> > > > to the nodes.
> > > > http://www.mathworks.com/help/pde/ug/pdeprtni.html
> > > >
> > > > Using these gradient values in the boundary conditions will require you to write your
> > > > own boundary condition function, referred to as a "boundary file" in the PDE
> > > > Toolbox documentation.
> > > > http://www.mathworks.com/help/pde/ug/pdebound.html
> > > >
> > > > This documentation page has some examples of how to write such a function.
> > > > http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
> > > >
> > > > Bill
>
> Hi Bill,
>
> I have another question related to the above thread.
>
> I am trying to impose the Neumann condition at nodes on the boundary. To do this I need to pass additional information to pdebound as shown below.
>
> function [qmatrix,gmatrix,hmatrix,rmatrix] = pdebound2(p,e,u,time,u2bn,loc)
>
> where u2bn and loc are the additional data. However, I get the following error in trying to do so:
>
> Input argument "u2bn" is undefined.
> Error in ==> pdebound2 at 13
>
> Looks like pdebound will not accept additional data. I am using
>
> b = @pdebound;
>
> to assemble my boundary matrix.
>
> Thanks for taking time to help me. Really appreciate it.
>
> Sashankh

Hi Bill,

I think I figured this out. I declared my additional data as global variables. Thanks.

Sashankh

Subject: pde toolbox

From: Alan_Weiss

Date: 28 Mar, 2013 12:27:24

Message: 9 of 14

On 3/25/2013 2:41 PM, Sashankh Rao wrote:
> "Sashankh Rao" wrote in message
> <kiq3me$m50$1@newscl01ah.mathworks.com>...
>> "Bill Greene" wrote in message
>> <ki2os3$gna$1@newscl01ah.mathworks.com>...
>> > "Sashankh Rao" wrote in message
>> <ki291f$56f$1@newscl01ah.mathworks.com>...
>> > > > I then mesh it: [p,e,t] = initmesh(g);
>> > > Then I create my boundary matrix using [Q,G,H,R] = pdebound(p2,e2);
>> > > I then assemble other matrices using [K,M,F] = assema(p,t,c,a,f);
>> > > Finally I solve the problem using u = assempde(K,M,F,Q,G,H,R);
>> > > > Ah, I see that the documentation page I pointed you to doesn't
>> > show you what to do with the pdebound function once you've created
>> it--
>> > sorry.
>> > > That function is actually called by the PDE Toolbox routines--
>> not by you.
>> > If you don't want to do anything fancy, but simply want a solution,
>> do this:
>> > > b=@pdebound; % the "pdebound" function can have any name
>> > % also define p,e,t,c,a,f
>> > u=assempde(b,p,e,t,c,a,f);
>> > > Regards,
>> > > Bill
>> > > ------------------------------------------
>> > > As per the link below the size of the Q matrix in the boundary
>> file is (N^2 ne) which for a one-dimensional system is (1 ne), where
>> ne is the number of edges in the mesh. > > > >
>> http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
>> > > > > However the size for the K and M matrices is (Np Np) where Np
>> is the number of nodes in the matrix.
>> > > > > So I see that the K matrix and Q matrix are not of the same
>> dimensions and hence the error. I am not able to figure out how to
>> fix this problem. Any help will be appreciated very much.
>> > > > > Thank you.
>> > > > > "Bill Greene" wrote in message
>> <khfgev$sgb$1@newscl01ah.mathworks.com>...
>> > > > Hi,
>> > > > > > > "Sashankh Rao" wrote in message
>> <khdu9o$j3c$1@newscl01ah.mathworks.com>...
>> > > > > Using the Matlab pde toolbox I obtain a solution to the
>> Poisson equation for a given geometry using dirichlet boundary
>> conditions. First, I want to determine the gradient at all the
>> boundary nodes. Is this possible using the toolbox? Second, I want to
>> use these gradient values as an input boundary condition for the same
>> boundary to solve a different equation (same geometry). Is this
>> possible to do using the toolbox? Thanks.
>> > > > > > > Yes, this is definitely possible. I'll try to point you
>> in the right direction.
>> > > > > > > The function pdegrad can be used to calculate the
>> gradient of the solution at the
>> > > > element centroids.
>> > > >
>> http://www.mathworks.com/help/pde/ug/pdegrad.html?searchHighlight=pdegrad
>> > > > Then the function pdeprtni can be used to interpolate these
>> centroid values back
>> > > > to the nodes.
>> > > > http://www.mathworks.com/help/pde/ug/pdeprtni.html
>> > > > > > > Using these gradient values in the boundary conditions
>> will require you to write your
>> > > > own boundary condition function, referred to as a "boundary
>> file" in the PDE
>> > > > Toolbox documentation.
>> > > > http://www.mathworks.com/help/pde/ug/pdebound.html
>> > > > > > > This documentation page has some examples of how to write
>> such a function.
>> > > >
>> http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
>> > > > > > > Bill
>>
>> Hi Bill,
>>
>> I have another question related to the above thread.
>> I am trying to impose the Neumann condition at nodes on the boundary.
>> To do this I need to pass additional information to pdebound as shown
>> below.
>>
>> function [qmatrix,gmatrix,hmatrix,rmatrix] =
>> pdebound2(p,e,u,time,u2bn,loc)
>>
>> where u2bn and loc are the additional data. However, I get the
>> following error in trying to do so:
>>
>> Input argument "u2bn" is undefined.
>> Error in ==> pdebound2 at 13
>>
>> Looks like pdebound will not accept additional data. I am using
>> b = @pdebound;
>>
>> to assemble my boundary matrix.
>>
>> Thanks for taking time to help me. Really appreciate it.
>>
>> Sashankh
>
> Hi Bill,
>
> I think I figured this out. I declared my additional data as global
> variables. Thanks.
>
> Sashankh

I'm glad that global variables work for you. But there are other ways of
passing parameters that are less rigid. See, for example,
http://www.mathworks.com/help/optim/ug/passing-extra-parameters.html#bskkr4z

Alan Weiss
MATLAB mathematical toolbox documentation

Subject: pde toolbox

From: Sashankh Rao

Date: 22 Apr, 2013 22:13:08

Message: 10 of 14

Alan_Weiss <aweiss@mathworks.com> wrote in message <kj1cvc$fop$1@newscl01ah.mathworks.com>...
> On 3/25/2013 2:41 PM, Sashankh Rao wrote:
> > "Sashankh Rao" wrote in message
> > <kiq3me$m50$1@newscl01ah.mathworks.com>...
> >> "Bill Greene" wrote in message
> >> <ki2os3$gna$1@newscl01ah.mathworks.com>...
> >> > "Sashankh Rao" wrote in message
> >> <ki291f$56f$1@newscl01ah.mathworks.com>...
> >> > > > I then mesh it: [p,e,t] = initmesh(g);
> >> > > Then I create my boundary matrix using [Q,G,H,R] = pdebound(p2,e2);
> >> > > I then assemble other matrices using [K,M,F] = assema(p,t,c,a,f);
> >> > > Finally I solve the problem using u = assempde(K,M,F,Q,G,H,R);
> >> > > > Ah, I see that the documentation page I pointed you to doesn't
> >> > show you what to do with the pdebound function once you've created
> >> it--
> >> > sorry.
> >> > > That function is actually called by the PDE Toolbox routines--
> >> not by you.
> >> > If you don't want to do anything fancy, but simply want a solution,
> >> do this:
> >> > > b=@pdebound; % the "pdebound" function can have any name
> >> > % also define p,e,t,c,a,f
> >> > u=assempde(b,p,e,t,c,a,f);
> >> > > Regards,
> >> > > Bill
> >> > > ------------------------------------------
> >> > > As per the link below the size of the Q matrix in the boundary
> >> file is (N^2 ne) which for a one-dimensional system is (1 ne), where
> >> ne is the number of edges in the mesh. > > > >
> >> http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
> >> > > > > However the size for the K and M matrices is (Np Np) where Np
> >> is the number of nodes in the matrix.
> >> > > > > So I see that the K matrix and Q matrix are not of the same
> >> dimensions and hence the error. I am not able to figure out how to
> >> fix this problem. Any help will be appreciated very much.
> >> > > > > Thank you.
> >> > > > > "Bill Greene" wrote in message
> >> <khfgev$sgb$1@newscl01ah.mathworks.com>...
> >> > > > Hi,
> >> > > > > > > "Sashankh Rao" wrote in message
> >> <khdu9o$j3c$1@newscl01ah.mathworks.com>...
> >> > > > > Using the Matlab pde toolbox I obtain a solution to the
> >> Poisson equation for a given geometry using dirichlet boundary
> >> conditions. First, I want to determine the gradient at all the
> >> boundary nodes. Is this possible using the toolbox? Second, I want to
> >> use these gradient values as an input boundary condition for the same
> >> boundary to solve a different equation (same geometry). Is this
> >> possible to do using the toolbox? Thanks.
> >> > > > > > > Yes, this is definitely possible. I'll try to point you
> >> in the right direction.
> >> > > > > > > The function pdegrad can be used to calculate the
> >> gradient of the solution at the
> >> > > > element centroids.
> >> > > >
> >> http://www.mathworks.com/help/pde/ug/pdegrad.html?searchHighlight=pdegrad
> >> > > > Then the function pdeprtni can be used to interpolate these
> >> centroid values back
> >> > > > to the nodes.
> >> > > > http://www.mathworks.com/help/pde/ug/pdeprtni.html
> >> > > > > > > Using these gradient values in the boundary conditions
> >> will require you to write your
> >> > > > own boundary condition function, referred to as a "boundary
> >> file" in the PDE
> >> > > > Toolbox documentation.
> >> > > > http://www.mathworks.com/help/pde/ug/pdebound.html
> >> > > > > > > This documentation page has some examples of how to write
> >> such a function.
> >> > > >
> >> http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
> >> > > > > > > Bill
> >>
> >> Hi Bill,
> >>
> >> I have another question related to the above thread.
> >> I am trying to impose the Neumann condition at nodes on the boundary.
> >> To do this I need to pass additional information to pdebound as shown
> >> below.
> >>
> >> function [qmatrix,gmatrix,hmatrix,rmatrix] =
> >> pdebound2(p,e,u,time,u2bn,loc)
> >>
> >> where u2bn and loc are the additional data. However, I get the
> >> following error in trying to do so:
> >>
> >> Input argument "u2bn" is undefined.
> >> Error in ==> pdebound2 at 13
> >>
> >> Looks like pdebound will not accept additional data. I am using
> >> b = @pdebound;
> >>
> >> to assemble my boundary matrix.
> >>
> >> Thanks for taking time to help me. Really appreciate it.
> >>
> >> Sashankh
> >
> > Hi Bill,
> >
> > I think I figured this out. I declared my additional data as global
> > variables. Thanks.
> >
> > Sashankh
>
> I'm glad that global variables work for you. But there are other ways of
> passing parameters that are less rigid. See, for example,
> http://www.mathworks.com/help/optim/ug/passing-extra-parameters.html#bskkr4z
>
> Alan Weiss
> MATLAB mathematical toolbox documentation

Hi Alan,

I just saw your message. Thanks for the tip. I have another question for you and Bill.

I have got my program to run correctly. However, I seem to require a highly refined mesh to arrive at the desired accuracy. Now I am looking to optimize it. Is it possible to use quadratic finite elements (triangular) in the pde toolbox instead of the linear elements (triangular) which it uses by default?

Thanks for your help,
Sashankh

Subject: pde toolbox

From: Alan_Weiss

Date: 23 Apr, 2013 12:13:09

Message: 11 of 14

On 4/22/2013 6:13 PM, Sashankh Rao wrote:
> Alan_Weiss <aweiss@mathworks.com> wrote in message
> <kj1cvc$fop$1@newscl01ah.mathworks.com>...
>> On 3/25/2013 2:41 PM, Sashankh Rao wrote:
>> > "Sashankh Rao" wrote in message >
>> <kiq3me$m50$1@newscl01ah.mathworks.com>...
>> >> "Bill Greene" wrote in message >>
>> <ki2os3$gna$1@newscl01ah.mathworks.com>...
>> >> > "Sashankh Rao" wrote in message >>
>> <ki291f$56f$1@newscl01ah.mathworks.com>...
>> >> > > > I then mesh it: [p,e,t] = initmesh(g);
>> >> > > Then I create my boundary matrix using [Q,G,H,R] =
>> pdebound(p2,e2);
>> >> > > I then assemble other matrices using [K,M,F] = assema(p,t,c,a,f);
>> >> > > Finally I solve the problem using u = assempde(K,M,F,Q,G,H,R);
>> >> > > > Ah, I see that the documentation page I pointed you to
>> doesn't >> > show you what to do with the pdebound function once
>> you've created >> it--
>> >> > sorry.
>> >> > > That function is actually called by the PDE Toolbox routines--
>> >> not by you.
>> >> > If you don't want to do anything fancy, but simply want a
>> solution, >> do this:
>> >> > > b=@pdebound; % the "pdebound" function can have any name
>> >> > % also define p,e,t,c,a,f
>> >> > u=assempde(b,p,e,t,c,a,f);
>> >> > > Regards,
>> >> > > Bill
>> >> > > ------------------------------------------
>> >> > > As per the link below the size of the Q matrix in the boundary
>> >> file is (N^2 ne) which for a one-dimensional system is (1 ne),
>> where >> ne is the number of edges in the mesh. > > > > >>
>> http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
>> >> > > > > However the size for the K and M matrices is (Np Np) where
>> Np >> is the number of nodes in the matrix.
>> >> > > > > So I see that the K matrix and Q matrix are not of the
>> same >> dimensions and hence the error. I am not able to figure out
>> how to >> fix this problem. Any help will be appreciated very much.
>> >> > > > > Thank you.
>> >> > > > > "Bill Greene" wrote in message >>
>> <khfgev$sgb$1@newscl01ah.mathworks.com>...
>> >> > > > Hi,
>> >> > > > > > > "Sashankh Rao" wrote in message >>
>> <khdu9o$j3c$1@newscl01ah.mathworks.com>...
>> >> > > > > Using the Matlab pde toolbox I obtain a solution to the >>
>> Poisson equation for a given geometry using dirichlet boundary >>
>> conditions. First, I want to determine the gradient at all the >>
>> boundary nodes. Is this possible using the toolbox? Second, I want to
>> >> use these gradient values as an input boundary condition for the
>> same >> boundary to solve a different equation (same geometry). Is
>> this >> possible to do using the toolbox? Thanks.
>> >> > > > > > > Yes, this is definitely possible. I'll try to point
>> you >> in the right direction.
>> >> > > > > > > The function pdegrad can be used to calculate the >>
>> gradient of the solution at the
>> >> > > > element centroids.
>> >> > > > >>
>> http://www.mathworks.com/help/pde/ug/pdegrad.html?searchHighlight=pdegrad
>> >> > > > Then the function pdeprtni can be used to interpolate these
>> >> centroid values back
>> >> > > > to the nodes.
>> >> > > > http://www.mathworks.com/help/pde/ug/pdeprtni.html
>> >> > > > > > > Using these gradient values in the boundary conditions
>> >> will require you to write your
>> >> > > > own boundary condition function, referred to as a "boundary
>> >> file" in the PDE
>> >> > > > Toolbox documentation.
>> >> > > > http://www.mathworks.com/help/pde/ug/pdebound.html
>> >> > > > > > > This documentation page has some examples of how to
>> write >> such a function.
>> >> > > > >>
>> http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
>> >> > > > > > > Bill
>> >>
>> >> Hi Bill,
>> >>
>> >> I have another question related to the above thread.
>> >> I am trying to impose the Neumann condition at nodes on the
>> boundary. >> To do this I need to pass additional information to
>> pdebound as shown >> below.
>> >>
>> >> function [qmatrix,gmatrix,hmatrix,rmatrix] = >>
>> pdebound2(p,e,u,time,u2bn,loc)
>> >>
>> >> where u2bn and loc are the additional data. However, I get the >>
>> following error in trying to do so:
>> >>
>> >> Input argument "u2bn" is undefined.
>> >> Error in ==> pdebound2 at 13
>> >>
>> >> Looks like pdebound will not accept additional data. I am using
>> >> b = @pdebound;
>> >>
>> >> to assemble my boundary matrix.
>> >>
>> >> Thanks for taking time to help me. Really appreciate it.
>> >>
>> >> Sashankh
>> >
>> > Hi Bill,
>> >
>> > I think I figured this out. I declared my additional data as global
>> > variables. Thanks.
>> >
>> > Sashankh
>>
>> I'm glad that global variables work for you. But there are other ways
>> of passing parameters that are less rigid. See, for example,
>> http://www.mathworks.com/help/optim/ug/passing-extra-parameters.html#bskkr4z
>>
>>
>> Alan Weiss
>> MATLAB mathematical toolbox documentation
>
> Hi Alan,
>
> I just saw your message. Thanks for the tip. I have another question
> for you and Bill.
>
> I have got my program to run correctly. However, I seem to require a
> highly refined mesh to arrive at the desired accuracy. Now I am
> looking to optimize it. Is it possible to use quadratic finite
> elements (triangular) in the pde toolbox instead of the linear
> elements (triangular) which it uses by default?
> Thanks for your help,
> Sashankh

As far as I know, you cannot use quadratic finite elements.

Have you tried jiggling the mesh a few times? That often helps give
better accuracy. And, if you have MATLAB R2013a, you can try the new
meshing algorithm, though I have no idea whether that will help.

Good luck,

Alan Weiss
MATLAB mathematical toolbox documentation

Subject: pde toolbox

From: Sashankh Rao

Date: 23 Apr, 2013 16:21:09

Message: 12 of 14

Alan_Weiss <aweiss@mathworks.com> wrote in message <kl5tsl$7hn$1@newscl01ah.mathworks.com>...
> On 4/22/2013 6:13 PM, Sashankh Rao wrote:
> > Alan_Weiss <aweiss@mathworks.com> wrote in message
> > <kj1cvc$fop$1@newscl01ah.mathworks.com>...
> >> On 3/25/2013 2:41 PM, Sashankh Rao wrote:
> >> > "Sashankh Rao" wrote in message >
> >> <kiq3me$m50$1@newscl01ah.mathworks.com>...
> >> >> "Bill Greene" wrote in message >>
> >> <ki2os3$gna$1@newscl01ah.mathworks.com>...
> >> >> > "Sashankh Rao" wrote in message >>
> >> <ki291f$56f$1@newscl01ah.mathworks.com>...
> >> >> > > > I then mesh it: [p,e,t] = initmesh(g);
> >> >> > > Then I create my boundary matrix using [Q,G,H,R] =
> >> pdebound(p2,e2);
> >> >> > > I then assemble other matrices using [K,M,F] = assema(p,t,c,a,f);
> >> >> > > Finally I solve the problem using u = assempde(K,M,F,Q,G,H,R);
> >> >> > > > Ah, I see that the documentation page I pointed you to
> >> doesn't >> > show you what to do with the pdebound function once
> >> you've created >> it--
> >> >> > sorry.
> >> >> > > That function is actually called by the PDE Toolbox routines--
> >> >> not by you.
> >> >> > If you don't want to do anything fancy, but simply want a
> >> solution, >> do this:
> >> >> > > b=@pdebound; % the "pdebound" function can have any name
> >> >> > % also define p,e,t,c,a,f
> >> >> > u=assempde(b,p,e,t,c,a,f);
> >> >> > > Regards,
> >> >> > > Bill
> >> >> > > ------------------------------------------
> >> >> > > As per the link below the size of the Q matrix in the boundary
> >> >> file is (N^2 ne) which for a one-dimensional system is (1 ne),
> >> where >> ne is the number of edges in the mesh. > > > > >>
> >> http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
> >> >> > > > > However the size for the K and M matrices is (Np Np) where
> >> Np >> is the number of nodes in the matrix.
> >> >> > > > > So I see that the K matrix and Q matrix are not of the
> >> same >> dimensions and hence the error. I am not able to figure out
> >> how to >> fix this problem. Any help will be appreciated very much.
> >> >> > > > > Thank you.
> >> >> > > > > "Bill Greene" wrote in message >>
> >> <khfgev$sgb$1@newscl01ah.mathworks.com>...
> >> >> > > > Hi,
> >> >> > > > > > > "Sashankh Rao" wrote in message >>
> >> <khdu9o$j3c$1@newscl01ah.mathworks.com>...
> >> >> > > > > Using the Matlab pde toolbox I obtain a solution to the >>
> >> Poisson equation for a given geometry using dirichlet boundary >>
> >> conditions. First, I want to determine the gradient at all the >>
> >> boundary nodes. Is this possible using the toolbox? Second, I want to
> >> >> use these gradient values as an input boundary condition for the
> >> same >> boundary to solve a different equation (same geometry). Is
> >> this >> possible to do using the toolbox? Thanks.
> >> >> > > > > > > Yes, this is definitely possible. I'll try to point
> >> you >> in the right direction.
> >> >> > > > > > > The function pdegrad can be used to calculate the >>
> >> gradient of the solution at the
> >> >> > > > element centroids.
> >> >> > > > >>
> >> http://www.mathworks.com/help/pde/ug/pdegrad.html?searchHighlight=pdegrad
> >> >> > > > Then the function pdeprtni can be used to interpolate these
> >> >> centroid values back
> >> >> > > > to the nodes.
> >> >> > > > http://www.mathworks.com/help/pde/ug/pdeprtni.html
> >> >> > > > > > > Using these gradient values in the boundary conditions
> >> >> will require you to write your
> >> >> > > > own boundary condition function, referred to as a "boundary
> >> >> file" in the PDE
> >> >> > > > Toolbox documentation.
> >> >> > > > http://www.mathworks.com/help/pde/ug/pdebound.html
> >> >> > > > > > > This documentation page has some examples of how to
> >> write >> such a function.
> >> >> > > > >>
> >> http://www.mathworks.com/help/pde/ug/boundary-conditions-for-scalar-pde.html
> >> >> > > > > > > Bill
> >> >>
> >> >> Hi Bill,
> >> >>
> >> >> I have another question related to the above thread.
> >> >> I am trying to impose the Neumann condition at nodes on the
> >> boundary. >> To do this I need to pass additional information to
> >> pdebound as shown >> below.
> >> >>
> >> >> function [qmatrix,gmatrix,hmatrix,rmatrix] = >>
> >> pdebound2(p,e,u,time,u2bn,loc)
> >> >>
> >> >> where u2bn and loc are the additional data. However, I get the >>
> >> following error in trying to do so:
> >> >>
> >> >> Input argument "u2bn" is undefined.
> >> >> Error in ==> pdebound2 at 13
> >> >>
> >> >> Looks like pdebound will not accept additional data. I am using
> >> >> b = @pdebound;
> >> >>
> >> >> to assemble my boundary matrix.
> >> >>
> >> >> Thanks for taking time to help me. Really appreciate it.
> >> >>
> >> >> Sashankh
> >> >
> >> > Hi Bill,
> >> >
> >> > I think I figured this out. I declared my additional data as global
> >> > variables. Thanks.
> >> >
> >> > Sashankh
> >>
> >> I'm glad that global variables work for you. But there are other ways
> >> of passing parameters that are less rigid. See, for example,
> >> http://www.mathworks.com/help/optim/ug/passing-extra-parameters.html#bskkr4z
> >>
> >>
> >> Alan Weiss
> >> MATLAB mathematical toolbox documentation
> >
> > Hi Alan,
> >
> > I just saw your message. Thanks for the tip. I have another question
> > for you and Bill.
> >
> > I have got my program to run correctly. However, I seem to require a
> > highly refined mesh to arrive at the desired accuracy. Now I am
> > looking to optimize it. Is it possible to use quadratic finite
> > elements (triangular) in the pde toolbox instead of the linear
> > elements (triangular) which it uses by default?
> > Thanks for your help,
> > Sashankh
>
> As far as I know, you cannot use quadratic finite elements.
>
> Have you tried jiggling the mesh a few times? That often helps give
> better accuracy. And, if you have MATLAB R2013a, you can try the new
> meshing algorithm, though I have no idea whether that will help.
>
> Good luck,
>
> Alan Weiss
> MATLAB mathematical toolbox documentation

Hi Alan,

I did try to jiggle the mesh a few times. Currently, the global convergence rate of my solution is first order. Hence, I need to refine my mesh a number of times before I can arrive at the desired accuracy. I would like to have second order convergence. Any suggestion as to how I can do this using the pde toolbox? Thanks.

Subject: pde toolbox

From: Bill Greene

Date: 23 Apr, 2013 16:45:11

Message: 13 of 14

>I need to refine my mesh a number of times before I can arrive at the desired accuracy.

I suggest taking a look at the adaptmesh function. It does automatic
h-refinement of the mesh and often yields more accurate solutions with
fewer elements than the assempde function. Its input arguments are very
similar to assempde.

Bill

Subject: pde toolbox

From: Sashankh Rao

Date: 23 Apr, 2013 20:29:08

Message: 14 of 14

"Bill Greene" wrote in message <kl6dqn$1n5$1@newscl01ah.mathworks.com>...
> >I need to refine my mesh a number of times before I can arrive at the desired accuracy.
>
> I suggest taking a look at the adaptmesh function. It does automatic
> h-refinement of the mesh and often yields more accurate solutions with
> fewer elements than the assempde function. Its input arguments are very
> similar to assempde.
>
> Bill

Hi Bill,

Thanks for the input. I realized that the real reason for the loss in accuracy comes from the 'pdegrad' function. It reduces the convergence of my program from second order to first order since it is a part of the iterative scheme that my program uses. Is there a more accurate method to find the gradient? Thanks for your help.

Sashankh

Tags for this Thread

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Contact us