Hello,
I’m performing a reliability analysis on the bearing capacity of a strip foundation. Failure is defined as the factor of safety FOS = Pcr/V being smaller than 2, so the limit state function becomes g = FOS - 2. Pcr is the critical load. It is calculated from a finite element software and depends on the soil cohesion c and friction angle \phi. V is the applied load but isn’t an input of my finite element software. My random input variables are so fi, c and V. The problem is, that the parser I use to extract the output of my finite element software returns Pcr and I have to calculate FOS in another step, taking also V into account. To solve this problem I defined a function FOS = STRIPmodel(X)(.m file, this function becomes my MODEL), which takes as input the vector X = [\phi, c, V], runs my FEM software thanks to UQLink, extract Pcr and at the end calculates FOS = Pcr/V. Everything works fine, the MCS and AKMCS probability of failure are 21.2% and 20.6%, respectively, but if I run FORM, I become a probability of failure of 1.4% and an importance factor of 1 for V. It is maybe dependent on the fact that I call my finite element software through a function? Below you can find some sections of my code.
% Forward model
mOpts.mFile = 'STRIPmodel';
mOpts.isVectorized = false;
myModel = uq_createModel(mOpts);
% Probabilistic input
IOpts.Marginals(1).Name = '$\phi$';
IOpts.Marginals(1).Type = 'LogNormal';
IOpts.Marginals(1).Moments = [30 0.08*30];
IOpts.Marginals(2).Name = 'c';
IOpts.Marginals(2).Type = 'LogNormal';
IOpts.Marginals(2).Moments = [5 0.2*5];
IOpts.Marginals(3).Name = 'V';
IOpts.Marginals(3).Type = 'Gumbel';
IOpts.Marginals(3).Moments = [1200 0.1*1200];
myInput = uq_createInput(IOpts);
% Reliability
FORMOptions.Type = 'Reliability';
FORMOptions.Method = 'FORM';
FORMOptions.Input = myInput;
FORMOptions.Model = myModel;
FORMOptions.LimitState.Threshold = 2;
FORMOptions.LimitState.CompOp = '<';
FORMAnalysis = uq_createAnalysis(FORMOptions);
The function (actually my MODEL), which runs my FEM software is defined as follows:
function FOS = STRIPmodel(X)
% UQLink ...
ZS.Output.Parser = 'readPcr_STRIP';
ZS.Output.FileName = {"File_to_read.his"};
% Create the UQLink wrapper
myUQLinkModel = uq_createModel(ZS);
Pcr = uq_evalModel(myUQLinkModel,X(:,1:2));
FOS = Pcr/X(3);
end
Thank you!