]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
Script UQ basique
authorLiana RAMIANDRISOA <liana.ramiandrisoa@edf.fr>
Thu, 21 Apr 2022 14:19:17 +0000 (16:19 +0200)
committerLiana RAMIANDRISOA <liana.ramiandrisoa@edf.fr>
Thu, 21 Apr 2022 14:19:17 +0000 (16:19 +0200)
ReacteurNumerique_UQ/CasJouet_cath_OT.py [new file with mode: 0644]

diff --git a/ReacteurNumerique_UQ/CasJouet_cath_OT.py b/ReacteurNumerique_UQ/CasJouet_cath_OT.py
new file mode 100644 (file)
index 0000000..48007cc
--- /dev/null
@@ -0,0 +1,97 @@
+#module load openturns/1.14.0 (à charger avant)
+import sys, os
+import openturns as ot
+#import matplotlib.pyplot as plt
+
+sys.path.insert(0, '/data/projets/projets.002/rn_gt_incertitudes.281/D - Divers/cathWrap2')
+from cathWrap import Cathare_Wrapper
+
+orginal_dir = os.getcwd()
+
+def _exec(P_pa,T_C):
+
+    inputs = {'Pstart':P_pa,
+              'Pstart_I':P_pa,
+              'Tstart':T_C}
+    
+    c = Cathare_Wrapper(jdd = '/data/projets/projets.002/rn_gt_incertitudes.281/D - Divers/C3_CANONFORMAT-132bar.dat',
+                        in_dict = inputs,
+                        main_dir = '/home/i46979/Documents/Persalys/Test_Cathare',
+                        #name='mod_jdd',
+                        cath_link='/home/i46979/Documents/Cathare_jdd/INSTALLATION_C3/init_c3.sh')
+
+    c.main()
+
+    time, alpha = c.res['TOPA']
+
+    #i = next(i for i,v in enumerate(alpha) if v > 0.8) #commenté au 12/04/2022
+    #t_s = time[i]
+    #affichage graphique à résoudre?
+    #plt.figure()
+    #plt.title('titre?')
+    
+    t_s = time[-1]
+    #alpha_end = alpha[-1]
+
+    return t_s
+
+if __name__ == '__main__':
+    
+    #Définition du vecteur d'entrée à partir des arguments en ligne de commande
+    #P = 13 200 000 Pa & T = 300°C (rappel)
+    #E = [float(sys.argv[1]),float(sys.argv[2])]
+
+    #Evaluation avec openturns
+    #Définition de la loi pour la pression
+    m_P = float(sys.argv[1])
+    loi_P = ot.Uniform(0.99*m_P,1.01*m_P)
+    #Définition de la loi pour la température
+    m_T = float(sys.argv[2])
+    loi_T = ot.Uniform(0.99*m_T,1.01*m_T)
+    #Définition de la distribution d'entrée
+    dependance = ot.IndependentCopula(2)
+    loi_E = ot.ComposedDistribution([loi_P,loi_T],dependance)
+    #Création du vecteur d'entrée aléatoire
+    random_loi_E = ot.RandomVector(loi_E)
+
+    #Conversion de la fonction _exec vers une fonction openturns
+    def fct_conv(X):
+        return [_exec(X[0],X[1])]
+    #Définition de la fonction python à partir de la fonction convertie
+    fct_cath = ot.PythonFunction(2, 1, fct_conv)
+
+    #Définition du gradient de fct_cath
+    pasGradient = [10, 0.05]
+    def fct_cath_grad(X):
+        y = ot.NonCenterdFinitedDifferenceGradient(pasGradient,fct_cath.getEvaluation())
+        y_grad = y.gradient
+        return y_grad([X[0],X[1]])
+
+    #Définition de la fonction python définitive à manipuler
+    fct_ot_def = ot.PythonFunction(2, 1, fct_cath, gradient = fct_cath_grad)
+
+    #Définition du hessien de la fonction python définitive (optionnelle)
+    pasHessien = [1, 0.005]
+    h = ot.CenteredFiniteDifferenceHessian(pasHessien,fct_ot_def.getEvaluation())
+    fct_ot_def.setHessian(h)
+
+    #Calcul de la sortie aléatoire
+    fct_ot_def = ot.MemoizeFunction(fct_ot_def)#facultatif, pour consultation historique
+    random_S = ot.CompositeRandomVector(fct_ot_def,random_loi_E)
+
+    #Obtention d'une sortie échantillonnée
+    #ech_S = random_S.getSample(10)
+    #mc_1_S = ech_S.computeMean()
+    #mc_2_S = ech_S.computeStandardDeviation()
+    
+    #Obtention d'une sortie de type Taylor/Cumul quadratique
+    taylor_S = ot.TaylorExpansionMoments(random_S)
+    taylor_1_S = taylor_S.getMeanFirstOrder()
+    taylor_2_S = taylor_S.getCovariance()
+    
+    #Obtention d'une sortie dépassement de seuil avec Monte-Carlo
+    #non retenue dans les fonctionnalités prioritaires
+
+    #print("tirages aléatoires de S = ", ech_S)
+    print("moyenne = ",mc_1_S," ou", taylor_1_S)
+    print("variance = ",mc_2_S," ou", taylor_2_S)