Hi Sanaa,
If a variable is non constant and not to be calibrated, it can be considered as an observed input.
In the Chaboche model for example, we have 3 parameters to calibrate:
R = 700e6 # Exact : 750e6
C = 2500e6 # Exact : 2750e6
Gamma = 8.0 # Exact : 10
thetaPrior = [R, C, Gamma]
calibratedIndices = [1, 2, 3]
mycf = ot.ParametricFunction(g, calibratedIndices, thetaPrior)
algo = ot.LinearLeastSquaresCalibration(
mycf, observedStrain, observedStress, thetaPrior, "SVD"
)
In this case, R, C and gamma are calibrated and the strain is the observed input. Now if gamma is not to be calibrated, we can set it either to a constant value (case A) or to a non-constant value (case B).
In case A, the simplest way is to define a parametric function before the calibration function:
Gamma = 8.0 # Known value
referenceValue = [Gamma]
referenceIndex = [3]
intermediateFunction = ot.ParametricFunction(g, referenceIndex, referenceValue)
thetaPrior = [R, C]
calibratedIndices = [1, 2]
mycf = ot.ParametricFunction(g, calibratedIndices, thetaPrior)
algo = ot.LinearLeastSquaresCalibration(
mycf, observedStrain, observedStress, thetaPrior, "SVD"
)
This way, the variable gamma is just ignored by the calibration process (but the evaluation of the function is OK).
In case B, one possibility is to include gamma to the observed inputs.
sampleSize = 100
inputSample = inputDistribution.getSample(sampleSize) # Generate strain
observedStrain = inputSample[:, 0]
sample = ot.Normal().getSample(sampleSize) # Generate gamma
observedGamma = sample[:, 0]
observedInput = ot.Sample(sampleSize, 2)
observedInput[:, 0] = observedStrain
observedInput[:, 1] = observedGamma
thetaPrior = [R, C]
calibratedIndices = [1, 2]
mycf = ot.ParametricFunction(g, calibratedIndices, thetaPrior)
algo = ot.LinearLeastSquaresCalibration(
mycf, observedInput, observedStress, thetaPrior, "SVD"
)
I guess that case B better matches your question.
Does it correspond to your test case ?
Regards,
Michaël