Warning, file /include/Geant4/G4QSSubstepStruct.icc was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 inline Substep::Substep()
0032 {
0033 for (G4int i = 1; i < MAX_QSS_ORDER; ++i)
0034 {
0035 std::fill_n(state_x[i], NUMBER_OF_VARIABLES_QSS, 0.0);
0036 std::fill_n(state_q[i], NUMBER_OF_VARIABLES_QSS, 0.0);
0037 }
0038 std::fill_n(state_x[MAX_QSS_ORDER], NUMBER_OF_VARIABLES_QSS, 0.0);
0039
0040 std::fill_n(state_tx, NUMBER_OF_VARIABLES_QSS, 0.0);
0041 std::fill_n(state_tq, NUMBER_OF_VARIABLES_QSS, 0.0);
0042 }
0043
0044
0045
0046 inline Substeps::Substeps()
0047 {
0048 _substeps = static_cast<Substep *>(malloc((_arrlength) * sizeof(Substep)));
0049 }
0050
0051
0052
0053 inline Substeps::~Substeps()
0054 {
0055 free(_substeps);
0056 }
0057
0058
0059
0060
0061 inline void* Substeps::safe_reallocarray(void* ptr, size_t numMembers, size_t size)
0062 {
0063 if (size != 0 && numMembers > std::numeric_limits<size_t>::max() / size)
0064 {
0065 return nullptr;
0066 }
0067 return realloc(ptr, numMembers * size);
0068 }
0069
0070
0071
0072 inline void Substeps::resize()
0073 {
0074 _arrlength = std::fmax(_arrlength*2, 1500);
0075 _substeps = static_cast<Substep *>(safe_reallocarray(_substeps, _arrlength, sizeof(Substep)));
0076 if( _substeps == nullptr )
0077 {
0078 G4ExceptionDescription ermsg;
0079 ermsg << "QSS2: Size of state exceed available memory : number of elemets = " << _arrlength
0080 << " size of each element= " << sizeof(Substep) << G4endl;
0081 G4Exception( "G4QSSubstepStruct::resize", "GeomField0008", FatalException, ermsg );
0082 }
0083 }
0084
0085
0086
0087 inline Substep* Substeps::create_substep()
0088 {
0089 current_substep_index++;
0090
0091 if (unlikely( current_substep_index >= _arrlength ))
0092 {
0093 resize();
0094 }
0095 return &(_substeps[current_substep_index]);
0096 }
0097
0098
0099
0100 inline void Substeps::save_substep(Substep* substep)
0101 {
0102 memcpy(create_substep(), substep, sizeof(Substep));
0103 }
0104
0105
0106
0107 inline void Substeps::reset()
0108 {
0109 current_substep_index = -1;
0110 }