FieldComputation Class Reference

List of all members.

Public Member Functions

 FieldComputation (BLCMDfieldexpr *_expr)
G4bool DoesFieldChangeEnergy () const
void GetFieldValue (const G4double point[4], G4double *field) const

Private Attributes

BLCMDfieldexprexpr


Constructor & Destructor Documentation

FieldComputation::FieldComputation ( BLCMDfieldexpr _expr  )  [inline]

References expr.

00151                                                 : G4ElectroMagneticField() 
00152                 { expr=_expr; }


Member Function Documentation

G4bool FieldComputation::DoesFieldChangeEnergy (  )  const [inline]

00153 { return true; }

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 }


Member Data Documentation

Referenced by FieldComputation(), and GetFieldValue().


The documentation for this class was generated from the following file:
g4beamline