This commit is contained in:
J.E. Garay Labra 2021-06-17 16:58:23 +02:00
parent 4ffd1c03c1
commit 1b00a76a17
7 changed files with 142 additions and 49 deletions

View File

@ -6,11 +6,12 @@ import pickle
import yaml import yaml
#import matplotlib.font_manager
from matplotlib import rc from matplotlib import rc
rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']}) rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
rc('text', usetex=True) rc('text', usetex=True)
import matplotlib.font_manager
def is_ipython(): def is_ipython():
''' Check if script is run in IPython. ''' Check if script is run in IPython.
@ -98,10 +99,10 @@ def plot_parameters(dat, input_file, deparameterize=False, ref=None):
ids.append(bnd_c['id']) ids.append(bnd_c['id'])
ids_type.append('windkessel') ids_type.append('windkessel')
current_val.append(bnd_set['parameters']['R_d']) current_val.append(bnd_set['parameters']['R_d'])
labels.append('$R_' + str(bnd_c['id'])) labels.append('$R_' + str(bnd_c['id']-3))
if RC_flag: if RC_flag:
current_val_C.append(bnd_set['parameters']['C']) current_val_C.append(bnd_set['parameters']['C'])
labels.append('$C_' + str(bnd_c['id'])) labels.append('$C_' + str(bnd_c['id']-3))
elif 'dirichlet' in bnd_c['type']: elif 'dirichlet' in bnd_c['type']:
@ -112,10 +113,9 @@ def plot_parameters(dat, input_file, deparameterize=False, ref=None):
fig1, axes1 = plt.subplots(1,1,figsize=(12,7))
fig1, axes1 = plt.subplots(1,1,figsize=(12,6))
if RC_flag: if RC_flag:
fig2, axes2 = plt.subplots(1,1,figsize=(12,6)) fig2, axes2 = plt.subplots(1,1,figsize=(12,7))
t = dat['times'] t = dat['times']
@ -162,13 +162,22 @@ def plot_parameters(dat, input_file, deparameterize=False, ref=None):
if ids_type[i] == 'dirichlet': if ids_type[i] == 'dirichlet':
pass fig3, axes3 = plt.subplots(1,1,figsize=(12,5))
#axes3.plot(t, curve , '-', color=col_,label= legends_ + '= ' + str(rec_value) + '/' + str(true_values[cur_key]) + '$') axes3.plot(t, curve , '-', color=col_,label= legends_ + '= ' + str(rec_value) + '/' + str(true_values[cur_key]) + '$', linewidth = 4)
#axes3.fill_between(t, curve - np.sqrt(P[:, idx, idx]), curve + np.sqrt(P[:, idx, idx]), alpha=0.3, color=col_) axes3.fill_between(t, std_down, std_up, alpha=0.3, color=col_)
#legends_=next(legends) legends_=next(legends)
#axes3.plot(t, dash_curve , color=col_,ls='--') axes3.plot(t, dash_curve , color=col_,ls='--')
axes3.set_ylabel(r'$U$',fontsize=36)
axes3.legend(fontsize=36,loc='upper right')
axes3.set_xlim([-0.01,0.81])
axes3.set_xlabel(r'$t (s)$',fontsize=36)
axes3.set_box_aspect(1/4)
plt.xticks(fontsize=28)
plt.yticks(fontsize=28)
plt.savefig('U.png')
plt.close(fig3)
else: else:
axes1.plot(t, curve , '-', color=col_,label= legends_ + '= ' + str(rec_value) + '/' + str(true_values[cur_key]) + '$', linewidth = 2) axes1.plot(t, curve , '-', color=col_,label= legends_ + '= ' + str(rec_value) + '/' + str(true_values[cur_key]) + '$', linewidth = 3)
axes1.fill_between(t, std_down, std_up, alpha=0.3, color=col_) axes1.fill_between(t, std_down, std_up, alpha=0.3, color=col_)
axes1.plot(t, dash_curve , color=col_,ls='--') axes1.plot(t, dash_curve , color=col_,ls='--')
legends_=next(legends) legends_=next(legends)
@ -199,19 +208,23 @@ def plot_parameters(dat, input_file, deparameterize=False, ref=None):
idx +=1 idx +=1
axes1.set_ylabel(r'$R_d$',fontsize=22) axes1.set_ylabel(r'$R_d$',fontsize=36)
axes1.legend(fontsize=18,loc='upper right') axes1.legend(fontsize=36,loc='upper right')
axes1.set_xlim([-0.01,0.81]) axes1.set_xlim([-0.01,0.81])
axes1.set_ylim([1700,35000]) axes1.set_ylim([1700,45000])
axes1.set_xlabel(r'$t (s)$',fontsize=22) axes1.set_box_aspect(1/2)
plt.savefig('C.png') plt.xticks(fontsize=28)
plt.yticks(fontsize=28)
axes1.set_xlabel(r'$t (s)$',fontsize=36)
plt.savefig('Rd.png')
if RC_flag: if RC_flag:
axes2.set_ylabel(r'$C$',fontsize=22) axes2.set_ylabel(r'$C$',fontsize=24)
axes2.legend(fontsize=18,loc='upper right') axes2.legend(fontsize=18,loc='upper right')
axes2.set_xlim([-0.01,0.81]) axes2.set_xlim([-0.01,0.81])
axes2.set_xlabel(r'$t (s)$',fontsize=22) axes2.set_xlabel(r'$t (s)$',fontsize=24)
fig2.savefig('C.png') fig2.savefig('C.png')
fig1.savefig('Rd.png') fig1.savefig('Rd.png')

