34 this->recompute_integrals =
true;
39 if (reason == ReceiverBase::ChangeReason::REASON_VALUE) {
41 this->recompute_gain_integrals =
true;
51 BaseT::onGeometryChange(evt);
53 if (evt.
flags() == 0) {
54 auto objects = this->geometry->getObjectsWithRole(
"interface");
55 if (objects.size() > 1) {
56 Solver::writelog(
LOG_WARNING,
"More than one object with 'interface' role: interface not set");
57 }
else if (objects.size() == 1) {
58 setInterfaceOn(objects[0]);
127 bool changed = smooth != value;
129 if (changed) this->invalidate();
137 if (method != transfer_method) this->invalidate();
138 transfer_method = method;
146 bool changed = group_layers != value;
147 group_layers = value;
148 if (changed) this->invalidate();
156 bool changed = max_temp_diff != value;
157 max_temp_diff = value;
158 if (changed) this->invalidate();
166 bool changed = temp_dist != value;
168 if (changed) this->invalidate();
176 bool changed = temp_layer != value;
178 if (changed) this->invalidate();
181 std::string
getId()
const override {
return Solver::getId(); }
190 Solver::initCalculation();
199 if (pos != interface_position) {
201 interface_position = pos;
202 Solver::writelog(
LOG_DEBUG,
"Setting interface at position {:g}um", interface_position);
212 auto boxes = this->geometry->getObjectBoundingBoxes(
object, path);
214 if (interface_position != boxes[0].lower.vert()) {
216 interface_position = boxes[0].lower.vert();
217 Solver::writelog(
LOG_DEBUG,
"Setting interface on an object at position {:g}um", interface_position);
232 if (!transfer) initTransfer(getExpansion(),
false);
233 return transfer->determinant();
244 if (
isnan(glam)) glam = lam;
245 expansion->
gain = inGain(mesh,
real(glam));
248 if (
isnan(glam)) glam = lam;
249 expansion->
epsilons = inEpsilon(mesh, glam);
251 expansion->
carriers = inCarriersConcentration.
hasProvider() ? inCarriersConcentration(CarriersConcentration::MAJORITY, mesh)
316 template <PropagationDirection part = PROPAGATION_TOTAL>
327 template <PropagationDirection part = PROPAGATION_TOTAL>