20
20
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
22
* @author: $LastChangedBy: dutka $
23
* @date: $LastChangedDate: 2008-05-21 11:21:38 +0200 (mer, 21 mai 2008) $
24
* Id: $Id: SORMResult.cxx 815 2008-05-21 09:21:38Z dutka $
23
* @date: $LastChangedDate: 2008-09-13 22:37:56 +0200 (sam 13 sep 2008) $
24
* Id: $Id: SORMResult.cxx 929 2008-09-13 20:37:56Z dutka $
51
52
typedef Base::Func::NumericalMathFunction NumericalMathFunction;
52
53
typedef Base::Common::Log Log;
53
54
typedef Distribution::Normal Normal;
55
CLASSNAMEINIT(SORM::Result);
57
static Base::Common::Factory<SORM::Result> RegisteredFactory("SORM::Result");
55
typedef Model::StandardEvent StandardEvent;
57
CLASSNAMEINIT(SORMResult);
59
static Base::Common::Factory<SORMResult> RegisteredFactory("SORMResult");
60
62
* @brief Standard constructor: the class is defined by an optimisation algorithm, a failure event and a physical starting point
62
SORM::Result::Result(const NumericalPoint & standardSpaceDesignPoint,
63
const Event & limitStateVariable,
64
const Bool isStandardPointOriginInFailureSpace,
66
Analytical::Result(standardSpaceDesignPoint, limitStateVariable, isStandardPointOriginInFailureSpace, name),
64
SORMResult::SORMResult(const NumericalPoint & standardSpaceDesignPoint,
65
const Event & limitStateVariable,
66
const Bool isStandardPointOriginInFailureSpace,
68
AnalyticalResult(standardSpaceDesignPoint, limitStateVariable, isStandardPointOriginInFailureSpace, name),
67
69
standardDistribution_(limitStateVariable.getImplementation()->getAntecedent().getImplementation()->getDistribution().getStandardDistribution()),
68
70
standardMarginal_(standardDistribution_.getMarginal(0))
74
76
Matrix gradient(limitStateFunction.gradient(getStandardSpaceDesignPoint()));
75
77
/* Get the first column */
76
78
gradientLimitStateFunction_ = gradient * NumericalPoint(1, 1.0);
78
for (UnsignedLong i = 0; i < gradient.getNbRows(); i++)
80
gradientLimitStateFunction_[i] = gradient(i, 0);
83
79
/* compute its hessian */
84
80
SymmetricTensor hessian(limitStateFunction.hessian(getStandardSpaceDesignPoint()));
85
81
/* Get the first sheet */
126
122
catch (NotDefinedException & ex) {
127
123
Log::Info(ex.str());
129
} // end SORM::Result::Result
125
} // end SORMResult::Result
131
127
/* Default constructor */
132
SORM::Result::Result():
133
Analytical::Result(),
128
SORMResult::SORMResult():
134
130
hessianLimitStateFunction_(),
135
131
gradientLimitStateFunction_(),
136
132
sortedCurvatures_(),
149
145
/* Virtual constructor */
150
SORM::Result * SORM::Result::clone() const
152
return new Result(*this);
156
SORM::Result::~Result()
146
SORMResult * SORMResult::clone() const
148
return new SORMResult(*this);
161
151
/* The function that actually evaluates the event probability with SORM Breitung approximation */
162
void SORM::Result::computeEventProbabilityBreitung()
152
void SORMResult::computeEventProbabilityBreitung()
163
153
throw(NotDefinedException)
165
155
NumericalScalar beta(getHasoferReliabilityIndex());
185
175
eventProbabilityBreitung_ = 1.0 - eventProbabilityBreitung_;
187
} // end SORM::Result::computeEventProbabilityBreitung
177
} // end SORMResult::computeEventProbabilityBreitung
189
179
/* EventProbabilityBreitung accessor */
190
NumericalScalar SORM::Result::getEventProbabilityBreitung() const
180
NumericalScalar SORMResult::getEventProbabilityBreitung() const
192
182
return eventProbabilityBreitung_;
195
185
/* The function that actually evaluates the curvatures of the standard limite state function at the standard design point */
196
void SORM::Result::computeCurvatures()
186
void SORMResult::computeCurvatures()
198
188
/* see Mefisto v3.2 documentation */
199
189
/* we calculate the main curvatures */
218
208
sortedCurvatures_ = (NumericalPoint::dot(gradientLimitStateFunction_, getStandardSpaceDesignPoint()) > 0.0 ? 1.0 : -1.0) * inverseGradientNorm * (W.computeEigenValues());
219
209
/* we sort the curvatures with increasing order */
220
210
std::sort(sortedCurvatures_.begin(), sortedCurvatures_.end());
221
} // end SORM::Result::computeCurvatures
211
} // end SORMResult::computeCurvatures
223
213
/* SortedCurvatures accessor */
224
SORM::NumericalPoint SORM::Result::getSortedCurvatures() const
214
SORM::NumericalPoint SORMResult::getSortedCurvatures() const
226
216
return sortedCurvatures_;
229
219
/* The function that actually evaluates the event probability with SORM HohenBichler approximation */
230
void SORM::Result::computeEventProbabilityHohenBichler()
220
void SORMResult::computeEventProbabilityHohenBichler()
231
221
throw(NotDefinedException)
233
223
/* this formula is valid only in the gaussian case */
258
248
eventProbabilityHohenBichler_ = 1.0 - eventProbabilityHohenBichler_;
260
} // SORM::Result::computeEventProbabilityHohenBichler
250
} // SORMResult::computeEventProbabilityHohenBichler
262
252
/* EventProbability HohenBichleraccessor */
263
NumericalScalar SORM::Result::getEventProbabilityHohenBichler() const
253
NumericalScalar SORMResult::getEventProbabilityHohenBichler() const
265
255
return eventProbabilityHohenBichler_;
268
258
/* The function that actually evaluates the event probability with SORM Tvedtapproximation */
269
void SORM::Result::computeEventProbabilityTvedt()
259
void SORMResult::computeEventProbabilityTvedt()
270
260
throw(NotDefinedException)
272
262
/* this formula is valid only in the gaussian case */
327
317
eventProbabilityTvedt_ = 1.0 - eventProbabilityTvedt_;
329
} // end SORM::Result::computeEventProbabilityTvedt
319
} // end SORMResult::computeEventProbabilityTvedt
331
321
/* EventProbability accessor */
332
NumericalScalar SORM::Result::getEventProbabilityTvedt() const
322
NumericalScalar SORMResult::getEventProbabilityTvedt() const
334
324
return eventProbabilityTvedt_;
337
327
/* The function that actually evaluates the generalised reliability index with SORM BreitungHB and Tvedt approximations */
338
void SORM::Result::computeGeneralisedReliabilityIndex()
328
void SORMResult::computeGeneralisedReliabilityIndex()
340
330
/* evaluate the GeneralisedReliabilityIndex */
341
331
//* GeneralisedReliabilityIndex is defined by : - Inverse standard marginal CDF (eventProbability) in usual case or : + Inverse standard marginal CDF (eventProbability) in other case */
361
351
generalisedReliabilityIndexTvedt_ = sign * standardMarginal_.computeQuantile(eventProbabilityTvedt_)[0];
364
} // end SORM::Result::computeGeneralisedReliabilityIndex
354
} // end SORMResult::computeGeneralisedReliabilityIndex
366
356
/* GeneralisedReliabilityIndexBreitung accessor */
367
NumericalScalar SORM::Result::getGeneralisedReliabilityIndexBreitung() const
357
NumericalScalar SORMResult::getGeneralisedReliabilityIndexBreitung() const
369
359
return generalisedReliabilityIndexBreitung_;
372
362
/* GeneralisedReliabilityIndex accessor */
373
NumericalScalar SORM::Result::getGeneralisedReliabilityIndexHohenBichler() const
363
NumericalScalar SORMResult::getGeneralisedReliabilityIndexHohenBichler() const
375
365
return generalisedReliabilityIndexHohenBichler_;
378
368
/* GeneralisedReliabilityIndex accessor */
379
NumericalScalar SORM::Result::getGeneralisedReliabilityIndexTvedt() const
369
NumericalScalar SORMResult::getGeneralisedReliabilityIndexTvedt() const
381
371
return generalisedReliabilityIndexTvedt_;
384
374
/* String converter */
385
String SORM::Result::str() const
375
String SORMResult::str() const
388
oss << "class=" << SORM::Result::GetClassName()
389
<< " " << Analytical::Result::str()
378
oss << "class=" << SORMResult::GetClassName()
379
<< " " << AnalyticalResult::str()
390
380
<< " sortedCurvatures=" << sortedCurvatures_
391
381
<< " eventProbabilityBreitung=" << eventProbabilityBreitung_
392
382
<< " eventProbabilityHohenBichler=" << eventProbabilityHohenBichler_
402
392
/* Method save() stores the object through the StorageManager */
403
void SORM::Result::save(const StorageManager::Advocate & adv) const
393
void SORMResult::save(const StorageManager::Advocate & adv) const
405
Analytical::Result::save(adv);
395
AnalyticalResult::save(adv);
406
396
adv.writeValue(hessianLimitStateFunction_, StorageManager::MemberNameAttribute, "hessianLimitStateFunction_");
407
397
adv.writeValue(gradientLimitStateFunction_, StorageManager::MemberNameAttribute, "gradientLimitStateFunction_");
408
398
adv.writeValue(sortedCurvatures_, StorageManager::MemberNameAttribute, "sortedCurvatures_");
419
409
/* Method load() reloads the object from the StorageManager */
420
void SORM::Result::load(const StorageManager::Advocate & adv)
410
void SORMResult::load(const StorageManager::Advocate & adv)
422
Analytical::Result::load(adv);
412
AnalyticalResult::load(adv);
423
413
adv.readValue(hessianLimitStateFunction_, StorageManager::MemberNameAttribute, "hessianLimitStateFunction_");
424
414
adv.readValue(gradientLimitStateFunction_, StorageManager::MemberNameAttribute, "gradientLimitStateFunction_");
425
415
adv.readValue(sortedCurvatures_, StorageManager::MemberNameAttribute, "sortedCurvatures_");