Public Member Functions | |
FieldComputation (BLCMDfieldexpr *_expr) | |
G4bool | DoesFieldChangeEnergy () const |
void | GetFieldValue (const G4double point[4], G4double *field) const |
Private Attributes | |
BLCMDfieldexpr * | expr |
FieldComputation::FieldComputation | ( | BLCMDfieldexpr * | _expr | ) | [inline] |
void FieldComputation::GetFieldValue | ( | const G4double | point[4], | |
G4double * | field | |||
) | const |
References BLAssert, BLCMDfieldexpr::Br, BLCMDfieldexpr::Bx, BLCMDfieldexpr::By, BLCMDfieldexpr::Bz, BLCMDfieldexpr::checkValidExpr(), BLCMDfieldexpr::Er, BLEvaluator::evaluate(), BLCMDfieldexpr::Ex, expr, BLCMDfieldexpr::Ey, BLCMDfieldexpr::Ez, and BLCMDfieldexpr::radius.
Referenced by BLCMDfieldexpr::maxError().
00513 { 00514 BLEvaluator e; 00515 00516 if(expr->radius > 0.0) { 00517 // using X-Z plane (i.e. Y=0) 00518 BLAssert(fabs(point[1]) < 0.000001); 00519 e.setVariable("r",point[0]); 00520 e.setVariable("z",point[2]); 00521 field[0] = (expr->Br.size()>0 ? e.evaluate(expr->Br.c_str()) : 00522 0.0) * tesla; 00523 expr->checkValidExpr(e); 00524 field[1] = 0.0; 00525 field[3] = (expr->Er.size()>0 ? e.evaluate(expr->Er.c_str()) : 00526 0.0) * (megavolt/meter); 00527 expr->checkValidExpr(e); 00528 field[4] = 0.0; 00529 } else { 00530 e.setVariable("x",point[0]); 00531 e.setVariable("y",point[1]); 00532 e.setVariable("z",point[2]); 00533 field[0] = (expr->Bx.size()>0 ? e.evaluate(expr->Bx.c_str()) : 00534 0.0) * tesla; 00535 expr->checkValidExpr(e); 00536 field[1] = (expr->By.size()>0 ? e.evaluate(expr->By.c_str()) : 00537 0.0) * tesla; 00538 expr->checkValidExpr(e); 00539 field[3] = (expr->Ex.size()>0 ? e.evaluate(expr->Ex.c_str()) : 00540 0.0) * (megavolt/meter); 00541 expr->checkValidExpr(e); 00542 field[4] = (expr->Ey.size()>0 ? e.evaluate(expr->Ey.c_str()) : 00543 0.0) * (megavolt/meter); 00544 expr->checkValidExpr(e); 00545 } 00546 field[2] = (expr->Bz.size()>0 ? e.evaluate(expr->Bz.c_str()) : 00547 0.0) * tesla; 00548 expr->checkValidExpr(e); 00549 field[5] = (expr->Ez.size()>0 ? e.evaluate(expr->Ez.c_str()) : 00550 0.0) * (megavolt/meter); 00551 expr->checkValidExpr(e); 00552 00553 //printf("FieldComputation::GetFieldValue(%.1f,%.1f,%.1f,%.1f)=%.4f %.4f %.4f %.4f %.4f %.4f\n",point[0],point[1],point[2],point[3], field[0]/tesla,field[1]/tesla,field[2]/tesla,field[3]/(megavolt/meter),field[4]/(megavolt/meter),field[5]/(megavolt/meter)); 00554 return; 00555 }
BLCMDfieldexpr* FieldComputation::expr [private] |
Referenced by FieldComputation(), and GetFieldValue().