View File

@ -8,7 +8,7 @@ fluid:
implicit_windkessel: True implicit_windkessel: True
io: io:
write_path: 'results/aorta' write_path: 'results/HRz_Pb_V70'
restart: restart:
path: '' # './projects/nse_coa3d/results/test_restart2/' path: '' # './projects/nse_coa3d/results/test_restart2/'
time: 0 time: 0
@ -186,18 +186,18 @@ estimation:
mesh: '/home/yeye/NuMRI/kalman/meshes/coaortaH3_leo2.0.h5' mesh: '/home/yeye/NuMRI/kalman/meshes/coaortaH3_leo2.0.h5'
#mesh: './meshes/coaortaH1.h5' #mesh: './meshes/coaortaH1.h5'
fe_degree: 1 fe_degree: 1
#xdmf_file: 'measurements/aorta_zdir/Perturbation/Mg15V120/u_all.xdmf' xdmf_file: 'measurements/aorta_zdir/Perturbation/Mg15V70/u_all.xdmf'
#file_root: 'measurements/aorta_zdir/Perturbation/Mg15V120/u{i}.h5' file_root: 'measurements/aorta_zdir/Perturbation/Mg15V70/u{i}.h5'
xdmf_file: 'measurements/aorta/u_all.xdmf' #xdmf_file: 'measurements/aorta/u_all.xdmf'
file_root: 'measurements/aorta/u{i}.h5' #file_root: 'measurements/aorta/u{i}.h5'
indices: 0 # indices of checkpoints to be processed. 0 == all indices: 0 # indices of checkpoints to be processed. 0 == all
velocity_direction: ~ velocity_direction: ~
noise_stddev: 0 # standard deviation of Gaussian noise noise_stddev: 45 # standard deviation of Gaussian noise
roukf: roukf:
particles: 'simplex' # unique or simplex particles: 'simplex' # unique or simplex
observation_operator: 'postprocessing' #state or postprocessing observation_operator: 'postprocessing' #state or postprocessing
reparameterize: True reparameterize: True
ODV_functional: ODV_functional:
enable: False enable: True
VENC: 244 VENC: 142

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -237,22 +237,11 @@ P_l = R_{p,l} \ Q_l + \pi_l
\column{.5\textwidth} % Left column and width \column{.5\textwidth} % Left column and width
\footnotesize \footnotesize
\begin{itemize} \begin{itemize}
\item Incompressible Navier-Stokes equations: \item<1-> $u_{inlet} = -U f(t) \hat{n}$, with $f(t)$ the weaveform.
\begin{equation} \item<2-> Fractional step scheme.
\begin{cases} \item<3-> Semi-implicit Windkessel model.
\displaystyle \rho \frac{\partial \vec{u}}{\partial t} + \rho \big ( \vec{u} \cdot \nabla \big) \vec{u} - \mu \Delta \vec{u} + \nabla p = 0 \\[0.2cm] \item<4-> Stabilized $\mathbb{P}1/\mathbb{P}1$ finite elements.
\nabla \cdot \vec{u} = 0 \quad \text{in} \quad \Omega \\[0.2cm] \item<4-> Implemented in FEniCS.
\vec{u} = \vec{u}_{inlet} \quad \text{on} \quad \Gamma_{in} \\[0.2cm]
\vec{u} = 0 \quad \text{on} \quad \Gamma_{walls}
\end{cases}
\end{equation}
\item \emph{Three-element} Windkessel coupling at every outlet:
\begin{equation}
\begin{cases}
\displaystyle C_{d,l} \frac{d \pi_l}{dt} + \frac{\pi_l}{R_{d,l}} = Q_l \\[0.2cm]
P_l = R_{p,l} \ Q_l + \pi_l
\end{cases}
\end{equation}
\end{itemize} \end{itemize}
@ -260,7 +249,7 @@ P_l = R_{p,l} \ Q_l + \pi_l
\begin{figure}[!hbtp] \begin{figure}[!hbtp]
\begin{center} \begin{center}
\includegraphics[height=0.9\textwidth]{images/ref.png} \includegraphics[height=0.9\textwidth]{images/ref.png}
\caption{\footnotesize Schematic of the model} \caption{\footnotesize Reference solution at peak systole}
\end{center} \end{center}
\end{figure} \end{figure}
\end{columns} \end{columns}
@ -290,13 +279,14 @@ P_l = R_{p,l} \ Q_l + \pi_l
\item<5-> Gaussian noise into the magnetization \item<5-> Gaussian noise into the magnetization
\item<6-> Different levels of aliasing varying the $venc$ parameter \item<6-> Different levels of aliasing varying the $venc$ parameter
\item<7-> Only using the dominant component of the velocity: $u_z$ \item<7-> Only using the dominant component of the velocity: $u_z$
\item<8-> Time interpolation $dt = 1 \ ms \Longrightarrow dt = 30 \ ms$
\end{itemize} \end{itemize}
\end{columns} \end{columns}
\end{frame} \end{frame}
\section{The inverse problem}
\begin{frame} \begin{frame}
\frametitle{The inverse problem} \frametitle{The inverse problem}
@ -381,20 +371,110 @@ J(\theta) = \displaystyle \frac{1}{2} || \theta - \theta_0 ||^2_{P_0^{-1}} + \
The parameter vector: The parameter vector:
\begin{itemize} \begin{itemize}
\item<1-> Plug flow at the inlet: $u_{inlet} = -U f(t) \hat{n}$, with $f(t)$ is the weaveform which simulate a cardiac cycle and $\hat{n}$ is the outward normal vector. \item<1-> Amplitude of the inlet velocity: $U$
\item<2-> Since $R_p << R_d$, we only consider an optimization dependent on $R_d, C$ for every 3D-0D coupled outlet \item<2-> Since $R_p << R_d$, we only consider an optimization dependent on $\big ( R_{d,l}, C_l \big )$ for $l=1,...,n_l$
\end{itemize} \end{itemize}
\onslide<3-> $$\theta = (U,\vec{R_d},\vec{C})$$ \\ with $\vec{R_d} = R_{d,l}$, $\vec{C} = C_l$ for $l=1,..., n_l$ \onslide<3-> $$\theta = (U,\vec{R_d},\vec{C})$$ \\ with $\vec{R_d} = R_{d,l}$, $\vec{C} = C_l$ for $l=1,..., \color{red} n_{l-1}$ \\[0.3cm]
\onslide<4-> \color{red} Not all the resistences can be recovered at once $\Longrightarrow$ desc. aorta fixed.
\end{frame} \end{frame}
\section{Numerical Experiments} \begin{frame}
\frametitle{Easy example}
\footnotesize
\begin{itemize}
\item<1-> $\theta_{ref} = (U,\vec{R_d})$ , $U=75$, $\vec{R_d} = (7200,11520,11520)$
\end{itemize}
\begin{columns}
\footnotesize
\column{.4\textwidth}
\begin{figure}
\onslide<2-> \textbf{Test I:} $U_0 = 150$ $\vec{R_{d,0}}= (8760,8760,8760)$
\onslide<3->
\includegraphics[width=1.2\textwidth]{images/U_Pb.png}
\includegraphics[width=1.2\textwidth]{images/Rd_Pb.png}
\end{figure}
\column{.4\textwidth}
\begin{figure}
\onslide<2-> \textbf{Test II:} $U_0 = 40$ $\vec{R_{d,0}}= (4000,4000,4000)$
\onslide<4->
\includegraphics[width=1.2\textwidth]{images/U_Pc.png}
\includegraphics[width=1.2\textwidth]{images/Rd_Pc.png}
\end{figure}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{Aliased data}
\begin{center}
What happend when $venc < u_{max}$ ?
\end{center}
\end{frame}
\begin{frame}
\frametitle{Easy example: with $venc = 70 \% u_{max}$}
\footnotesize
\begin{itemize}
\item $\theta_{ref} = (U,\vec{R_d})$ , $U=75$, $\vec{R_d} = (7200,11520,11520)$
\end{itemize}
\begin{columns}
\footnotesize
\column{.4\textwidth}
\begin{figure}
\onslide<1-> \textbf{Test I:} $U_0 = 150$ $\vec{R_{d,0}}= (8760,8760,8760)$
\onslide<2->
\includegraphics[width=1.2\textwidth]{images/U_Pb.png}
\includegraphics[width=1.2\textwidth]{images/Rd_Pb.png}
\end{figure}
\column{.4\textwidth}
\begin{figure}
\onslide<1-> \textbf{Test II:} $U_0 = 40$ $\vec{R_{d,0}}= (4000,4000,4000)$
\onslide<2->
\includegraphics[width=1.2\textwidth]{images/U_Pc.png}
\includegraphics[width=1.2\textwidth]{images/Rd_Pc.png}
\end{figure}
\end{columns}
\end{frame}
\begin{frame}
\frametitle{The Kalman Filter: A frequency defined functional}
\begin{itemize}
\item<1-> We proposed a change in the cost functional:
\onslide<2->
\begin{equation*}
\hat{\theta} = arg \min_{\theta} J(\theta)
\end{equation*}
\begin{equation}
J(\theta) = \displaystyle \frac{1}{2} || \theta - \theta_0 ||^2_{P_0^{-1}} + \color{red} \sum_{k=1}^N 1- cos \big ( \frac{\pi}{venc} \cdot ( Z_k - \mathbb{H} X_k ) \big )
\end{equation}
\end{itemize}
\end{frame}
\section{Numerical Experiments}
\begin{frame} \begin{frame}
\frametitle{Numerical Experiments} \frametitle{Numerical Experiments}
\begin{center} \begin{center}