| Summary: | G4SynchrotronRadiation has serious bugs | ||
|---|---|---|---|
| Product: | Geant4 | Reporter: | Tom Roberts <tjrob> |
| Component: | processes/electromagnetic | Assignee: | Vladimir.Ivantchenko |
| Status: | RESOLVED FIXED | ||
| Severity: | major | ||
| Priority: | P5 | ||
| Version: | 9.4 | ||
| Hardware: | All | ||
| OS: | All | ||
Hello, Thank you very much for detailed and clear report. The bug fix is submitted for the testing. I will contact original author of the code about documentation. Vladimir |
G4SynchrotronRadiation.cc calls GetFieldValue() with the old-style convention. This can give WILDLY incorrect results, and has the potential to crash the program. Programs with a static B field and no E field probably would not see this. Lines 132-136: G4double globPosVec[3], FieldValueVec[3]; globPosVec[0] = globPosition.x(); globPosVec[1] = globPosition.y(); globPosVec[2] = globPosition.z(); SHOULD BE: G4double globPosVec[4], FieldValueVec[6]; // 3->4, 3->6 globPosVec[0] = globPosition.x(); globPosVec[1] = globPosition.y(); globPosVec[2] = globPosition.z(); globPosVec[3] = trackData.GetGlobalTime(); // new line The same modification must be made to lines 227-230. These modifications must also be made to G4SynchrotronRadiationInMat.cc. There is also a documentation issue: this code is valid only for fields that are constant throughout the step. Users should be cautioned to make sure to limit the stepsize in regions where the field varies. (Thread 1005 in the EM Processes Forum said this is mentioned in the Physics Manual, but I did not find it.) Suggestion: search the entire code base for calls to GetFieldValue and check that the new calling convention is used and that position[3] is always set to the time coordinate.