<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div><br></div><div><blockquote type="cite"><div class="WordSection1" style="page: WordSection1;"><div id="mail-editor-reference-message-container"><blockquote style="margin-top: 5pt; margin-bottom: 5pt;"><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">Initial residual: 462.13689530272404</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 SNES Function norm 4.621368953027e+02</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_ solve.</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP Residual norm 4.621368953027e+02</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_fieldsplit_0_ solve.</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> <span class="apple-converted-space"> </span></span><span lang="IT-CH" style="font-size: 11pt;">0 KSP Residual norm 1.000000000000e+00</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> 1 KSP Residual norm 3.501082228626e-15</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> <span class="apple-converted-space"> </span></span><span lang="EN-US" style="font-size: 11pt;">Residual norms for firedrake_0_fieldsplit_1_ solve.</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> <span class="apple-converted-space"> </span></span><span lang="IT-CH" style="font-size: 11pt;">0 KSP Residual norm 0.000000000000e+00</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> 1 KSP Residual norm 0.000000000000e+00</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> <span class="apple-converted-space"> </span></span><span lang="EN-US" style="font-size: 11pt;">1 KSP Residual norm 1.612167203819e-12</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 1 SNES Function norm 1.599350481360e-12<br>```</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Using the fieldsplit additive preconditioner, the problem converges in a single KSP iteration, as expected. However, I do not understand<span class="apple-converted-space"> </span></span><span lang="EN-US" style="font-size: 11pt;">why the</span><span class="apple-converted-space"><span style="font-size: 11pt;"> </span></span><span style="font-size: 11pt;">residual of fieldsplit_0 (1e+0) does not coincide with the outer residual (462.13689530272404)</span><span lang="EN-US" style="font-size: 11pt;">. It should be the case given that only<span class="apple-converted-space"> </span></span><span style="font-size: 11pt;">fieldsplit_0 has</span><span class="apple-converted-space"><span lang="EN-US" style="font-size: 11pt;"> </span></span><span lang="EN-US" style="font-size: 11pt;">a non-zero residual contribution</span><span style="font-size: 11pt;">. The fact that it is just 1 is suspicious. Is there something about how the fieldsplit works that I am missing?</span></div></div></blockquote></div></div></blockquote></div><div><br></div><div> In my reading, it says </div><div><blockquote type="cite"><div class="WordSection1" style="page: WordSection1;"><div id="mail-editor-reference-message-container"><blockquote style="margin-top: 5pt; margin-bottom: 5pt;"><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">Residual norms for firedrake_0_ solve.</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP Residual norm 4.621368953027e+02</span></div></div></blockquote></div></div></blockquote> </div><div> so the <font face="Aptos, sans-serif"><span style="font-size: 11pt;">residual in the first (0th)</span><span style="font-size: 11pt;"> split does correspond to the outer-most KSP residual norm (not printed but equal to the SNES at the first iteration of Newton.</span></font></div><div><font face="Aptos, sans-serif"><span style="font-size: 14.666667px;"><br></span></font></div><div><font face="Aptos, sans-serif"><span style="font-size: 14.666667px;"> It is the residual norm of the first field of the first field that is 1</span></font></div><div><font face="Aptos, sans-serif"><span style="font-size: 14.666667px;"><br></span></font></div><div><blockquote type="cite"><div class="WordSection1" style="page: WordSection1;"><div id="mail-editor-reference-message-container"><blockquote style="margin-top: 5pt; margin-bottom: 5pt;"><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">Residual norms for firedrake_0_fieldsplit_0_ solve.</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> <span class="apple-converted-space"> </span></span><span lang="IT-CH" style="font-size: 11pt;">0 KSP Residual norm 1.000000000000e+00</span></div></div></blockquote></div></div></blockquote><br></div><div> Or am I missing something</div><div><br></div><div> Barry</div><div><br></div><div><font face="Aptos, sans-serif"><span style="font-size: 14.666667px;"><br></span></font></div><div><font face="Aptos, sans-serif"><span style="font-size: 14.666667px;"><br></span></font></div><div><font face="Aptos, sans-serif"><span style="font-size: 14.666667px;"><br></span></font><br></div><div><br></div><div><br></div><blockquote type="cite"><div class="WordSection1" style="page: WordSection1;"><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">Initial residual: 462.13689530272404<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 SNES Function norm 4.621368953027e+02<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_ solve.<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP Residual norm 4.621368953027e+02<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_ solve.<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP unpreconditioned resid norm 4.621368953027e+02 true resid norm 4.621368953027e+02 ||r(i)||/||b|| 1.000000000000e+00<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_fieldsplit_0_ solve.<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP Residual norm 1.000000000000e+00<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_fieldsplit_0_ solve.<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span><span lang="IT-CH" style="font-size: 11pt;">0 KSP none resid norm 1.000000000000e+00 true resid norm 3.501082228626e-15 ||r(i)||/||b|| 3.501082228626e-15<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> 1 KSP Residual norm 3.501082228626e-15<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> 1 KSP none resid norm 3.501082228626e-15 true resid norm 3.501082228626e-15 ||r(i)||/||b|| 3.501082228626e-15<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> </span><span lang="EN-US" style="font-size: 11pt;">Residual norms for firedrake_0_fieldsplit_1_ solve.<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP Residual norm 0.000000000000e+00<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_fieldsplit_1_ solve.<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP none resid norm 0.000000000000e+00 true resid norm 0.000000000000e+00 ||r(i)||/||b|| inf<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 1 KSP Residual norm 0.000000000000e+00<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 1 KSP none resid norm 0.000000000000e+00 true resid norm 0.000000000000e+00 ||r(i)||/||b|| inf<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 1 KSP Residual norm 1.612167203819e-12<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 1 KSP unpreconditioned resid norm 1.612167203819e-12 true resid norm 1.589286585800e-12 ||r(i)||/||b|| 3.438995245681e-15<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 1 SNES Function norm 1.599350481360e-12</span></div></div></blockquote><br><div><br><blockquote type="cite"><div>On Sep 17, 2024, at 1:04 AM, miguel.salazar <miguel.salazar@corintis.com> wrote:</div><br class="Apple-interchange-newline"><div><meta charset="UTF-8"><div class="WordSection1" style="page: WordSection1; caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 18px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">These are the new options (with ksp_monitor_true_residual)<br><br>solver_mumps_assembled = {<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "ksp_type": "preonly",<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "ksp_monitor": None,<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "ksp_monitor_true_residual": None,<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "pc_type": "python",<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "pc_python_type": "firedrake.AssembledPC",<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "assembled_pc_type": "lu",<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "assembled_pc_factor_mat_solver_type": "mumps",<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "assembled_mat_mumps_icntl_14": 200,<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "assembled_mat_mumps_icntl_24": 1,<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">}<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">solver_fieldsplit = {<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "mat_type": "matfree",<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "snes_monitor": None,<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "snes_type": "newtonls",<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "ksp_type": "fgmres",<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "ksp_monitor_true_residual": None,<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> <span class="Apple-converted-space"> </span></span><span lang="IT-CH" style="font-size: 11pt;">"ksp_rtol": 1e-1,<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> "ksp_monitor": None,<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> <span class="Apple-converted-space"> </span></span><span lang="EN-US" style="font-size: 11pt;">"pc_type": "fieldsplit",<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "pc_fieldsplit_type": "additive",<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "fieldsplit_0": solver_mumps_assembled,<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> "fieldsplit_1": solver_mumps_assembled,<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">}<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"><o:p> </o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">And this is the output<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"><o:p> </o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">Initial residual: 462.13689530272404<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 SNES Function norm 4.621368953027e+02<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_ solve.<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP Residual norm 4.621368953027e+02<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_ solve.<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP unpreconditioned resid norm 4.621368953027e+02 true resid norm 4.621368953027e+02 ||r(i)||/||b|| 1.000000000000e+00<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_fieldsplit_0_ solve.<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP Residual norm 1.000000000000e+00<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_fieldsplit_0_ solve.<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> <span class="Apple-converted-space"> </span></span><span lang="IT-CH" style="font-size: 11pt;">0 KSP none resid norm 1.000000000000e+00 true resid norm 3.501082228626e-15 ||r(i)||/||b|| 3.501082228626e-15<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> 1 KSP Residual norm 3.501082228626e-15<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> 1 KSP none resid norm 3.501082228626e-15 true resid norm 3.501082228626e-15 ||r(i)||/||b|| 3.501082228626e-15<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> <span class="Apple-converted-space"> </span></span><span lang="EN-US" style="font-size: 11pt;">Residual norms for firedrake_0_fieldsplit_1_ solve.<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP Residual norm 0.000000000000e+00<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_fieldsplit_1_ solve.<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP none resid norm 0.000000000000e+00 true resid norm 0.000000000000e+00 ||r(i)||/||b|| inf<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 1 KSP Residual norm 0.000000000000e+00<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 1 KSP none resid norm 0.000000000000e+00 true resid norm 0.000000000000e+00 ||r(i)||/||b|| inf<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 1 KSP Residual norm 1.612167203819e-12<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 1 KSP unpreconditioned resid norm 1.612167203819e-12 true resid norm 1.589286585800e-12 ||r(i)||/||b|| 3.438995245681e-15<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 1 SNES Function norm 1.599350481360e-12<o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"><o:p> </o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">The true residual is very low. (</span><span lang="IT-CH" style="font-size: 11pt;">3.501082228626e-15)</span><span lang="EN-US" style="font-size: 11pt;"><o:p></o:p></span></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"><o:p> </o:p></span></div><div style="font-size: 10pt; font-family: Arial;"><br class="webkit-block-placeholder"></div><table cellspacing="0" cellpadding="0" border="0" style="width: 409px;"><tbody><tr><td valign="top" style="font-size: 10pt; font-family: Arial; width: 260px; padding-bottom: 20px;"><br></td><td valign="top" style="font-size: 10pt; font-family: Arial; width: 149px; padding-bottom: 20px;"><br></td></tr><tr><td valign="top" colspan="1" style="width: 260px; font-family: Arial; color: rgb(138, 138, 140); font-size: 8pt; line-height: 14pt; padding: 0px 0px 15px;"><span data-codetwo-visible="Name"><b style="color: rgb(27, 20, 100);">MIGUEL ANGEL SALAZAR DE TROYA<br></b></span><span style="font-size: 8pt; color: rgb(138, 138, 140);"><span data-codetwo-visible="Job title">Head of Software Engineering</span></span><br><span data-codetwo-visible="Email"><a href="mailto:miguel.salazar@corintis.com" style="font-size: 8pt; text-decoration: underline; color: rgb(138, 138, 140);"><em>miguel.salazar@corintis.com</em></a><br></span><span data-codetwo-visible="Phone">Corintis SA<br></span><span data-codetwo-visible="Company address">EPFL Innovation Park Building C<br>1015 Lausanne<br></span></td><td valign="top" colspan="1" style="width: 149px; font-family: Arial; line-height: 14pt; padding: 0px 0px 15px;"><span id="cid:2024-08-1609_02_11-re_mailmigrationfromgoogletooffice365-sebastien.gobel@corintis.com-co_4456a1bf-dd3e-46b7-85f9-21f278e66a79.png"><2024-08-1609_02_11-re_mailmigrationfromgoogletooffice365-sebastien.gobel@corintis.com-co_4456a1bf-dd3e-46b7-85f9-21f278e66a79.png></span></td></tr><tr data-codetwo-visible="Disclaimer"><td valign="top" colspan="2" style="font-size: 7pt; font-family: Arial; width: 409px; color: rgb(255, 255, 255); padding: 3px 10px; background-color: rgb(27, 20, 100);">Here at Corintis we care for your privacy. That is why we have taken appropriate measures to ensure that the data you have provided to us is always secure.</td></tr></tbody></table><div id="mail-editor-reference-message-container"><div><div><div style="border-width: 1pt medium medium; border-style: solid none none; border-color: rgb(181, 196, 223) currentcolor currentcolor; border-image: none; padding: 3pt 0cm 0cm;"><p class="MsoNormal" style="margin: 0cm 0cm 12pt; font-size: 12pt; font-family: Aptos, sans-serif;"><b><span style="">From:<span class="Apple-converted-space"> </span></span></b><span style="">Barry Smith <<a href="mailto:bsmith@petsc.dev">bsmith@petsc.dev</a>><br><b>Date:<span class="Apple-converted-space"> </span></b>Monday, 16 September 2024 at 19:34<br><b>To:<span class="Apple-converted-space"> </span></b>miguel.salazar <<a href="mailto:miguel.salazar@corintis.com">miguel.salazar@corintis.com</a>><br><b>Cc:<span class="Apple-converted-space"> </span></b><a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a><span class="Apple-converted-space"> </span><<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>><br><b>Subject:<span class="Apple-converted-space"> </span></b>Re: [petsc-users] Residual at the fieldsplit level<o:p></o:p></span></p></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><o:p> </o:p></div></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"> Try ksp_monitor_true_residual. Let's see if it is an issue of preconditioned vs unpreconditioned residual.<o:p></o:p></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><o:p> </o:p></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><o:p> </o:p></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><br><br><o:p></o:p></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;"><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;">On Sep 16, 2024, at 1:05<span style="font-family: Arial, sans-serif;"> </span>PM, miguel.salazar <<a href="mailto:miguel.salazar@corintis.com">miguel.salazar@corintis.com</a>> wrote:<o:p></o:p></div></div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><o:p> </o:p></div><div><div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">Hello,</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">I have this simple example on Firedrake to illustrate my point. I am solving for a two-component poisson equation (uncoupled). Only the first component has a non-zero residual.<br><br>```<br></span><span style="font-size: 11pt;">import firedrake as fd<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">from firedrake import inner, grad, dx, sin, pi<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> <o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">N = 10<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">mesh = fd.UnitSquareMesh(N, N)<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">V = fd.FunctionSpace(mesh, "CG", 1)<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">W = V * V<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">u = fd.Function(W)<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">v = fd.TestFunction(W)<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">a = inner(grad(u[0]), grad(v[0])) * dx + inner(grad(u[1]), grad(v[1])) * dx<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">x = fd.SpatialCoordinate(mesh)<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">f = fd.Function(V)<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">f.interpolate(fd.Constant(1e4) * sin(x[0] * pi) * sin(2 * x[1] * pi))<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">L = f * v[0] * dx<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">F = a - L<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">bcs = [fd.DirichletBC(W.sub(0), fd.Constant(2.0), (1,))]<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> <o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> <o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">def snes_firedrake_residual(F, u, bcs):<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> for bcs_ in bcs:<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> bcs_.apply(u)<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> residual = fd.assemble(F, bcs=bcs, zero_bc_nodes=True)<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> with residual.dat.vec_ro as r:<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> print("Initial residual:", r.norm())<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> <o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> <o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">snes_firedrake_residual(F, u, bcs)<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> <o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> <o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">problem = fd.NonlinearVariationalProblem(F, u, bcs=bcs)<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">solver_mumps_assembled = {<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "ksp_type": "preonly",<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "ksp_monitor": None,<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "pc_type": "python",<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "pc_python_type": "firedrake.AssembledPC",<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "assembled_pc_type": "lu",<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "assembled_pc_factor_mat_solver_type": "mumps",<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "assembled_mat_mumps_icntl_14": 200,<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "assembled_mat_mumps_icntl_24": 1,<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">}<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">solver_fieldsplit = {<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "mat_type": "matfree",<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "snes_type": "newtonls",<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "ksp_type": "fgmres",<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "ksp_rtol": 1e-1,<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "ksp_monitor": None,<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "pc_type": "fieldsplit",<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "pc_fieldsplit_type": "additive",<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "fieldsplit_0": solver_mumps_assembled,<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> "fieldsplit_1": solver_mumps_assembled,<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">}<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;"> <o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">solver = fd.NonlinearVariationalSolver(problem, solver_parameters=solver_fieldsplit)<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">solver.solve()<o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">```<br><br>The PETSc output is as follow<br><br>```<br>Initial residual: 462.13689530272404</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 SNES Function norm 4.621368953027e+02</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_ solve.</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 0 KSP Residual norm 4.621368953027e+02</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> Residual norms for firedrake_0_fieldsplit_0_ solve.</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> <span class="apple-converted-space"> </span></span><span lang="IT-CH" style="font-size: 11pt;">0 KSP Residual norm 1.000000000000e+00</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> 1 KSP Residual norm 3.501082228626e-15</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> <span class="apple-converted-space"> </span></span><span lang="EN-US" style="font-size: 11pt;">Residual norms for firedrake_0_fieldsplit_1_ solve.</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> <span class="apple-converted-space"> </span></span><span lang="IT-CH" style="font-size: 11pt;">0 KSP Residual norm 0.000000000000e+00</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> 1 KSP Residual norm 0.000000000000e+00</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="IT-CH" style="font-size: 11pt;"> <span class="apple-converted-space"> </span></span><span lang="EN-US" style="font-size: 11pt;">1 KSP Residual norm 1.612167203819e-12</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> 1 SNES Function norm 1.599350481360e-12<br>```</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;"> </span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Using the fieldsplit additive preconditioner, the problem converges in a single KSP iteration, as expected. However, I do not understand<span class="apple-converted-space"> </span></span><span lang="EN-US" style="font-size: 11pt;">why the</span><span class="apple-converted-space"><span style="font-size: 11pt;"> </span></span><span style="font-size: 11pt;">residual of fieldsplit_0 (1e+0) does not coincide with the outer residual (462.13689530272404)</span><span lang="EN-US" style="font-size: 11pt;">. It should be the case given that only<span class="apple-converted-space"> </span></span><span style="font-size: 11pt;">fieldsplit_0 has</span><span class="apple-converted-space"><span lang="EN-US" style="font-size: 11pt;"> </span></span><span lang="EN-US" style="font-size: 11pt;">a non-zero residual contribution</span><span style="font-size: 11pt;">. The fact that it is just 1 is suspicious. Is there something about how the fieldsplit works that I am missing?</span><span lang="EN-US" style="font-size: 11pt;"><br><br>Thanks,</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span lang="EN-US" style="font-size: 11pt;">Miguel</span><span style="font-size: 11pt;"><o:p></o:p></span></div></div></div><div><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10pt; font-family: Arial, sans-serif;"><o:p> </o:p></span></div></div><table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" width="409" style="width: 306.75pt; word-spacing: 0px;"><tbody><tr><td width="260" valign="top" style="width: 195pt; padding: 0cm 0cm 15pt;"></td><td width="149" valign="top" style="width: 111.75pt; padding: 0cm 0cm 15pt;"></td></tr><tr><td width="260" valign="top" style="width: 195pt; padding: 0cm 0cm 11.25pt;"><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif; line-height: 14pt;"><b><span style="font-size: 8pt; font-family: Arial, sans-serif; color: rgb(27, 20, 100);">MIGUEL ANGEL SALAZAR DE TROYA<br></span></b><span style="font-size: 8pt; font-family: Arial, sans-serif; color: rgb(138, 138, 140);">Head of Software Engineering<br><a href="mailto:miguel.salazar@corintis.com"><em><span style="font-family: Arial, sans-serif; color: rgb(138, 138, 140);">miguel.salazar@corintis.com</span></em></a><br>Corintis SA<br>EPFL Innovation Park Building C<br>1015 Lausanne<br><br><o:p></o:p></span></div></td><td width="149" valign="top" style="width: 111.75pt; padding: 0cm 0cm 11.25pt;"><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif; line-height: 14pt;"><span style="font-family: Arial, sans-serif;"><2024-08-1609_02_11-re_mailmigrationfromgoogletooffice365-sebastien.gobel@corintis.com-co_4456a1bf-dd3e-46b7-85f9-21f278e66a79.png><o:p></o:p></span></div></td></tr><tr><td width="409" colspan="2" valign="top" style="width: 306.75pt; background: rgb(27, 20, 100); padding: 2.25pt 7.5pt;"><div style="margin: 0cm; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 7pt; font-family: Arial, sans-serif; color: white;">Here at Corintis we care for your privacy. That is why we have taken appropriate measures to ensure that the data you have provided to us is always secure.</span></div></td></tr></tbody></table></div></blockquote></div></div></div></div></div></div></div></blockquote></div><br></body></html>