45 mLeftElectrodeArea(0.0),
46 mRightElectrodeArea(0.0)
49 double magnitude, duration;
53 assert(axis_index < DIM);
71 input_flux = magnitude;
72 output_flux = -input_flux;
78 input_flux = magnitude;
82 assert( ! std::isnan(output_flux));
83 assert( output_flux != 0.0);
95 if (fabs((*iter)->CalculateCentroid()[axis_index] - global_min) < 1e-6)
102 if (fabs((*iter)->CalculateCentroid()[axis_index] - global_max) < 1e-6)
121 if (fabs((*iter).rGetLocation()[axis_index]-global_max) < 1e-6)
128 delete p_bc_flux_out;
175 double local_left_area = 0.0;
176 double local_right_area = 0.0;
178 c_vector<double,DIM> weighted_direction;
179 double jacobian_determinant;
181 for (
auto iter = mpMesh->GetBoundaryElementIteratorBegin();
182 iter != mpMesh->GetBoundaryElementIteratorEnd();
185 if (mpMesh->CalculateDesignatedOwnershipOfBoundaryElement((*iter)->GetIndex()))
187 if (fabs((*iter)->CalculateCentroid()[dimensionIndex] - lowerValue) < 1e-6)
189 mpMesh->GetWeightedDirectionForBoundaryElement((*iter)->GetIndex(), weighted_direction, jacobian_determinant);
190 local_left_area += jacobian_determinant;
193 if (fabs((*iter)->CalculateCentroid()[dimensionIndex] - upperValue) < 1e-6)
195 mpMesh->GetWeightedDirectionForBoundaryElement((*iter)->GetIndex(), weighted_direction, jacobian_determinant);
196 local_right_area += jacobian_determinant;
210 local_left_area /= 2.0;
211 local_right_area /= 2.0;
214 int mpi_ret = MPI_Allreduce(&local_left_area, &mLeftElectrodeArea, 1, MPI_DOUBLE, MPI_SUM, PETSC_COMM_WORLD);
216 assert(mpi_ret == MPI_SUCCESS);
218 mpi_ret = MPI_Allreduce(&local_right_area, &mRightElectrodeArea, 1, MPI_DOUBLE, MPI_SUM, PETSC_COMM_WORLD);
219 assert(mpi_ret == MPI_SUCCESS);
221 if (mLeftElectrodeArea != mRightElectrodeArea)
223 EXCEPTION(
"Electrodes have different area");