New question #114825 on DOLFIN:
https://answers.launchpad.net/dolfin/+question/114825
I need to make many instances of DirichletBC, but I exactly how many is a user
function. As such, I am using a loop to create my bcs.
for(int j = 0; j < numberCathodes; j++){
cathode = &cathodes[j];
//assemble
CathodeBC(iInit, cathode, phiCBC0);
// create anodic and cathodic boundary condition Functions from
BCs
numRows = PhiCBC0.vector().size();
rows = new dolfin::uint[numRows];
for(dolfin::uint j = 0; j < numRows; j ++)
rows[j] = j;
PhiCBC0.vector().set(phiCBC0, numRows, rows);
delete [] rows;
//Define boundary condition
DirichletBC cbc0(V, PhiCBC0, *cathode);
bcsTEMP.push_back(cbc0);
}
where bcsTEMP is a std::vector<dolfin::DirichletBC>
This does not work, since DirichletBC is abstract and so I can't make it a type
for a vector. Trying to use pointers will obviously not work, since once the
object goes out of scope, it is cleaned up, and I end up following a dangling
pointer to nowhere.
I am going to make my own class called dirichletBC, the only difference being
that I over load the apply() method, since it is the one that is virtual. My
question is which apply() should I use?
Since my VariationalProblem is Laplaces equation with a single bilinear form
and a single linear form ( a(V, V) and L(V) ), I assume that I need to apply
the boundary condition to a matrix and a vector, hence using:
00171 void DirichletBC::apply(GenericMatrix& A, GenericVector& b) const
00172 {
00173 apply(&A, &b, 0);
00174 }
Is that right? Is there something else I need to do to make this work? is there
an easier way to make this work? Do you need more information about my problem?
Thank you for your help.
--
You received this question notification because you are a member of
DOLFIN Team, which is an answer contact for DOLFIN.
_______________________________________________
Mailing list: https://launchpad.net/~dolfin
Post to : [email protected]
Unsubscribe : https://launchpad.net/~dolfin
More help : https://help.launchpad.net/ListHelp