From 4eb8b71271cb657391fd58e7e570a0d4da710aa5 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Thu, 5 Jun 2025 12:36:26 -0400 Subject: [PATCH] docs(laneEmdenVariationalForm): updated to match MFEM sign convention more closley --- .../laneEmdenVariationalBlockForm.pdf | Bin 214202 -> 214205 bytes .../laneEmdenVariationalBlockForm.tex | 20 +++++++------- .../{operator.cpp => polytropeOperator.cpp} | 26 +++++++++++++----- src/poly/utils/private/utilities.cpp | 5 ++++ .../{operator.h => polytropeOperator.h} | 0 5 files changed, 34 insertions(+), 17 deletions(-) rename src/poly/utils/private/{operator.cpp => polytropeOperator.cpp} (92%) create mode 100644 src/poly/utils/private/utilities.cpp rename src/poly/utils/public/{operator.h => polytropeOperator.h} (100%) diff --git a/docs/derivations/laneEmdenVariationalForm/laneEmdenVariationalBlockForm.pdf b/docs/derivations/laneEmdenVariationalForm/laneEmdenVariationalBlockForm.pdf index 092993d7994465dba4e7f57f06d2c85efd1235aa..05ea41c101f5a79a5e81bb49f6e2ff276378472c 100644 GIT binary patch delta 6693 zcmV+=8rtQ$i4DDp4X~>h0yQy{Aqgmd-C9|X8^;lT-(Nu_FC-GS`#ul|2n<<41W1AG zMG{0dU}`zaj=W2*c}USqetW(?W;i|U8FCLLLSB}`?V3KSzN-4Fn%`bteDi|ai6c&P zJ-K{8QJQEcCWb2_q?}wXCvT^Jn^`ffW^*CL^izFv6Q5S=88_2U@yoLMkute|s%Af3 zzWnBeV4WG?27y;;gibVZMp!@M6k*0r=8Q;}milEj=W_ZX3TGR$L{m2Di2i=Zc zm?T1&Y^|S5%NU{r&zA{vE>_Ed_2l$TVLc&^*Q*Qb;mKs{ZTD9*Zl~9?F!kp00KbB+a>jV~58Ote=V|60J++c~q88qBUJr}$es$J`0Rc*K$BJWf~g9!t1Pj;eC! z$sq(aPdY*YKn2)Ps7OcHoQE27gc_FlkXJnLYpBjF!U%_|U=ht-GeZ$M8n`pTD5h@| zj~wHTVq5~n&t>51i6FFp*}w_l*dgH9bAV$;fFqv(IL#&)}g+3obIUhJx6dTl*OI!fst7(fm;_h3}~k&H^8$Ed_pF{+2GMwm@P_v=kFVb#35n%~r` zYS9c-n_Dsi?%4G5y57crHlOc2;hI(f8jC$pvJD_P-r1@OAo261J?=JDbA&p5F1Fb| zx7FQZ19YXpfEW&npXtNz4YC~QT=`Ery;|Si?RSe^ye7 zueQ5tu}tgURJ&%OC_G-3_+6A^T;fdw+>`U-TinxR1jOt#*B<4Fb5Z5Ar|c#u03k76 zv@r3$A5DROrx0gM7H0}20cC_)ju0#f)hQPZozJ%C^C?wJ&q_Lpj_Xp+r^GVTONl3R zah&bmrh1~7-nnN&{OO3{Q8{rUhYu7Erc^j&C&sYmdEsypK0Si16w6}UbzvFQH(KO0 zsa0|oD#5xWq$y2?S{0Q;EuvvZYB1%4Ma7gax+!0O5}s;@HsyCa1y_qzO8c97S2g8q z8vHl|i&$*xLtMcqVnRav`hEJ`Z{pDQGaS7)SpB*WuWwVX-IjRnBi8^i z0-$9gDFgK(GE9O08(;b;5WG|%E!Xc0*quvIQ>X(>&LqLV7d8YuQNJB*tEmz{6fh22 zVyDl4O4OSnzsX2hmCQHWTS^hv%a^690H}Aii>U|n5i-CqA173I#@`j=uV=Vt#3yLV zFj$6JF&>@}SW$`0bIB8-+Q*`2{=-Zu@~jaoaa%dyS##&^SO4tg25{{V*N=CXHO@3rwG29!T4%8=k53>OR-Qw67(C1N2v6gG z7yXEWVD`8$XJKn`E)CQ7qhb9x=bUiSPWlk%GHrTeX~Eheq3g%}Xiwdvwb`eL(AmM! zdo{TqEY;-P7k>JQiL9WytT@vFxB|lr-S`gjicAO)PegxPwY`EmH30T^Esu%yacUSe zwIznucd99fT47o(Ck^^4Q&Q@FNpMc*k4nzCvuo1=!oF@5s@KptNDz1bh1*{ zLL#4dccao|w29~a%9Q6?se^uc{XFh3JPyYF3Q9r$g0nV9Oz~cc1xuWvHcPO7!(468 zM*7A@z4c10p5ADwaxZN<(2R5T%(Nvz3)yZEQ|v)eQUf`up=urLG*mb1+kWI|>L%Gq zmTlCL(`vD;Z$771LRID6%1++hRNH#FU)&tWoqAg$DNf=Ta6thMK@%1JegFfyXciP@ z;r{Szfb+dm>S)F<5f1^*sKvQ|snQg~3$%?ir*sa-=S7}oh4`X*xp3@aUIv1xdbAl> z=Jn3lvs}#?RA8#$YwkdNl$k_j@<{M4P)U6y={J%R0XU;iU|dZvgS!|teYv<=zpEFk zQX;{EmI&*5TtK#MTbbInGV3VIrfZCccKYxw^gP0FaC$to9g)sxws|dZ93{Q}X|wYkVPOvI zYzwG{)Zrb(Ol& zoO>+u6z;RKvQJ3WKq%#?@oWsGb~MBJUZsx2iT_WCles5x(xWcUQ7lW{q*HrvaY2XD zX_Wb4-6!R3ChTAo-^$rfA|?4Oja8t4N_vw7*ZM?R#9fm^KxQ(Nv82-C*fH z)I;|qjrl`4E(XQAm|D&nXYIh*`azyRzRDHGcp{=9FLx%tV()!%rD)>Uk5iR5h z+zl~^m&_OamOl>e%~a5Tle|vD-JPZQ=d(x{AIzuDykUC)a8bPbn)|c@PXo7^s-VC} z0{6e9zdZ9W!sUefo@t7=zb&0Xg5U{Xv3J6ENIQeSnGz^}ceKa0@b`1#3#JUewb&a; zCs@vyl`#zT9Z3@7Tg}uEj+sXtiGeAPIZ`tfl6-RA<%kPu-G#t#BpJAi@H%iRhq=ex ztHL2oxY#@6j0`0jh{?zyjlX@i*&+MEB5%EG$Yr_l)xhtG*q{!?kPZYzMR}GA1QL|< zHz`k`0|A16V6b9I2SrDnd&zKD97=L|bd$q+t-=TS`oIkdoXzF^Vhp1oN&$=*Vl5GS9&-a=VIjUGL0zr*RZ z$GyBA$udah%y(ywvP}2KmjacKZ^TP}sOdy=-v0oD;9en<<{~HpI5(3a2`PUYU60!~ z@_m1W-cF0uEWbq_ke4>eT~j1zFAMY`Ee>8=n-yYPu54$UKJ>TW3`xnNOxfPeCh5ar zfwe@D!}*@!jP%{r#kViG$t+I?#D;UwD$O^8AkTScPXK(Wt)oQv}e7rOw|K@Tc zxXte_xyeg^{eD&B-5uVUe0zU8-TLwEZRv-W(`{4D%FX3(S1-SPAy{v>w{GSu|0KfW z?SxSa+l{SxmRtk7A%=qH)72%*=cCJiPA*4mr%j-1R!&p3 zW_^j9ma{NrTaRw}E9E@BtI~k(7_J5u3Y}V*lgo*eBEPyVoARb^%0PemUN|P70Re9J zc~h?uNH$@TSdi?5F=CbS685qZB41CNZ8crsjm+m|gVcVwR4Sits}BzD#y`8O91~#4 zfC(@%#sqjY&IHYm$_%y~Emx|*&Wn5W}U@>mHvK6$1V{dWAkbQZfslqSe8)hcWfD2M+ z35I1`A^j7~LKpr=!_Oi4f)d7xOcE*O33tJbA%&8ULVbS=>VecJ2zi^Y!deT|SOYSJ zQA3Q?ptyvpz1vJWB~AqJ4pv$gIi&$A8VCn)(#m6kKo7yQ-n5}0z{4<;+(IZKS-izV zs5LFM$v6j=3>z4mO)QZ*%q6YG^kT>O7)VaR2%;qW=4e` zcu2wxzaM`diSYq{K|Ux4=@`WINxvW<#OO>z7^IYanqTms6vSj&3?pg67E*d3o$pR- zeWYv{=495Jm(n!}-~cW}l-9S7Gr~Zo1Ht++7!g2yHb%rW4jFN8Xi*F;z?tZTGZ|!R zLuYbgQ*)*)2VOGDg$klUioHEQ4`w6GHTQ$o`mTRCF@*5s&XsVgBZd|yGs8nxG01m$ zAW$9iCL#USj4{?WfB;l}TkeS@!ca|N+xii|4j3jxk-|S=- zyD)!kSt=aKvtaMq8qZnlHfhC~z1!Aw*pNJeWO< zx1)6SNl-+AS-{DIvk+lK>R?+W4wEOxim$M?cd$(rGZ>sOwYKOzdQnnQArrL>4Zk)_ z`UPu%>B<>X`RkONXgGLkrepPXazP)Xi4=bU{=B|Pp{ogH98}-%;EJ9malpF8DrMKO zgO3bd(lSyY1pgtU6v$OvfHYt2V>)+*+MTc3_;O_9X8`8zcV510$`VVsoA|*E49{Kl z5Wv){Q7(?wE<@Fs*`pOq0G^Tqhl~g(L4Y-bB&ricK?+DUP76Xn0E$W&XO}hHCI_*QH3+i2ZO|#tRie*SPq@4>?5P zcT@dYCM$3tBUWTA&a6{j8Qg+$71D0v>ts4l!HuGIss~#qoQ7cww9XKio}`t6^CSuk za8S}IW|30NBCVKF;CDD!rXzQV{`xR=Re8-a9+yXDX*U)};`r z>ktPRo-V*kw>3UaI2O#g%71FgS-qN9+p1oHbsdt6(GiaRA(4ExE72Gj_GRFgd+o=8 z()U4pk86i*9~^Zm?k1wryM?#qCJc4WJon(vt?#Z)UhfujKe4NLM_UJ%;0J%F*NXtv zKZdRA#fNSc&&%ly?{59wW?QcPv})DjRc-vU-KJW-3s3{1<+5%*cF97oAyNKHnVwZ8 zcB{ZeOxNqC4jZA@D2n{Y=HtS-iw}NEhgP#eM=y(fvuiPPAU6K@U$6f2{LMFEY_aG( zj&$7uf6+M=9CQH*uc~d?bS;0jZqpq~IKaj;)mjqgpmCJEeO3&pil{B;1bXD#0CSs$?7##rw*<;`v}fU$oY-~f|S96?o~ zDqlzT1e9yd_LQ5}OptQP+jb8w^uM}=v#FQmo$G(&;AY!^n6RaU&t~;*y+B&sM8_vT z?apOxZn(21oIhQy>TQ@_E!Q57c9gh5Z^Vei3YWD^O42#6rtj+2bm4+7^|6e$9eNn( zbP}$ej={sJzdhg$cv^q#oVhFtEU=uq1{sr{*RY~o&3x}`9-w#II374V#SL0&-L>zV z!5l{)Uc3offI8d!BVhi04VqBI_yV9bakZ95EkEER5;$p5;OrpW&|)$MFGp;Ecs)NFDnchpY?8=%!+iV zOfg~%8}`8CHYiNN*Ajx@{_C-#zU;&y;S9@f()GK7_Um^M&8+S$k|)@7k_EnnC}7fiHi&FxhOvs5^cBz60mk^F#eN zS6Xul0U}`~2CkKG)eqU`n{IATSBP&R-XeBt*GtgKRL)kV)>&Jd$9F@ z*n8?7D>yS=BTO&ISuE4CILck!mTiV`bC?>m#w}Xo?xhDCmm3XIg#)854{bU!I<6oZ zNFF0~Bow9jFjkuadww!%%+EfzF>6H%40H*<9oK)axHIFZK>(t&J!6i7x1ex9);?XK zZMt)cXK}CtZ-BuL>o9g$u!+`#v0&TUxO8vC>e)G#AV1OUmf5p2Cb)4<;z4#Io`EAFqfl=QJ~%e zX#VA>f8?-vycxs@ z1#}Lzo~L|2zW&!`xA+AJcRoMKEWyQ?n$u&4L3rqSTnIQI^H1b))QEn7n)lYf8u_?~ z`=T+BdstkAhu`Dr91DzaKChN|Q|`b1;i0&UjJ$2Z_>|s#6D4zB72~4!{S9vmn;d^X zlUXkdbUB|Xt;Xc?%ed)uA!0&%AxCU;8`0&%czQ5pDdL8@HXBc2KmL3&n4?R;y zjnLzU5*JLscUtQWrC%CwgfpT1J7sO&kg|C!ao$hcBJ?#8aIUxy`Uzi(ujx{Iyt-#C zF-9GJ5hQzG1aTpK3tIy6?Td7>eLMPp0hU3b3T19&b98cLVQmU!Ze(v_Y6^oVFo!2F z0kr zIYUG~cI}XO#6dzK+bxqI2|$v!wi_e^ zkb-aH9tja2QmfkTfPd_hEwV$xWC&8v*^yx~LL#I>q9jJ*WR#4NagrbtBuP?al1z~_ zq|vvRry&<*s|=)bYL$h2G_7WUK+-A)6zW!apm}aJ3p{tN3c%;P)tr9sgH;hO{cAN3 zcha+3fV<3CEyA^5tV(ciXI4va-5;wm++R=NNnY`emEeuyw=0$KqY~*T@h>G2Q&J5j v-BPkoO8#3ZzAB|FrP8uT>+q^~Iv!oiKj|(kQkRiL10V@CFbX9lMNdWwitV~% delta 6662 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 m_Dmat = std::make_unique(m_D->SpMat()); + saveSparseMatrixBinary(*m_Mmat, "MmatRawO2.bin"); + saveSparseMatrixBinary(*m_Qmat, "QmatRawO2.bin"); + saveSparseMatrixBinary(*m_Dmat, "DmatRawO2.bin"); + // Remove the essential dofs from the constant matrices for (const auto& dof: m_theta_ess_tdofs.first) { + std::cout << "Eliminating dof: " << dof << std::endl; m_Mmat->EliminateRow(dof); m_Qmat->EliminateCol(dof); } + saveSparseMatrixBinary(*m_Mmat, "MmatBCThetaO2.bin"); + saveSparseMatrixBinary(*m_Qmat, "QmatBCThetaO2.bin"); + saveSparseMatrixBinary(*m_Dmat, "DmatBCThetaO2.bin"); + for (const auto& dof: m_phi_ess_tdofs.first) { m_Mmat->EliminateCol(dof); m_Qmat->EliminateRow(dof); m_Dmat->EliminateRowCol(dof); } + saveSparseMatrixBinary(*m_Mmat, "MmatBCO2.bin"); + saveSparseMatrixBinary(*m_Qmat, "QmatBCO2.bin"); + saveSparseMatrixBinary(*m_Dmat, "DmatBCO2.bin"); m_negM_mat = std::make_unique(m_Mmat.get(), -1.0); m_negQ_mat = std::make_unique(m_Qmat.get(), -1.0); - m_schurCompliment = std::make_unique(*m_Qmat, *m_Dmat, *m_Mmat); + // m_schurCompliment = std::make_unique(*m_Qmat, *m_Dmat, *m_Mmat); // Set up the constant parts of the jacobian now // We use the assembled matrices with their boundary conditions already removed for the jacobian m_jacobian = std::make_unique(m_blockOffsets); - m_jacobian->SetBlock(0, 1, m_negM_mat.get()); //<- -M (constant) + m_jacobian->SetBlock(0, 1, m_Mmat.get()); //<- M (constant) m_jacobian->SetBlock(1, 0, m_negQ_mat.get()); //<- -Q (constant) m_jacobian->SetBlock(1, 1, m_Dmat.get()); //<- D (constant) - m_invSchurCompliment = std::make_unique(*m_schurCompliment); + // m_invSchurCompliment = std::make_unique(*m_schurCompliment); m_isFinalized = true; // Build the initial preconditioner based on some initial guess const auto &grad = m_f->GetGradient(initTheta); - updatePreconditioner(grad); + // updatePreconditioner(grad); } @@ -137,7 +149,7 @@ void PolytropeOperator::Mult(const mfem::Vector &x, mfem::Vector &y) const { mfem::Vector Qtheta_term(phi_size); // Calculate R0 and R1 terms - // R0 = f(θ) - Mɸ + // R0 = f(θ) + Mɸ // R1 = Dɸ - Qθ MFEM_ASSERT(m_f.get() != nullptr, "NonlinearForm m_f is null in PolytropeOperator::Mult"); @@ -147,7 +159,7 @@ void PolytropeOperator::Mult(const mfem::Vector &x, mfem::Vector &y) const { m_D->Mult(x_phi, Dphi_term); m_Q->Mult(x_theta, Qtheta_term); - subtract(f_term, Mphi_term, y_R0); + add(f_term, Mphi_term, y_R0); subtract(Dphi_term, Qtheta_term, y_R1); // -- Apply essential boundary conditions -- @@ -211,7 +223,7 @@ mfem::Operator& PolytropeOperator::GetGradient(const mfem::Vector &x) const { const mfem::Vector& x_theta = x_block.GetBlock(0); auto &grad = m_f->GetGradient(x_theta); - updatePreconditioner(grad); + // updatePreconditioner(grad); m_jacobian->SetBlock(0, 0, &grad); diff --git a/src/poly/utils/private/utilities.cpp b/src/poly/utils/private/utilities.cpp new file mode 100644 index 0000000..227b549 --- /dev/null +++ b/src/poly/utils/private/utilities.cpp @@ -0,0 +1,5 @@ +// +// Created by Emily Boudreaux on 6/4/25. +// + +#include "utilities.h" diff --git a/src/poly/utils/public/operator.h b/src/poly/utils/public/polytropeOperator.h similarity index 100% rename from src/poly/utils/public/operator.h rename to src/poly/utils/public/polytropeOperator.h