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