← Back to team overview

dolfin team mailing list archive

[Question #114825]: DirichletBC virtual methods

 

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.