From 7d140d87c3b623c9a34a7e404f142ba0553a4387 Mon Sep 17 00:00:00 2001
From: Nicolas Fley <nicolas.fley@student.ecp.fr>
Date: Fri, 17 Mar 2017 17:18:37 +0100
Subject: [PATCH] compiling and converging parallel conjuguate gradient done

---
 grad_conj/algebre.c                       |  39 ++++-
 grad_conj/algebre.h                       |   6 +-
 grad_conj/bin/Debug/grad_conj.exe         | Bin 77274 -> 85995 bytes
 grad_conj/grad_conj.depend                |  16 +-
 grad_conj/iterative_methods.c             |  29 +++-
 grad_conj/iterative_methods.c.save-failed |  72 +++++++++
 grad_conj/iterative_methods.h             |   1 +
 grad_conj/main.c                          | 173 +++++++++++++++++++---
 grad_conj/mathObject.c                    |  19 ++-
 grad_conj/mathObject.h                    |   3 +
 grad_conj/obj/Debug/algebre.o             | Bin 6807 -> 8232 bytes
 grad_conj/obj/Debug/iterative_methods.o   | Bin 3755 -> 4553 bytes
 grad_conj/obj/Debug/main.o                | Bin 3607 -> 8397 bytes
 grad_conj/obj/Debug/mathObject.o          | Bin 7532 -> 8249 bytes
 14 files changed, 319 insertions(+), 39 deletions(-)
 create mode 100644 grad_conj/iterative_methods.c.save-failed

diff --git a/grad_conj/algebre.c b/grad_conj/algebre.c
index 37371db..8aa2588 100644
--- a/grad_conj/algebre.c
+++ b/grad_conj/algebre.c
@@ -21,6 +21,21 @@ void prod_mat_vec(Vector * vector_res, Matrix * matrix, Vector * vector){
         }
     }
 }
+// parallelisable
+void prod_mat_vec_p(Vector * vector_res, Matrix * matrix, Vector * vector, int beg, int nbLigne){
+    if(vector->t!=0)
+        exit(TRANSPOSED_VECTOR_USED);
+    if(matrix->width!=vector->size)
+        exit(UNCOMPATIBLE_ALGEBRIC_MULTIPLICATION);
+    if(nbLigne>vector_res->size)
+        exit(CONTAINER_RES_DO_NOT_FIT);
+    for(int i=0; i!=nbLigne; i++){
+        vector_res->c[i]=0;
+        for(int j=0; j!=matrix->width; j++){
+            vector_res->c[i]+=matrix->c[beg+i][j]*vector->c[j];
+        }
+    }
+}
 
 /* VECTOR_t x MATRIX */
 
@@ -47,6 +62,14 @@ void sum_vec_alpha_vec(Vector * vector_res, Vector * vector1, float alpha, Vecto
     for(int i=0;i!=vector1->size;i++)
         vector_res->c[i]=vector1->c[i]+alpha*vector2->c[i];
 }
+// parallelisable
+void sum_vec_alpha_vec_p(Vector * vector_res, Vector * vector1, float alpha, Vector * vector2, int beg, int nbLigne){
+    if(vector_res->size<nbLigne)
+        exit(CONTAINER_RES_DO_NOT_FIT);
+    for(int i=0;i!=nbLigne;i++){
+        vector_res->c[i]=vector1->c[beg+i]+alpha*vector2->c[beg+i];
+    }
+}
 
 /* VECTOR_t x MATRIX x VECTOR */
 
@@ -69,13 +92,9 @@ float norm_vec_2(Vector * vector){
     return res;
 }
 
-/* VECTOR_t x VECTOR */
+/* VECTOR_t . VECTOR */
 
 float prod_vec_t_vec(Vector * vector_t, Vector * vector){
-    if(vector_t->t!=1)
-        exit(NON_TRANSPOSED_VECTOR_USED);
-    if(vector->t!=0)
-        exit(TRANSPOSED_VECTOR_USED);
     if(vector->size!=vector_t->size)
         exit(UNCOMPATIBLE_ALGEBRIC_MULTIPLICATION);
     float res=0;
@@ -84,6 +103,16 @@ float prod_vec_t_vec(Vector * vector_t, Vector * vector){
     return res;
 }
 
+// parallelisable
+float prod_vec_t_vec_p(Vector * vector_t, Vector * vector, int beg, int nbLigne){
+    if(vector->size<beg+nbLigne)
+        exit(UNCOMPATIBLE_ALGEBRIC_MULTIPLICATION);
+    float res=0;
+    for(int i=beg;i!=beg+nbLigne;i++)
+        res+=vector->c[i]*vector_t->c[i];
+    return res;
+}
+
 /* VECTOR x Scal without creating new object */
 
 void prod_vec_scal(Vector * vector_res, Vector * vector, float scal){
diff --git a/grad_conj/algebre.h b/grad_conj/algebre.h
index b1a61f8..8ee4f9d 100644
--- a/grad_conj/algebre.h
+++ b/grad_conj/algebre.h
@@ -4,11 +4,15 @@
 void prod_mat_vec(Vector * vector_res, Matrix * matrix, Vector * vector);
 void prod_vec_mat(Vector * vector_res, Vector * vector, Matrix * matrix);
 
+void prod_mat_vec_p(Vector * vector_res, Matrix * matrix, Vector * vector, int beg, int nbLigne);
+
 void sum_vec_alpha_vec(Vector * vector_res, Vector * vector1, float alpha, Vector * vector2);
+void sum_vec_alpha_vec_p(Vector * vector_res, Vector * vector1, float alpha, Vector * vector2, int beg, int nbLigne);
 
 float prod_vec_t_mat_vec(Vector * vector, Matrix * matrix);
-float prod_vec_t_vec(Vector * vector_t, Vector * vector);
 float norm_vec_2(Vector * vector);
+float prod_vec_t_vec(Vector * vector_t, Vector * vector);
+float prod_vec_t_vec_p(Vector * vector_t, Vector * vector, int beg, int nbLigne);
 
 void prod_vec_scal(Vector * vector_res, Vector * vector, float scal);
 
diff --git a/grad_conj/bin/Debug/grad_conj.exe b/grad_conj/bin/Debug/grad_conj.exe
index 9bf973f8c18faa718cf3d1a71920c3af1a2e7010..d331d272654698c2e7412c4f1c4f81e709f52501 100644
GIT binary patch
delta 28231
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%0AeK!|ZZVhp>A=wXza+oe7Hmbgc&EtL1wS1aN*%#E
zChur5VEj4xWs8<1Xx{weZjfItKknt3D-G(q{Azr);KO8{Rtd%plU-Y_1b#X&Fm;Qx
zf(+=CX<hJha(}BT<Il}oTMsfZewbX|k)s4sQM&OsiwelEo!?)~WCw)@%j*Ro_jj|j
z#vGr_+8HbfDo_8HC_-Ju-zo}eRQ>olxv<laA2f>$N*N5VHyvkf_^^3nXCrI<5AdY+
zf7LHg`U8}H1EpU;=_gS70hGQ2rEfs#D^U6Zls*HcPeAD-Q2GFr-UFfQRd+xbs#~D+
z1}MD-O0R&@OQ7@uC_M*C&w$cXp!5VN-2tUrpmYV4E`ZWGV7mUlY6h6`Uo`<r$3W>2
zDD42HZJ@LTls19V22ffDN^3xA6)3F$rDdSB1e6v5(e)Gls|tV^6aK66Kxqyr%>tzv
zp!6R`NW1U{l>P#xKS1d>Q2GUw=7H8m98lT^YK{k(PMZLNN@<`Ome`laGyX#=u?Z9Y
z|Ns9#V3h+nrGVI*4JS=u<N{?Q1_uU)f>o3GCW$kBaM&z(=qBT&DIe4ma|$vN6|59g
z)3_Ka6s!~&9KmE!d|qlr35Z_+A{Zv~Pfe{)OU%qkO;ISxS4hs!D@!d(Ph}{{%uQ8D
z%P&$WD9TS(P)&iF#K4eVl$ZiimZeaXT3ng~GAc6<q@cJYwLl>;FGWE$O`#ZMCqzCG
zq=F$y!Bzp{0P*b?EkK@7P18|e2uUq2QOKXXZffA9X>%sepJp*>n)2k|)3kIeR8zE6
z(-gE77@#a$1=TbiP^S;1mw|!dfy2j)#~oXLJh3}qHrZ(UwfalJ4h%*i5X=CjVSHNC
z0wE6WV9O6f9U(x#0Sln&&>glQc=EX!VfA8V4h#p&A^2}8gw8<{gURWXIWW{g#T82&
z7_LIud!RH-9f@>3*z#XcL(-uRm|o_<u&daCVQMkNK_yTcWOz6d8^lM(!j%y9$YMfJ
zGm*s*?0SfX=OqwYzTAOfLWu)IYKa4bRfz+`rBVk5kmVpT5Dn4@qbHU+Fn|odkK~~6
za)^46I7lrB!`L8wo_T4Rd6^}Z41S4z3<eAg(*&Cx7%n$KFiVRA!-eL_n`XIfn!SK!
z(gH<U`~UyvfhrDXJ_V*AE<P4-ZUzko1_n@~PH~)Uw?I48>HmLwP%?GqbExKH0WZ|6
z0j*tg`u|@PBCY@$-2@F>`k;w{M%p5r{{IIpSOX~qsRIrCgg8y!w?LcGY4R&DDYnp@
z(P^^ZLNPtiWPuH+Iqm%aKWH|H!I6)nmC1>h)uox4>G5I5qdY7upjI?!X<M_)<h+Ga
zY@qI2sO#iDsBX{*;wIPs|0_WDA?waZ=mt$UvbjxOw@``=G*=ViHu>B_DL2ppxK_9S
z|Fe;GGNps8WB}O-TF!OB?f?G*6!{#uybB`(gM#~HzC}`ODU1vZvF?-g7MU5xctX7o
zbBhyL1K326Pn|sf|6dF$_h9nO^C#OclAU~E5r^ak@BjbPKr8EDa$e2M%n{s24^MVn
zBn?u*bSG@`twl;qdEt})Es|qmjF>F9SV<{3;{X336i51j?F4xO6eFz>Ag|YhLg8}6
z|NnPUl-`6Z1qIE7$p8N%P~=0v@}PJEh1ZG5|NkSA<w5ZjfCy;~Mh1qzk^lc2Bdf^=
z8!`F!VooN3sL5<g<e0poCaW!xWAcfb?6yQMtSRdM|K-RUm==R|fZTtAk%56T`v3o9
zDDsEk@-G+}7}iJs{|{cL2Me|gko4q#^Q9&itm0t$6Fqs}k}xKf_{ravm@%D+pRBi3
zOKL+rRF5B@Knx!X1IU9Wpk<x$lZ%!rv3`mF|6gYE!3FY@4VH5#y@>z+-x=fpXFi2c
zE<P3y?gT#2GEGpX0mZ3A!sJIwt(bBWCd)0;VhTu@?6u5_sU%@?+cG_-BMFnYEwf`%
zNu2y`nG;h(;$*Aka;zH?|Ns9mxp14r<kIEdOcqI#4=wj&`jI?YXoVhIM9TmFM;Rx_
zEf=30yTYC6Nb2NeE3DXlr2hY}#RL}pyTY3FLi+#z@sk&B6rLQg(tznj`sAjST1-3{
zlh>`ZW4e<&`Q1uAra5_&<yJ+pF39`;|MBF7ON1v+SmnTEQ8f9|DnF)<qRC3Domf?h
z|Nq}P`Qmno$&IVknHH2xUbR|@=}gJwbE~zOK9o%UwOWr!p>(p=8Yw1|(#dXX{FqWo
zCr?|W2cnLx@nfA*`v3pO$&EWCCL69zW)dlzJZ-HK6GQprU2C;iP0IiO7X=&5xK5c>
zq~iboi(r+G>y%lyRQ&%xV{+pTnaQo|<e5Y&Cofy4$D~p{`Pw=?rjWYHZ0q${TN?lW
zKMoF{!1c;ZB2AOa)|)Z)G)-Q&-i%45dGfRMZcH&Pll3+jDeY*1Mx-MjM>CTvpF|2D
zhvQ*B7Eok%Ff%ZmXqnu!!HiX*_5c6q$s1P+Prk50f+?VT@~aJQOebbeHrklQ^k&xN
zc^l1GQ)d7FUpx8YcB#pqH~KPF%$e-8$&Km2oXK6Al$dPhPF}akjJ0L%|NkivUu~{u
zi<tNS|1#0ZdD|r?&)?k0nz8x+e_618`z@AC23saqZLtGUySB)&25kBNzj(6ZDzV9*
zx5!G)*z*5BD8Ye}6e#_GrjM3v`TzelShw?5OD3Cblk2v6F&)@8`P5b|)+gKk|GzSM
z;YQKPeA|?mI<`+X+GfSHXZz&5ZFWpKJ0`E&CdS&b<NyB%u=dB>6j_(-{Qo}>%v0X(
z%DQ3K|Npv^FK(Bf+_7DOX~FKvtF|jKo!LG4-1aaglf9GGc7!qA**m#zM;K?zzW@K#
zK(2x%eWsQJli79}CG~&?%0Lnf3=BRTj0~Wa*Wkr7P_YyaMg|WiMus0q>LfTB8A6yC
z8I~}D>Klkc6HZ1324+Tv9Y|sl?2HT|%##_PYSp_iGcv?5GcuGgGcq(WGcxosGcqh-
zW@OmF%*e2hnUUcFGb6(TW=4iD%!~|dEQ}0FEQ|~mEQ}03EQ|~(EQ|~#EQ}0YEQ|~*
zSQr^LurM<0V_{^tz{1Gz091A{Ffe=r(X0^X@USv6$gnap=&&*}*swA(c(F3pGsLhm
zGNiFGG8C{fGSsj#GPJNVGE87)WSGUu$gqT!kzoTXBf}0>MutPIj0~q(85ypyGBVs@
zWn_55%E<7Bm672a$Z$4B20k`M1_?Gs1{F3&20b=L1`9Su1}8Q~1}`>7h9EXZh8Q+R
zh72}Fh9WjbhAK8jh88wPhCa4>Mur(|j0_9d7#UWvF*0mpV`MnM2662fHb#aQAT~QA
z0}neyOoN?~!G@iYA%LBcA%&fhp@N-}p@*H3VGcVZ!y0x*hCS?z3>VlL86H5@6AayY
z+6FJd(5<I!@DdDNdj<vyg7-Yb^bI<UqMI-8*~?s?TacNYVU$~tsh5%i8aa_<@D1>c
zcg)F2Pb|quEh+<L2WgmCQEEzQaw<rO!38YloS&N;UzC^!ZkjN7A;gL^t03y8gT>r3
z^AdAlLJSAMVxD=KC7{&|3=9mn!2&_4$zbak816#(Fxy^$`N7GFB_&WNF)+M@h^6L%
zX8IWz7;G3p4i5))sK5?{Y|#KEKzz6!pCoQMZ`U9{S07^|XrM8OFff8~ZgE+1Q3*s;
zgMpEOAg(7y5e?PIgItL0Y8wVd1|&TB@<GGN2@@BvA24%ZC@=%{dp|QyG+^UrRB&XF
zQE+6i_~5|6BH*}L@X%YvNykKzp0PtipMe3~lw@MiXJ-KKm|<Yhka1vG32IV8m4Mn!
zOblJzF!?KT4h-OCC5pVS5KP`i%YorE+h)T_U5rfH?30;J<g-Dnn=E)Pe)6>w{frWm
z(@t)X1?^y9<jP@UU|^ca0ND$}RRrd-a7s)zKIL7Xn^+QGmYN)2z`!V}F6zJlYSJ^#
z;bvxF-~?-yMA0k>*9=;929@LBNlHy;V3eHC0J4UM6V!!(@dUU^L>(AFD?zw385k8H
zN^-a+i8?T3F)%Q2*Jm*>DnUdu7#J8h3X1Ym!0yRSEMZ{O5*Bk{_yn?QP6OOUS}+$$
zfFz(i7KrDxAnxPf$`^BBm<+NYlY!9)Vtx)+mzV=X8b~mUfzbpaSP!<fxHK1RDR>A2
z#A0ByW)*i}s0G<D=Lg(sYpB&cWvR&}`9+2dj8G949<WvhM(Y`jpg`c@lm}^r%JOg-
zi#ss*fNaiWV6=nSoWsDtQCwP&W-%xpoSMWP7(ksP#yNc~uy}C7uo@}?x7rECYN#v^
zByOA_b_zh^2FerRnlH}nzz_m;m+Rz&({lAbAX9#cJ22#dJTT`I$N}Jh_JKM863{-7
zfM($?E=>wcO=e*9gGlFa7o`?6Fb0B5VVao1z?YX_1o5H~17ie8G(*CHArNe~D=Py7
zC)n%=h-L=vqI!_-NRT?Fi6vac5)KTGQ0GNKyimZvzza_#;H1mIm<Uq8Q^J7(RQNK^
zSp_l|l=&DFq2@wtf$~@&PD}x5Vw#x4bq~ps)Ov_585p*JA|@N8MMctq0o1=_oTJOe
zz`zN%CmY2cD31ja^w|&-IUqp~<?%q=kOwjl<OUx}2L@1gg_|XlfiZt_;~B~NvMG`d
z46)#V>H}E>&W&X#7D0I|JjKb0ISh<t5Ysrgwn#cKSV4oW5@LN00|S3aYH^8UPI_um
zQD!m&W8Ftd2L@9n1_s7C;_M6z0^o?KhnSxuAP-tx!`J}fW^hB&dwfx9al9!5V<SX3
z1zFgFfw2i9oB+!I42;c?6cWRon^;nmSz*M$*a8uWU=WO8WMEKYXJ8Ow5RT8xPhwzt
z4{`!SI18wJ(*tcGWSl(bY&IvXn0zr=;M}{(3ol95vl}rmFo-bMFurGGVBkp3FU>1q
zV6J6c2`VQ!k`wciQ*&}sQy7@*z(On>pqen)KQzeMm4Ue)EXDyA3vqO3U~T{l@PGwe
zgM$2n7?>NuLIMn&AbXgb8QU2d7+6_AmNA3EKtI2Tfro{~2(<MPT(PsTfvsjqW?*3l
zi?Wn3uyBCHI2c%2EGECZBv#MJ#K6D|2?Yio7M?bc=JL#xk_-kGK9EWVmW<TQ^o$Y)
z7Jd+y1!R~2NEOHkkfCh8;2>mR5%OnZVBi7`h{h-9=ViqgBo-y+<fP^>F!F$c3N(hp
zI7f|{fq^@TfsqHqV4BEK&+W*-$fLsyDwkNeE8r3w+^Ge{nK}7+42(P$;5vbaJ1;4q
zC_kBjkq6`urilXF;1&&xE5aRIl2}q&%)rR=8(hpuFtD;XGJ!&<hlzoK2ktNiMrl16
z2L{lf3FDl4XBLQqq@fN1xknnwJy3BZ_eewC!wU*yNO>#+aZv(q5d)(f#Gn{n$k;Li
zqdY_)g13NyQ31jZ;dQKFU{q9NW~gUini#;F&A_M(F(QW-T2`w-Z1La)mr+FwjH(cU
z45$Ej;F^I^4I=8oo0M9T$iS!$;X3f<X6D5gF)(UC_&&V3`IV`8d8r^VO^8?u178v&
zgA9Wo3j+f`g8($CgMx!$KN~2iOEXR8I1xQr{~|jVtj2%FG+FSR_T=n~hn(3!iPt5u
zB(bEjAeDhxd?y0~16T~y)?{EVhV%Uk7??XiJXRJE$!-hHBaBRwEiT1zfVj-fj58<C
zyQHoe4oZEXU}a!o11V+zr8ai3C^+eY#6amT7L;@a)KHV|>d7LPRqIzXf%dhsvVb%p
zl4c1gY33$o<}ok|gA9Rrh;hyoHU<Xn#G>?Ms0`CYFt?0>Q5Yn}G?9e|lFURv`j|@^
z7<s@BWQ6knFz^&Z)14?I6GJ@%bIA(^uo7s#U<3yZbIAop9(a<Lhy^*l<P0MZBzEJC
z;xqH&ON&z(7^NUmPZ$tVkmh^}T<!r}4m5dzq*pqYsh)v>x#SMI0=Nm%5Yulk@W3*Y
zGQ?Xa7<uxN;&U?7^HSqW@=F*PRUqO=pyGL{@oD)*@u2As21eD%pk8;$0Y;v*%%b9w
z_?%3*bUi48szK!UK=p#mEJ%cCj!#KVODxSPVPMpRSg-@CC@&RkI6NFoAkteHd6FOw
zGMmK)^4kVRo+JiFa|mY*Bab5kqs0QS%nC-Hiuii4<1Hc5OBi_^A)2irN<J|16frP{
zL1Y&&@)R&IhC?`W7<mdHN+TcwGZ=Y5c{CEjo5ILb!N3>=;Y?uU$!1`Tg*fmABdm25
z2MXJI=8_IZ9!O@42MI8jv@r4%I2OP?mH-jG!T=V9$4nwb_yPk@N`77{17i}z_$!P&
zpso^X*rf1+lg|kTh#cIER9;B@A7J3|b&QDj3~>!|4Ds~$i}!W(^kZPmSq2WL9!A~`
z@(v8H3=9nSSQ!|2G8q`PAeQ}MWZ?ZO@4%4Dz`*bmDy0LF`oYM+o3G%&PzTDrY!F=r
z5UDSW47`sO9T>_P7#Q^Hp>hroxi^dqyirOH3{M#t7!pBJ1q_TX5UCf8d|65k3?L53
z39cXpbIB7%1_oYxWe0|E1_p*2kd90SMsJAR14ahEY08k+CrFDwMEDN47W4;`X?oxS
ze<KqE13ySsAe51TVH+C*gCK(tw1is?s)*)*OE_+3a0%Ccg_p|)+-G56IKTq#q_AG?
zXY`*u^{N-6$K(fBW0-8TCfi-p6Yv1Fc=%Gl^-%_Qzt-fMYbJ7^v>X^VgCypBW@2FA
z1FMmNsA1p>n|$t?s<^PW0|RIo5XjXEpv8bp6LYv_v?p_2S9e;f?Z5!)PczPmVTNhf
zf@=qvs|C@)!o5b@fdSMd02!kV5zOJ<sy(^*y0W~qjsrswNcEh#aAORi#&9d@Ox}83
z*(6s7)^h#|S7QxRQ>^2_02&Jb8EykJyhdj-&kbdP+d2*mpkaQ-ISMQc3|t<Q?QbZ{
z@6dH%0FCW4&Pf8b!y%<&97HDrm;dC(8>$updJYVr@qNZQyIB|*`20Z*Ob01vn#jNx
z2IfIDuyD)hIWV|^&Q8c=V9cC+?}k`?Zl<0C18C%*aSj(NOm{9+H)k2BRhc^*T-CF1
z=j%BzXhC)7L5wV6VBk&8FQ^OycZV1l3+L!LFhqguoRbb}go8Sk`9+!OpfL{y#zMHc
zsmbvmZ4C7=F&6GUdJYVrGZ8>xQvxwPhk=1Nttd4WW_rapJqHFQu<4WFj;(+i3hEVP
z=9R$I)=TI+Fo1nO=L%eHJyb2XoIb>|dXQ}maNEEwWS9w^dHN0vpg9i4IsaK17`VUz
z+XFEn2WnezWpPPrE(7BXQ3D4C(0m8u98ebIbYx(h0gZIdBnHMA5M3<X(gqF;d!a!%
za}fhW1Oq6Qsv9^k_<=;T7#L?k90N*%g2|qFB@B#<Kq9vd92h|JC5&@AKz)Hk2F68@
zXklOwie_YBn9Rn&Aj}{F&3_%BkpVHrO?T=UC#&Bxmlb3bVsns~?j*@5%)r3S%D~KF
z#cj>)Da<6nz`!#(;f|ynuL+7EA0wluFi0`KBItmQ$s6uvPd2z0t_RY<%gqQf4<yS6
zVKOlAt1);AGcX9iv<ZT=32okRPmXc2;(d|H5ALw@3&A9XL6Rbq@7!0}>@aB-Bjc0F
zj1M-O*p<%TeSP=*-Mcvy8JJj@CxQs3U_k~Z7DhHN1|}9JwmA?s+kuMowY#5!6i=S`
zKx*>!2O5$f%^(dBUG`92Y^@cO9;z5!-yMmN(}Kw@ur*BQ5Qa!KgXEduQl}={KlEq+
z1scs@m_51RQPSk650xjscq9`6YGgBWGcxnq*rm5zzkdBj<-{nCW{%GsN*uP491}V8
zIiBub%h9}hEt8V)?zJ4YPbYFHay<1(=g{BHoV5n*{wHkAvL_~T?BOt2yLRnbCT0dk
z#%qj|vmec@2Q`?Og&0r7tUb%2$dS%r%VEFvI!7}{D+k#9Cqa(ncnmhAiR}xB2Nq&7
zg?OonjY(M)ECME&B4NVcIG%Atazt``=7{9*dCKvbBb_51p*sMkte!*VGn0}ilOI^1
z5o8aO35d;f9K>d8V&iZ|XfpuGFoFbC5Q5O?YGV7slqe3i6J&2BhtI}!6Em1Bgqa+K
zIVN(<XEG698_5(Y%w!?XWGTXABEliU<SgpM<SGi5<4`=sA<X0~+{~QX1h#n|8?!Qp
z&F9@rk-|@zY=k+kKjoOnaeepG-At;&%)C#c)^gY~u`)0+ewb|kxD`~79D96*F>>;x
zC)tK}>AOMBgQN?vZ(ynE6evwG1@MDy@M3%Ekj|tc%*3?${}V>W$rG6UCOzYoj4xrx
zOY#9V*cd>azx*O7Wi*-hnfPYOXU7>gv%EOQ$aIBc8W*GV^lnZ@0WJo;w9Fh(A@4Am
z@l|L&FCznkFdJwDR)GOB-X{&JMcI)>KpoyD6cJ}e28LfKBH@e-3>h5Ax{?_g7<QtF
z6f-g~fVS5$GQjL=HDhF8n8JyyZ3-g;!$-J?UP)?2323DN3rG!Uo(D9HXgpnzlTmc?
zzBe9|jb1CLE&`4IGC<DIVP*skVuEH-K|O8+UN^b?wKC(L$+KT88=r=%2kjJLW&}<5
zLIn`Y8LmTxco{&J8cp8#Qj+n-<o@@{ll9(kv4T#-;huc(y{K9=0|Udq{|pT2VD+G$
zG?F0<3=EGL85lHpCOiC+Q~k!sz@Wzi@(0NKFrR6FML?E-##_~3J_};(nW!jg4DuSt
zL!fm&%#6`23=E+098@dTfy`xOU;xeXGc&%Os3^*~XL9~qWqy!9LB50d^WWr!Z$()_
z{xX`J{a%^z56CzCYe3yCupdG7I1|WEjHQ#A-zhU);hXI6OA2%h68{xGkgGv%1daLH
zz})D;T?6U_fOQwZTnic_hPd`H8v_F$s#8G+ATcs9NHf7)`vKxw`S;42AlE(v_0qxS
z-C~4TiK-vudRwsT1ttsrkY~FETBFZAy?~QZdh+@A>`WR=lW)A2V-sa!V6c$_1$w<I
z69dC1DUey9KnIy-%f!I2R2o^tmx+NvS_WApl8J#K7eyqEiGkrZiU?@1XooDat|lf1
z1_3!_kxBJT3=EklLi3my80MgetYTtd_=X~~jfsIlLLS+m!%Peec_<?1nHU&E6<})O
z!F4eM!)>?-Bz*~j0s^E66nUrF7#Qqek>|+;kGmC<8J|Luny(Nn7lArUkkg|;VFtsX
zqy`##ha@!*kUrKuj0_A3ljpyd2j{B;Ea3CF7?>Hq;EX{~^B9t^BqoFMl?o^>>p^kp
zzziC70J)U~)O?3o3#acuiYPE2wECNY;VBbnxD9f&6-4A669a<=JF>`k(0G6%G!(#k
zv6usjDG6p|Z6JeeFbonPWDpYrgA9f_0T|{;pqT?2&jh=TfdS$Vkk1q_3`)T;NCC|t
zs3D+S1ZINFQNb{$0^OW?1`Q$%(!emN2i+hB10u`;jjn+@VGyr^Lb`qqhCvoY7-WFq
zpfwogI1piuNj-)^doT?0Ai^LE40A4Em=l1-98jh}i8C7vgC1ZQ6oF#UUnT~I1Vvb>
z&6J=xdBrC=Hg?dFc`9(x2P%_4d~#v~CD8+_AW@n4w1T44;?$A@s-P?aDkdRi2Lr<a
z)ya9E<=8+2mKQ*3<+Ln85vB%H7at!F9#9K_i@<bVP@R11bDEY9GXui`xFje!#xpZ8
z1gOIdfGICfo1FFKn@tW#Ib0H?9JHF>K?9~7B(fUh9k>Y0fCTl)bG|xB8~_=h1yc@_
zY|xzi?W-H(oXNJ|lszZtfTTg0OfM63WS@$;1}7}nLq$wk;6V=+F<AjUJ&&0IDq{9x
z`hIpsWzQKH#(`QmkfaS&Y6{BGC?Y0HFpN6`HjZh5&Sb0aS*&M3rcO@$E-_u6laYP$
zxnEq9PrQ+u-0)pyq5%td!J!7%<O%QPv~DvqFifxj`3MwmpzwLg%)roK2@`<@!3CYk
zQ9qQJJXj{z{g7k(4GKd`P~?NEccurHlaKvyV~Sy!%=c5So`;2jA;2DH0LVyL76t|Z
zM`RH_76yg{6cGm&28InNBA`<T1)Pv|rLZtCIKV~VPO}B60hRd=Sr{1PCa?Y}$_i4+
zJh||*G+QYP1H%C)P*pC`4rYQBgZv89e!yw6%r7~%i7X5ZA0X<MfSKs(J~&M-`z0r_
z9<<0V7G1KydGeZHZj2d|KmSs;2*`y=gFFwa&_HvIkVb2KZc<TBY92#FK1>bV9odup
ze!Hn{D1b?TG@oW+U@$0ziNKT!6inXrTZw5w5iADy7ZicifWlyzC<8;l<cTju8GlSx
z{UgtI4HO$4VE;d1VPGie1Sv%Je?Z6NhCgy_pn1>@ogj5KOsotHAK>ah&Jbp0U?}K<
z=>&<$vobJDfQ!H!wxM(Kzdv&Ix~vQg3wn{2TeC7SH1r{hcz`TH5ea8yV0h4vtR{(-
zfk9vbvPd4tArp~B>Oi_CA&d0HgS1US7Mjk=z>t6<vY3^DL17xQnsp$N>Bu5GK_W9?
zA}~KT^i2NsH;XZ0a_T?j`X5YaS>Nmc8=8pe7YsF^!9<k&Z2AF1%_<CY-e9O%5RIYe
z1%{#-7;2tir~%EtqB`gS)AV)hj8gTmA_&yrK~Z5=g<<Xu40DSx)Lg+(lYyb;0zyqa
zq=+?(!BBJtp$Mub2t&;Y3^iUDYK~y2aY9nV4ldzM4@~a-2kQK-{ii&=kBd=|*-V9P
zdKWvR;$+tU!qeF}Kq7o>lS{rSGMh25O@8oAQP1ofD|$j$f??Ggn3~D;|D>6ouuh)y
zPl@Rc>*NFfl%_H<3Qhj<PiU$dqtIlD|3Xu}K$h%aogDCAY3d|Kp~)@(g+!LX^uueF
zS*%mvF)B^|@Lx!{1w*oCsyd@GW5HB!MrFpdsrih`(>F0P3Qax1D8y(p^){n2lMd_j
z9wtV`>BfwV!XiBA`b~Z?OjluKRGj{tkx`iG0n7A1jEqW57g(k%Ffl5r?PEdruL*{K
zH?T|(V`5ZdTEQ~CiiuIls|!Pq28Nyz3^ghkYEoFHA7WxuQuV=5D}$ldV)}O`MrB5&
z>C()M%8YE&?U@;sIlsUv?CFwRjM7XGn5U;OgZ#!ky@Q!iNn{^P8Wzr`3{2BwSQ(Y3
zpJQee@>+l){R5+Z?!!<6>ffMdsV3&>NgRwyY9$zI-(Z**!#tghg;A;A1zoKP=nN7R
zb4@{gc&G?;I7DL>s8~a8#28>SVt6o2-hkl>9!B=*2iO^vybLf5)WI;21H-^I7zQ$c
z&6A#9%E&0m$S}R1kx^OX8+xpoykVF=fss*44^$H!V`X4iAqnmFfdm+?vNC}8kAV7m
zpynn6!y{G(hJabqA8;@#v3h`93TqnqGp&#W_5Pjszk`)PLxqtOG}gh%%ErKu0#?rW
zMI1CH!2sHi;J`hNi&1In5=J2=FV^X1T#QQf_!?*q$@#ejdYLKe$Eq3r|3?aPqX5u!
zH@L|TEoIFl;0<)BhzV%dIyCAa#hj@KJQU$3*P|P4vIRY0O+n|rpcrIs0*@fLL2z?G
z;V8t$zyM3fObqey$*C2YB@6*GL16@HK!DU}u`w_-%&dnA#TS&8BxfWR9e~%GAVs!p
z3=AQs9l*W^#R&rgs5oB%&6yC9EH(y)0u+&IHU<Vr#|vgzJIMW@=ztIZ&17R>XaP-_
zgJd8Etz=_hfORq<B0E8n4B+z?pd*wg*ccc-p!nlD8v{cQ*l3Wtc+jK_$mJ+%p0P17
zfR;UgjDwgA+EY}+#J~WWu!I`T$IieIfuc={oq>S^#b*ZW3=A_+)cCVAFxa4|Ndv8<
zgvK<)vSxM$hCk3~g^0{zXJ7!2IDoqT5TW(Z(LK-!CJ>Q*><kRBLJ%TygPnl^Ry0FI
z-hvE*rUr-zBL@S61d4;?I2ag2;3DzysYOM3`3xRlZ#ctZ$dQAAK>-|$Fp($@$dTrt
ze8|KAT0fiuI%FLsedKX4Fmz0R$ipaKUk!3N0|Qc0nG6yUKo(g8vIHe)4uaG$C?M&&
z%>gM8Kp76=qwgFH44|<}MC@^b7y3a4L?LRV>p2-19N?Y=r2tD#28JDAPr`iUi=izZ
zLnNP*fx!pG9FWPdF$;)g{hSO84IH5I0G#CF<12FFr{Cgb6sVua$-oeSqI(l30|Trv
z1JS*YlY!v@++Co2SIoe`umdGr&v7y^#Gsh-2xKRU2xz3d0&Wh-$4o9<3=E*1Dxl+x
zA(lyVF))BuzaYX+or{6t28uRoE(Qij*I0ppiBTL>e%1$ZF)*ZXK$-;*lQOs%7!<e|
z7!YQcg3DFp_+17PL5bg^Tnr2zaA(J-fl3($1`ZVaFLN<4RKV4MJo306WDo<gWgod1
z80MfT`p1QwK0(?PL1U9B3C@z6fx!gDLB8A!43NPkSgHu;W?+C+sxXlx?s^6WSQ!iP
zeGNAQg9ALuL6-G!GcbS_6(T}*7B>R}tRW52wVa!QApym&Te%q+1W>$jmYad$0*adZ
z+zj>LeUhLO0b<ZcZUzQehXo?S$iu)80UiQ^xtfQEfdRBP01-i;`Go~=qvMN9ijwnl
zavD%lngi$t1-OIai;EILOZDp~peO>JB>Dnw5XkpQJPZu5-Vww>1w0H4kU=t-gX(x7
zcQGKm(Z|EU0P99Tbb(GhZD2=arIehU_;}Fqoyf^*1rGxQtg#Q#wgoh=0WWOg)5?o7
zOHvtrpg8&@4+8^e=^rA3uJbT3z=qZ!=DgrxV1TrLV2=LG!@#fww2lU$jhPqHC_#vb
z@iIV%I$_!rco`T#BiINv)}Uc-2IQ*Ki<g1H0wokfco`UGzylu?t_dJr0u1%g0x>?Z
zBtMgZfk6R9TNy6{!wM9UHeLpX02JR(02u@~IzBfwH@Tpa;R1@9rMwIbutq2(JT~$&
zFo2Gmb4B>$7%zGg;0eh0D4FUTF9X8@6r&mW7#I?!=L<2)*9-G8Fu)q55L;BBQ$wJ#
zA0lGF$G{+fQv2BRF)%!UyB`!ZetZnzbp{|EAk4rJ&Bwryff5c`d<+a6aC72I@^kW8
z%TtRoW=t0nW;9SM2e}F?4Jx=nhPLuCFx)_Kc|YIu3}Hs4`uThe3??Y$-D*At@WxI=
z2HOsDHcBQu2K5>u&0ph#Y=?&EiZ4$t&PmN<h(NLP5sEHQMokebEnsi}I~A71zVI<H
z+?mcR!YHrB#LvKx0G0&#BR)AXCnrCdK>{8W@t{Rx3=9kfGp2`$Fv`^n@`L<}oTXIw
z85kh52QcG}`572s&3s7ky6`hF>_CZvAbtjhA8=bhW+sD7W<oZ(jGuu4Hk1J|r>P!f
z8Hzy*_!$^r6BD4eMJm__D^LPu3+QNf6kP}S85lO8h@9hRU;u4-L?qW2{D?Uii1mN@
z>lqk8Ct-tz{~$tw0_bfFH30?&*zi3>jhO%g18k&%i6K5cwInsKjNt={6I}%u7+^g#
zh^}CeIpCOqg=?$;!}OJ+jH>k=C|c767#Mg^{L(1Ez`%i$m?jD^FhJ%DK!(K^XQt;R
z<}l2Fn-iZ44mO4da1l_H%oady5Q9Wkf>ynQTAGM9)g1u_1_=~*ei2|`a6pOM{~&D)
z0??ueWRQd)dWo(j2ogsw<;(>kr8&YbS3w2_4aE#tPXnYOSdf7MHkJhmxJ0l)$O&nJ
zAOph`cnHNOCgm5EFfeGKIB_1xXt)}X$$JE+{}W?Ws=p}6zz~8W^GpzueG#S3XF&#r
z7bs!(Uyy;}14>I>L<myqK(a5$1|1;=h7%~R@DyTTP(f*}M7jtuFf2f^K2->E+$|!h
z)`5&hQL|WxfdMkB0BVUzfLmgFgcukOpjdZV2o#jaLG@Y)<S=BBKSGGPQAhv_2{SOj
z#vvghio%dw0OEl#1A~q*1A_sIU1s&d3=Dfv9O)v=z_0)`NdfJcF)#!QL##)5Eln7`
zZB`-7z>tArP8(DgBB3l2W?+B~tw0>KRTz|P;T1i|nzO<T43G&_P^JKh+yS{7#pu_<
z3=FVwStbThc?v3XD^Q~Pw=e?(tQ!xpOj3k_0kkp>;SGHehI$4Ac+AFwyU`2`0w_V`
zF2cajfg%znf?h0?iZC#2KvB~x!oUEU=tfw!OoV{}Ha^D05MNM~nOBm=P=5l&)q6x3
z7+`~}5LcfSK@aNpBA{K>$ZdC4Q3i$?%#eJ^#1J2xlbTxKU@`&4L2{yy)PTqynxYI0
z1;Hqa97WL!fIv|Oh6EHRMvF2qzy`e_POKDVV1SLFGBLD^Zm*MKWMt%oZ||F4A<d{P
zjIq%zzF_)HX+~>y@J_1ug6Suv88bNH`%0#($uQp50f!QFsUvLQ1u@bG6)|G~&j4)y
zFT>ct%mv!H5Cq;LJH1wcQI$6{w;(<qBnaB-I(@zZ;}apckYi2`WO?=S21Q0jgg9uI
zLp*57>-1VB#)AkWf>M*qwp%MRu4R;ln*rYt3$_HLV)|1R#x<NEE5RFKr}wKertyHd
zFs0K!t1`y$!A*du@=;?nPzI?2xsw60B{<$M)W;`2#3R(tJKn`H#Bq9+8sqBe2?~sC
z$X-=eXFLqH1LmdakJT9y!P|>Ko|$f|!B_>Bhiw9$zFvdTTo~>KkRs3+KsLj4dlg2p
z>Ay4>rNFv_Q}a@$^Jp^qN`Tykv?UqrU9fDpCgU0uv$r#9F^V#ZfgSGY8{i)l67S*~
x>>T775aJ&+U09p3jStnZ=@YdX_ws_o;O?02qr<2qjiEapzEygAwhm)HBLL>5va|pI

delta 20321
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

diff --git a/grad_conj/grad_conj.depend b/grad_conj/grad_conj.depend
index cce5b3e..3a982e4 100644
--- a/grad_conj/grad_conj.depend
+++ b/grad_conj/grad_conj.depend
@@ -1,15 +1,15 @@
 # depslib dependency file v1.0
-1489617942 source:b:\mes documents\progra\calcint\grad_conj\mathobject.c
+1489764264 source:b:\mes documents\progra\calcint\grad_conj\mathobject.c
 	<stdlib.h>
 	<stdio.h>
 	"mathObject.h"
 	"customError.h"
 
-1489612623 b:\mes documents\progra\calcint\grad_conj\mathobject.h
+1489763407 b:\mes documents\progra\calcint\grad_conj\mathobject.h
 
 1489596942 b:\mes documents\progra\calcint\grad_conj\customerror.h
 
-1489619150 source:b:\mes documents\progra\calcint\grad_conj\main.c
+1489766951 source:b:\mes documents\progra\calcint\grad_conj\main.c
 	<stdio.h>
 	<stdlib.h>
 	<time.h>
@@ -21,21 +21,23 @@
 	"algebre.h"
 	"iterative_methods.h"
 
-1489617314 source:b:\mes documents\progra\calcint\grad_conj\algebre.c
+1489742437 source:b:\mes documents\progra\calcint\grad_conj\algebre.c
 	<stdlib.h>
 	<stdio.h>
 	"mathObject.h"
 	"customError.h"
 	"algebre.h"
 
-1489617252 b:\mes documents\progra\calcint\grad_conj\algebre.h
+1489742440 b:\mes documents\progra\calcint\grad_conj\algebre.h
 
-1489619088 source:b:\mes documents\progra\calcint\grad_conj\iterative_methods.c
+1489762392 source:b:\mes documents\progra\calcint\grad_conj\iterative_methods.c
 	<stdlib.h>
 	<stdio.h>
+	<math.h>
+	<mpi.h>
 	"mathObject.h"
 	"customError.h"
 	"algebre.h"
 
-1489612728 b:\mes documents\progra\calcint\grad_conj\iterative_methods.h
+1489681364 b:\mes documents\progra\calcint\grad_conj\iterative_methods.h
 
diff --git a/grad_conj/iterative_methods.c b/grad_conj/iterative_methods.c
index a2a62ae..d020f8f 100644
--- a/grad_conj/iterative_methods.c
+++ b/grad_conj/iterative_methods.c
@@ -1,5 +1,7 @@
 #include <stdlib.h>
 #include <stdio.h>
+#include <math.h>
+#include <mpi.h>
 
 #include "mathObject.h"
 #include "customError.h"
@@ -7,6 +9,21 @@
 
 #define MAX_ITERATION 1000000
 
+void grad_conj_parallel(Vector * b, Matrix * A, Vector * x, float epsilon, int nbProc, int rank, MPI_Status * Status){
+
+
+    //printf("nb_line_for_proc : \n");
+    //printVector(nb_line_for_proc);
+
+
+    //printf("first_line_for_proc : \n");
+    //printVector(first_line_for_proc);
+
+
+
+
+}
+
 void grad_conj(Vector * b, Matrix * A, Vector * x, float epsilon){
     int size_vec=b->size;
 
@@ -30,9 +47,16 @@ void grad_conj(Vector * b, Matrix * A, Vector * x, float epsilon){
     norm_r=norm_vec_2(r);
     while(norm_r>epsilon && k < MAX_ITERATION){
         alpha=norm_r/prod_vec_t_mat_vec(p,A);
+        printf("alpha : %f\n",alpha);
         sum_vec_alpha_vec(x,x,alpha,p);
+        printf("x : \n");
+        printVector(x);
         prod_mat_vec(Ax,A,p);
+        printf("Ax : \n");
+        printVector(Ax);
         sum_vec_alpha_vec(r_next,r,-1.0*alpha,Ax);
+        printf("r_next : \n");
+        printVector(r_next);
         norm_r_next=norm_vec_2(r_next);
         if(norm_r_next>epsilon){
             beta=norm_r_next/norm_r;
@@ -42,10 +66,13 @@ void grad_conj(Vector * b, Matrix * A, Vector * x, float epsilon){
         }
         norm_r=norm_r_next;
         moyenne_r+=(norm_r-moyenne_r)/k;
+        printf("p : \n");
+        printVector(p);
+        /*
         if(min_r>norm_r){
             printf("k : %d, ||r|| = %10.5f, m = %f\n",k,norm_r,moyenne_r);
             min_r=norm_r;
-        }
+        }*/
     }
     if(k>=MAX_ITERATION)
         printf("Solution has not reached the asked precision : %f in %d step.",epsilon,MAX_ITERATION);
diff --git a/grad_conj/iterative_methods.c.save-failed b/grad_conj/iterative_methods.c.save-failed
new file mode 100644
index 0000000..c84b3b9
--- /dev/null
+++ b/grad_conj/iterative_methods.c.save-failed
@@ -0,0 +1,72 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+
+#include "mathObject.h"
+#include "customError.h"
+#include "algebre.h"
+
+#define MAX_ITERATION 1000000
+
+void grad_conj_parallelisable(Vector * b, Matrix * A, Vector * x, float epsilon, int nbProc, int k){
+    int nb_ss_matrix_tot = (int)pow(2.,(float)k);
+    Vector * nb_ss_matrix_par_pb = allocateVector(nbProc);
+
+    for(int i=0;i!=nb_ss_matrix_par_pb->size;i++){
+        nb_ss_matrix_par_pb[i]=nb_ss_matrix_tot/nbProc;
+        if(i<nb_ss_matrix_tot%nb_ss_matrix_par_pb)
+            h_prob+=1;
+    }
+    printVector(nb_ss_matrix_par_pb)
+}
+
+void grad_conj(Vector * b, Matrix * A, Vector * x, float epsilon){
+    int size_vec=b->size;
+
+    Vector * r = allocateVector(size_vec);
+    Vector * r_next = allocateVector(size_vec);
+    Vector * p = allocateVector(size_vec);
+    Vector * Ax = allocateVector(size_vec);
+
+    int k=0;
+    float alpha;
+    float norm_r;
+    float norm_r_next;
+    float beta;
+    float min_r=1000000.0;
+    float moyenne_r=0;
+
+    prod_mat_vec(Ax,A,x);
+    sum_vec_alpha_vec(r,b,-1.0,Ax);
+    copyVector(r,p);
+
+    norm_r=norm_vec_2(r);
+    while(norm_r>epsilon && k < MAX_ITERATION){
+        alpha=norm_r/prod_vec_t_mat_vec(p,A);
+        sum_vec_alpha_vec(x,x,alpha,p);
+        prod_mat_vec(Ax,A,p);
+        sum_vec_alpha_vec(r_next,r,-1.0*alpha,Ax);
+        norm_r_next=norm_vec_2(r_next);
+        if(norm_r_next>epsilon){
+            beta=norm_r_next/norm_r;
+            copyVector(r_next,r);
+            sum_vec_alpha_vec(p,r,beta,p);
+            k+=1;
+        }
+        norm_r=norm_r_next;
+        moyenne_r+=(norm_r-moyenne_r)/k;
+        if(min_r>norm_r){
+            printf("k : %d, ||r|| = %10.5f, m = %f\n",k,norm_r,moyenne_r);
+            min_r=norm_r;
+        }
+    }
+    if(k>=MAX_ITERATION)
+        printf("Solution has not reached the asked precision : %f in %d step.",epsilon,MAX_ITERATION);
+    else
+        printf("Solution found with %d steps.\n",k);
+
+    freeVector(r);
+    freeVector(r_next);
+    freeVector(p);
+    freeVector(Ax);
+}
diff --git a/grad_conj/iterative_methods.h b/grad_conj/iterative_methods.h
index 3f37233..4925c6a 100644
--- a/grad_conj/iterative_methods.h
+++ b/grad_conj/iterative_methods.h
@@ -2,5 +2,6 @@
 #define ITERATIVE_METHODS_H_INCLUDED
 
 void grad_conj(Vector * b, Matrix * A, Vector * x, float epsilon);
+void grad_conj_parallel(Vector * b, Matrix * A, Vector * x, float epsilon, int nbProc, int rank, MPI_Status * Status);
 
 #endif // ITERATIVE_METHODS_H_INCLUDED
diff --git a/grad_conj/main.c b/grad_conj/main.c
index d291b55..eaf5353 100644
--- a/grad_conj/main.c
+++ b/grad_conj/main.c
@@ -10,38 +10,165 @@
 #include "algebre.h"
 #include "iterative_methods.h"
 
+/*
+Commands :
+cd 'B:\Mes Documents\progra\calcInt\'
+C:\MPICH2\bin\mpiexec.exe -localonly 10
+*/
+
 int main (int argc, char *argv[]) {
     int rank, size;
     MPI_Status status;
 
-    int test=0;
+    int sizeMatrix=3;
+    float epsilon = 0.0001;
+
+    float norm_r_2_in_use,norm_r_2_reduced;
+    float norm_r_next_2_in_use,norm_r_next_2_reduced;
+
+    MPI_Init (&argc, &argv); /* starts MPI */
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* get current process id */
+    MPI_Comm_size(MPI_COMM_WORLD, &size); /* get number of processes */
     srand(time(NULL));
 
-    testMatrix();
-    testVector();
+    /* definition of the problem */
+    int nbProc=size;
+    int nb_ligne_tot = sizeMatrix;
+    int * nb_line_for_proc = malloc(sizeof(int)*nbProc);
+    int * first_line_for_proc = malloc(sizeof(int)*nbProc);
+
+    /* initialisation of the domains */
+    int nb_ligne_par_proc_default=nb_ligne_tot/nbProc;
+    for(int i=0;i!=nbProc;i++)
+        nb_line_for_proc[i]=nb_ligne_par_proc_default;
+    for(int i=0;i!=nb_ligne_tot-nb_ligne_par_proc_default*nbProc;i++){
+        nb_line_for_proc[i]+=1;
+    }
+    first_line_for_proc[0]=0;
+    for(int i=1;i!=nbProc;i++){
+        first_line_for_proc[i]=first_line_for_proc[i-1]+nb_line_for_proc[i-1];
+    }
 
-    testAlgebric();
+    int nb_line_proc_in_use = nb_line_for_proc[rank];
 
-    Vector * b = allocateVector(10000);
-    Matrix * A = allocateMatrix(10000,10000);
-    Vector * x = allocateVector(10000);
+    Vector * b_tot = allocateVector(sizeMatrix);
+    Vector * b = allocateVector(nb_line_proc_in_use);
+    Matrix * A = allocateMatrix(nb_line_proc_in_use,sizeMatrix);
+    Vector * x_tot = allocateVector(sizeMatrix);
+    fillVector(x_tot,0);
+    Matrix * A_tot;
+    if(rank==0){
+        A_tot = allocateMatrix(sizeMatrix,sizeMatrix);
+        initProbVector(b_tot,1.0);
+        initProbMatrixSymetric(A_tot,1.0);
+        for(int i=1;i!=A_tot->width;i++){
+            A_tot->c[i][i]+=0;//A_tot->width;
+        }
+        //printMatrix(A_tot);
+        for(int p=1;p!=nbProc;p++){
+            for(int i=first_line_for_proc[p];
+                i!=first_line_for_proc[p]+nb_line_for_proc[p];
+                i++){
+                MPI_Send(A_tot->c[i],sizeMatrix,MPI_FLOAT,p,0,MPI_COMM_WORLD);
+            }
+        }
+        for(int i=0;i!=nb_line_proc_in_use;i++){
+            A->c[i]=A_tot->c[i];
+        }
+    }else
+    for(int i=0;i!=nb_line_proc_in_use;i++)
+        MPI_Recv(A->c[i],sizeMatrix,MPI_FLOAT,0,0,MPI_COMM_WORLD,&status);
+   MPI_Scatterv(b_tot->c,nb_line_for_proc,first_line_for_proc,MPI_FLOAT,b->c,nb_line_proc_in_use,MPI_FLOAT,0,MPI_COMM_WORLD);
 
-    initProbVector(b,5.0);
+    /** resolution of the conjugate gradient **/
+
+    /* initialisation - allocation */
+    Vector * r = allocateVector(nb_line_proc_in_use);
+    Vector * p = allocateVector(nb_line_proc_in_use);
+    Vector * p_tot = allocateVector(sizeMatrix);
+    Vector * Ax = allocateVector(nb_line_proc_in_use);
+    Vector * x = allocateVector(nb_line_proc_in_use);
     fillVector(x,0);
-    initProbMatrixSymetric(A,5.0);
-    for(int i=0;i!=A->width;i++){
-        A->c[i][i]+=A->width/15;
+
+    int k=0;
+    float alpha;
+    float beta;
+    float pAp_in_use;
+    float pAp_reduced;
+    int done=0;
+
+    double time_proc_in_use=MPI_Wtime();
+    double time_reduced=0;
+
+    prod_mat_vec_p(Ax,A,x_tot,0,nb_line_proc_in_use);
+    sum_vec_alpha_vec_p(r,b,-1.0,Ax,0,nb_line_proc_in_use);
+    copyVector(r,p);
+    norm_r_2_in_use = norm_vec_2(r);
+    MPI_Allreduce(&norm_r_2_in_use,&norm_r_2_reduced,1,MPI_FLOAT,MPI_SUM,MPI_COMM_WORLD);
+    const int MAX_ITERATION_MAIN=100;
+    while(!done && k<MAX_ITERATION_MAIN){
+        MPI_Allgatherv(p->c,nb_line_proc_in_use,MPI_FLOAT,p_tot->c,nb_line_for_proc,first_line_for_proc,MPI_FLOAT,MPI_COMM_WORLD);
+        prod_mat_vec_p(Ax,A,p_tot,0,nb_line_proc_in_use);
+        /*printf("Ax :\n");
+        printVector(Ax);
+        printf("p :\n");
+        printVector(p);*/
+        pAp_in_use=prod_vec_t_vec_p(p,Ax,0,nb_line_proc_in_use);
+        //printf("pAp : %f\n",pAp_in_use);
+        MPI_Allreduce(&pAp_in_use,&pAp_reduced,1,MPI_FLOAT,MPI_SUM,MPI_COMM_WORLD);
+        //printf("pAp_reduc : %f\n",pAp_reduced);
+        alpha=norm_r_2_reduced/pAp_reduced;
+        //printf("pAp_reduc : %f\n",pAp_reduced);
+        sum_vec_alpha_vec_p(x,x,alpha,p,0,nb_line_proc_in_use);
+        /*printf("x :\n");
+        printVector(x);*/
+        sum_vec_alpha_vec_p(r,r,-1.0*alpha,Ax,0,nb_line_proc_in_use);
+        /*printf("r :\n");
+        printVector(r);*/
+        norm_r_next_2_in_use = norm_vec_2(r);
+        MPI_Allreduce(&norm_r_next_2_in_use,&norm_r_next_2_reduced,1,MPI_FLOAT,MPI_SUM,MPI_COMM_WORLD);
+        if(norm_r_next_2_reduced<epsilon)
+            done=1;
+        else{
+            beta=norm_r_next_2_reduced/norm_r_2_reduced;
+            sum_vec_alpha_vec_p(p,r,beta,p,0,nb_line_proc_in_use);
+            norm_r_2_reduced=norm_r_next_2_reduced;
+            k++;
+        }
+        /*if(rank==0){
+            printf("p\n");
+            printVector(p_tot);
+            printf("%f\n",norm_r_2_reduced);
+        }*/
     }
-    /*
-    printf("\n\n########\nproblem : b-Ax=0 \n");
-    printf("A : \n");
-    printMatrix(A);
-    printf("b : \n");
-    printVector(b);*/
-
-    printf("calculation : \n");
-    grad_conj(b,A,x,0.000001);
-
-    printf("grad conj result : \n");
-    //printVector(x);
+    if(k==MAX_ITERATION_MAIN)
+        printf("failed to converge\n");
+    MPI_Allgatherv(x->c,nb_line_proc_in_use,MPI_FLOAT,x_tot->c,nb_line_for_proc,first_line_for_proc,MPI_FLOAT,MPI_COMM_WORLD);
+    time_proc_in_use=MPI_Wtime()-time_proc_in_use;
+    MPI_Reduce(&time_proc_in_use,&time_reduced,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
+    printf("time for proc %d : %f\n",rank,time_proc_in_use);
+    if(rank==0){
+        printSystem(A_tot,b_tot);
+        printf("grad conj result : in %d step and %f s\n",k,time_reduced);
+        printf("x resultat : \n");
+        printVector(x_tot);
+        printf("b = Ax : \n");
+        prod_mat_vec(b_tot,A_tot,x_tot);
+        printVector(b_tot);
+    }
+
+    if(0){
+        fillVector(x_tot,0.);
+        printf("Iterative :\n");
+        grad_conj(b_tot,A_tot,x_tot,0.01);
+        printf("b : \n");
+        printVector(b_tot);
+        printf("x : \n");
+        printVector(x_tot);
+    }
+
+    MPI_Finalize();
+
+    if(rank==0)
+        freeMatrix(A_tot);
 }
diff --git a/grad_conj/mathObject.c b/grad_conj/mathObject.c
index 5ff139a..16f2b52 100644
--- a/grad_conj/mathObject.c
+++ b/grad_conj/mathObject.c
@@ -59,7 +59,7 @@ void freeMatrix(Matrix * matrix){
 void printMatrix(Matrix * matrix){
     for(int i=0; i<matrix->height; i++){
         for(int j=0; j<matrix->width; j++){
-            printf("%5.2f, ",matrix->c[i][j]);
+            printf("%f, ",matrix->c[i][j]);
         }
         printf("\n");
     }
@@ -101,6 +101,7 @@ Vector * allocateVector(int size){
     return vector;
 }
 void initProbVector(Vector * vector, int max_value){
+    rand();
     for(int i=0; i < vector->size; i++){
         vector->c[i]=((float)rand())/32768.0*(float)max_value;
     }
@@ -125,7 +126,7 @@ void freeVector(Vector * vector){
 
 void printVector(Vector * vector){
     for(int i=0; i<vector->size; i++){
-        printf("%5.2f \n",vector->c[i]);
+        printf("%f \n",vector->c[i]);
     }
     if(vector->t)
         printf("is transposed\n");
@@ -147,3 +148,17 @@ void testVector(){
     freeVector(vector);
     printf("Ok\nThis is a random (from 0 to 10) 8 sized generated vector, it works well !\n");
 }
+
+void printSystem(Matrix * A,Vector * b){
+    for(int i=0;i!=A->height;i++){
+        for(int j=0;j!=A->width-1;j++)
+            printf("x%d*%f + ",(j+1),A->c[i][j]);
+        printf("x%d*%f = %f,\n",A->width,A->c[i][A->width-1],b->c[i]);
+    }
+}
+
+/* OTHER FUNCTIONALITY */
+
+int cInt(float a){
+    return (int)(a+0.00001);
+}
diff --git a/grad_conj/mathObject.h b/grad_conj/mathObject.h
index 2799838..2a5b47e 100644
--- a/grad_conj/mathObject.h
+++ b/grad_conj/mathObject.h
@@ -32,4 +32,7 @@ void freeVector(Vector *);
 void printVector(Vector *);
 void testVector();
 
+int cInt(float);
+void printSystem(Matrix * A,Vector * b);
+
 #endif // MATHOBJECT_H_INCLUDED
diff --git a/grad_conj/obj/Debug/algebre.o b/grad_conj/obj/Debug/algebre.o
index a15ad74ba1e829337ddc7b94d2ba14f5501ddca8..2d112836bdbd1b587e1ee47f88b4a33b19932dc5 100644
GIT binary patch
delta 3849
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
F0{|HDOR)d|

delta 2679
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

diff --git a/grad_conj/obj/Debug/iterative_methods.o b/grad_conj/obj/Debug/iterative_methods.o
index 519f3eb08eb188be76b7fd5afa2ba6cef9faed4b..3425d61448d3975fda686a3bbf30bd29767d233a 100644
GIT binary patch
literal 4553
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

delta 1992
zcmX@9yjqsmhmo5B1RS^-7!)S*iVGGnF)*BAWMFv12@+;tkeX<k&f3Djz+f|Rp|YM0
zGXui`76yh7To73n1_lNP1_391Lo<i~lw85U!0?BC;wLq>B^(S465NyJ80ENbGcYh5
z;b36U;hyZqC^ykhXmS~&6w`dp$&(nB>Ma-;7&db<FqlEy!@vkO*}x&R^J(*&jBZzs
zZiY_RC*7`3I$2a+fNbe>eSpHdgTlLk!n<<Z^$SSPP1Xhm28NrlZ*IQ38T+E!RiM*F
zg`?Y*r_-fgg{9l|3e0Q}(?x~n=8KyTZpMIAaCEwW6g)sExPc)8m%JH!q}%mKr|XB8
zT8s<~VB<lWZ@@I)bp3Ge<IUI$-L4=*cy790xET`!vIXQE7Lco;UW6!sI1pq4+<hP|
z4`7Z2JMaO-Id@=obi3Y}oW!hMk0}nd^900WP<go9nq9vz-gG^4Gxozx*AF*RU)*;6
za_{F&*BAE=-i&>5)Ah|w*AF*O-g<fe!Mt*&*P1t7Uw{Sf#;6F~1-s)5$Q{R7R6wEq
zf`Ng9fdQl-_RZvv%o2>dCUddKNh&ZfFo0w5wQ#p9Onm|a1H)t=7Bzj4ub|$aaPshk
z3E2u(3aTkO3N<xFH8l#h3aW+%dZuYQ3b`P58rS6cEU8Qu%#+zzD;e`9H?V%HXD&-k
zF3B%q;9+K&&&a^QQk+?p%D~LF667M5WCmt-uqaCj12YFmjDvxdWho;A0}~5NT26jq
z2?JXgL_afE9wP$-b8ccuQDy}L4>QkakZI+aDJ2;U%zPlN3@jO`nduoN49xr>E(^$X
zfqIZKkf9)J*nA<nnT7T+GBB{G7bT{|C+Fv7F))JjPaYEk1LGVCW(Ee1BnCz<5QAwV
z1BW96BbOXA0|V1U7LE$II0r{+L2+hIejWoO7udlQc{o9Si!Vz}W?<w7xqxY63}<~2
z10yfQqzKNU_`KAL5(Y*-h(HKu0RtmHgdM=?Si!(30O9y>W-~AfL5#@ZOw1|BNMv9X
zhS=i4nU`Ob8(+l0C;}14fC@m(7KMnqa3-aeBr-7ii9z@doVl5KAYI}RehO!9er0N2
zUMfgT0wR{cz{;|Yk%57g<tHNp16L9w1A{&@0|Pe$Pkd&65(CqF73Rq?oFQ&{jP{bu
z99G=c-0G5oj6!S<64RU{8HE`bI9M4V;-11x5)2HSCMaAkMn+FzkTPyX1_lP6$<|z|
z!k{1rr34VZ&cMLH#LzIgn9G0i6)u&@jNB4ToQ#v@xkZhhax^n333J#!oyeic@zf`s
zL!U#KNm-b=AdP{Eg^}$E8?*3<i5z=44A!n)yOxQWfst`?DYr#E*mOrej#efoURLHT
zrlUM8EDWLy3=9$s3=AR+%5at;oMjJZ`7<yufRY6pLjeN=gCtnTL<R;1DKKj>0|SFJ
zn6-|9fk6h$I>*4kAPZ)F1FNeCS;Ef<(`?8H(`>^C(~{2!Go~Lddm9w^3=9lx3=bF?
z805ePDl)+wqs9aiGlPp+!^PZ~7#QTiIs%y(>Y>aSxL`V*#m2zEz{dcJ+;Rp622j1h
z#!%0|z#s$`6Jdghfz<JU#RTB$df_Zk*#Xik!l0LynUe~NMFs|jfBzX6(is^TCcoh|
znQX)-#0rWBsmY#v>5MHC9Yu{Rpz2r|7#NrtZI~f;K?R`{sEPwILH08<u9)a3$~b8<
zKff~nLXao}xF};_X1qPwkzbT??c{2HW&Ryd8BmSI%xD3UF+T(qV_;BVU;?u*fk_Yn
z6L|pQfH6$u^W>}i%8cBTWd-Cxsf9rvRQthIXfrZQ{wokR`LuxC<i7&ulkEkIxYLSK
IQ=tVF0Ot#&6aWAK

diff --git a/grad_conj/obj/Debug/main.o b/grad_conj/obj/Debug/main.o
index c5611a3ed116db893bfc856ffcd9d3680ac00b64..0afdbdb4f64a05b197a92d55d5aec4ff85645881 100644
GIT binary patch
literal 8397
zcmeZa<YoYY9a0PomLLWL3!`31YDEc{4IwhP85qtmGBB(WhwyC}7#I{73=;HG5=#;x
zLO4kW27?27NyWuD6+k5#K<bK64J=?_U@+l@Du7ZB3<eJRCQuHPI?Tqvu!NU^fkg@;
zz{kMA;J_f@q;F^j5rC2(7#JARMW7rg1y*Nl0Odg_1qKF&a8U+^2~hKxVCI>aLKHyB
zTZ{}0<)RD>OQ7l)Vd_lHp(-F0D1-x{VFwX`y3fo4#s$+Lr^R5XGjPy1hr|q65d#AQ
zDEte=85q`~*lXYr+W9oN`N@aIHw=sn3@<>ckGH5?U|?WiW?*2r$(jQq=ct@vU|{HV
z<>_=$Vd-_{=wwj=tL$x2X<%Sr0Er%FQDI<UaDfQBsMMf~LF6G8z_fRR)U~LbU|?YA
zhS=HJqH+Yn0|_2{zywp;*`jg)m&6{31W4n|?|Z<;b+)MNU|?W4-lFmc<Rb<KhSwV1
z5Kga1D@dptVj$z8Ziv!Ore=sdBUGI=#9^f;j<=}%0O<f3V%rVjpc!(ZdkR=hFV9qv
z%I+y($1<Mk7HU4k*eTEq(F8IX<SPF45Tm=NfIX{usPlp~L`CU>?iLl0caDRM0XhE*
z0|O{t7+xoKx2S+P2%ACb7(q6Jgc}e2|Nq|}VLw>%R5w@m6tFI+v<!;#ZgmSWo&viL
zWCF-_AR6ZH{%%O*A}j<&0ON&jhRzn1Es!7wB@?6=+5iy+Ng|1^frx_Dx~Q;pLv$l4
zSb?Mfny@-sRF;4e-n*MIU>zV1Ob66mtq1s9nV1;hDF<RS*cOB#pv-&RMTG^F$+}xq
zKn{c%gCq=61s85nc>@dci0&2@kX*L|NB0!4@WDq+pb$Xffzl65O%FuPLng)(-3;AG
zyqgR+-`zWSQ>qziILurIYluMUwBs${90hXc%Y%^c0A(da;DaL+68KL*DKQLY2H0&N
zA*kDqyQqMQ1efD3DgvNX)I9}ka%YGN&v6$O4lWi3pYAE(4Bi={!UFSlbBhYd3{WD#
zYOg>y#DTp$D7oiEHv=Om@q+a7w`TtT|Gycc4rUNEHSxD<|NsC0c#Fydkdr{}x9DzB
z0Y^O8{UBkG`%yy^ED8xtaP|c8K?Z|pYe+IG-SN8Oc#Fy%n6c3)#)5=F#$M=V=nYZH
z=nPSjKo6edE-E}A&G^FxWDv+^5Dl|=YIlnYIBf@j(ljV(bvv*ecToXV1fbBDff_3T
z4)Pvwp6T>a5$Oz35dhf=7M=pm?wuhjpcDqmV91eznN=1*k_K81n*$L=OZzh*qG)QT
zU=^K!oY_DeSh_ggqH+V|4@hBp1<C{^5r(@lDjqlA-HlOkfVtBJ;xUk-?iO$c?sQS%
zfW`=@Lg;Q$0omUP&7cT<BJk7-RpFw-bMwW`2RCED`a!`A)ei~*B>f<-W0yfzcr!-D
zrrSlurqe|w1vvpQGcZKJq5_lvK-sU?MI`}bVy}xz3e2M8Eh;?>3=Am@3=A(bA!QCY
zbipwXasnjgK`{=Bd032t@+>IEyL-U(L8p(309rN#M-EapM1%-9i9kaVWEZg^3C`qD
zec-T$l#3uo!hC}i8X-i4MgTN4Lg4ycR1$8ws07^md2^0R2U2=+Q9+JJu$7>AYym5R
zMkP3LLEHppLX*NxsG<jm5I{By>JuKQA>g=$7y@QO4e4%CLFOX)GlmF%MnL@;gXGVM
zn=Rm`&#jmDAIvM`J>H@M$^xKd@;c?Fi%P^z7nKBXFtiX83?N0AJ^+Uk)CXWQV^k8F
zA=!?xc@Nk^hEkDkh=?^LCGz)F{{8<SRjiZ;xs3(QfZgCE3JPgzB~eJ;cTw@U_YzbB
z9CuNX05$xe0n7l($gph1&B5S<l&u_~0qg+_;JYp=9?;tSZj1^CNcuR7iZBDT9SW5K
zRrH|vht=PZcn8(FNai?z41k6Q)Epg{ImcO4LSSrYu)uU4XHiK)mx2^oVDlkXfr@sR
z2ACtD@dXYHxI0Vvp_MXBHK?`6&>j2d<lzYu(h@UsQd1O4@)eTv^U6|-(o-2qGILWE
z((;QG3X1ZR6;x9ctQ1t!xIq1lqQn%CvMhz7)Z)^d5(O)T%sh~S;*!(?g~YrR1=Tc#
zVlIXXsC*(w1w)d8t%75Pf|UY;`1Xqy``H*6SU?2<0}G?OU#Nn!p`n7Qp0S>Rf^Kd}
zX<n*rdTL&3QD(A&Zf;^xa)xcDsfC$>ZaM>xlU0mwYO#V#esXDUYF<fkOhHk8dQoCb
za$-)hXI@E6dQoCZd~$wXR!nYUW}aR$*p4(%cZGq0fr*8^G_N=_JufvyAv3Rpfr*K|
zI3vHPL;+Qlg*7KXFCC(S1HwiKu&{!4GO{ISBo;9+$7kjzm8LN$FkSLzWME*4FDNNu
zV7dZgGqA)bgY3AvlYxPOg(W^Iu{f21=^99igC#yKCo!FY={iV`hb2BOGbfdS=>~`=
zz!DEK8DuEaO^|>HOMFskT5)C-1Jf-KUxFpRB)1?fFEKZjf$28LI2i_37EtZX=H}_+
z%D{Bz1Oo#Dn{R+;yh~z9Vo7B|Dg(1PNGDj#IX^d-fw>sY_b*^z?f~&vSwJK^D8NLR
zYZw`s7#KK`^Gowe7?^7rK~fAH$%%Q%sW~~RDGbbYU?CO`kTt>np+U~B49xXlF%Ga;
zh@(3La|2j_2Q1(k6yzVoz}yHH5@6s2*~8q-IFpfqfr*19CBHNY6a+jh;E;xLnafg>
zOY(~tcvx7%nHU&YiZiQH8CclBj$uh=U||P~vXn5eaDc=(7+6_inLyFZl9rR7Si-;-
z2GP&LrN+d-z?_>{Qj}T2z{A3`8f02|W=cs00}CHWD+5bLYG!&y2?Gm1h|2;pT>zvC
zWG2WKHeZNl7NHU*1_mxr;$mPF2B`&k1eCxS=S*Q^VBk(HN>7H$Fiiw=%NQ7iK~hW;
zS$K*P^RgKjML_zPOBxt?z&?WU|1j_rmn4>y7Beu4f`Xs9<OKs*1=Mava4a&HTwvr$
zEhx^+$<Je8lmK~{x#SEZPhNgeZhTR^QG8}zd}(ni1EUl~>Inlvswg$3G&wZ|F82T~
zmzP>mf}~d(qW2EEJlp`Nf*TAxc}W39`N<57$`DVTVC2b5iq8RMviOqx5(Y*Ui1-nx
zcwTCJT7FSHs8C^GRGrMoz`$H`fRQIHv#7WvJ|`1JS`8w-2dXtaFEzd(5u!IfB{eOv
zG^d1tQ4?bR4yYoKnxgz<cqo`aq_;5gBthI`Hj52p=LSZeBnC!v2xko=k0S%4#R9O*
z3Pzp^h*C?4>=H&EM~HwmM8yY2o+1XuFo^5|MxFu&#&8H{4kJ$iL}>&>U<M<PV+8|a
zB!oAGk*9)zF$%(&z{r!$z!(d0-wj5d#GHbRL<Yt<NYHmM@+75}Br-6@L-;L>JOz#g
zaBn3*M6WP_Md8ts2ob)(z>|`nm&(AH1Tp;zBM+!J2ZuV`h!kE>rYJeV0Fi^6kqQw%
zz`*0{7!mIo;u_=_;_2@f@9XI4$H17g3>-*3jJ%-khARUD!#!382A)g?MlFb4e;65f
z6&V>Aav2yHenO>mAW}aV8F*(iGBDIJFffR)L39~Fq`ojR@bWV=FqAVeFz7?293WC}
z7#Vomm>C$JGB7YCf}{!<7+oMzFBtizF*7iLI3O3ef*8ytPZ${(c(Yj;7{VDC7-~Q|
zG8q`XA#x8G8TbydFfddwK&<zN2;X63U|?kd6{f5#X-pvYMkWRZa9JP_%E-X5jg5gp
zkU<Dk+A}b{U(E*UgbOmNatL!Xa|kjDu?dJXFfgewaC6&nGjlL7Fbgv>b8vH8aa(gU
z3NtXU@G>xSfH<DQ7TgRBto#hz+@8V=3~XX>aRvr<VMb;?upU;B9uBA;R)`)>F$QKn
zD{gC6kUlOwMtez!iRzM`!XO7YNKA8*1nJ{ug`3GF!N9;{g2LtHW(27QDddAN85sE0
z7(j*!Ffw`ygCqnM85kIZ5c=#TZ6p~O7(o38(6Aw_;)a!bAR2_Pfl6|QK2XRo{^sLl
zU}R(jHANX27#N+b^nH;lZGA|ktq-lV_2HE^L$Z~AZf0J3xqfC|a!zSVDuc6?zHfl1
zvxgB}gaK6c>LoKUGB6aEq-5snWiT)?Fyt0w>ScgN1#=TiGW?UWQj<&cGC*n=7+Ars
zW)@;R5wrFzhayKhhb@Qw+Up$69IYIY3`{J{CqV?qV+JM`Mz$ulFCZRRh{;qCD#oNN
z3KjtqOp!3*Zye7!A~_;CK66BJ_&nwK%#qHKj?f(dQ^uk4nMp~M$q&qL1R2R>0%9{A
z2eH|j*f^XKx(q-vAa`)6AOwS9f?t>t#lcpBtc~RG*|=_E29t#_lY=nFM2`7PCc<kY
znIeUmEX0{CMVL%PI7FD7MVVYh!BQNGr#OU}oQ0d2Q=7mR&tqd&=CJv^n<-NGDU*#b
z$MvTi6FIK$e!81URhXIgNz_^nTP9WpMn-TQ52={kot>=|G~E3{H6hJ4P{e}<bU-v?
zRS*MX4F{t%4+~2NBWOGwl4wBfJWvJ6;K;|(%H+h$>ebB59Kn6`Fb@k0Xj~gK<SW7;
z&%nR{YF)B1fJTs|K_vu(KQ!5iFo4=|vS6`%1_lN>Fbh;vfOLs4ECP?-GcbrS?1r;k
zm>3v930Z_83eKu#Vqj1L>zxP}Tg$}2pbQqf2ABQ9#J~U=Fcx9pW@cbe1<NwAFfgcr
zS#qol4C-LkbXEoi4KQmNE6lb%aMmR_>jj+k56+TegV}4!#=xKnHl>`6fk6w*+Rnzn
zpbchSWMg0ebrwVz9<VVm=z_%**clk~z^qPo1_pgF>mWN!?>lw|2GHog2!kF6OkEQP
z%)H}p)-?{8d19O}b)B3rb>}!?@o|}xfx!@LhYlCaHbXABo4FVmjKH!JxnMe`aWOC$
zgT?l9F))CpHbfY1!e#HlWuL;uUU9+f_{qh<0Gg8!VPN2fna9cvlhxv8U@!xlY{?B%
zXUEOJ0Ggc;VTj;n0H+=i22cSFN?Y6vS)kT8s6ot71S-}TK*r8u1f>-a3p7RxO26C;
zr$J3Zu(~6xkRpza;Xa)83(gXS_FUK)4B#v;I4cRxs)e&aZUK$raWjC1JVCjEjbS$2
zRiFVmkeCRA9=I0(%1I0i|Nb*Dq%%TGI*1UMj0XvUS)h@31qLQi5ewzRDCD^=kTf$R
zDEEP8SYRp`7?9_=K*b|7NFhQR%tD^y0!_DIRf9CY1@Z+mBWQ*TtR01jgz{KHQ#XvD
z*)34)Kn0;xDwGC=7c(QMiwhM%qF|G5pl%8?BPi@Zu18Y9z`)Q1<#K@S0?lY)dJa@g
zfs}!|A<WSELJ%Jr&xCS7r4lovAe4tnfrkD;BA^Z?Gb1RBQSFM4M~*QCP))_az_1Ra
z1&m=L;J!GD2xO84Bm`0u4{E-FIA9DGDK1LP1C9A1L~;{za`HhXB}fRQ21H*25nv1x
zc?RZz2$;w>5C@E5B8YSa6A^-Y3?`z5A!33dVuvB(gCP=*A(D<EQiCA^s$sxRW`Mb8
z3Wl1+7$TcdMB)odOJFGqR9`{T(or-uMVWaeX%MU6c3nhK1CqRlA@UkS<R^v*JH$$G
zt;NJ3%mm7rsY#{j@tJvP`3!m~V0L0sQc-FdoL7{Xm!4V-<AS<OFm`cC5rZB$N2*j+
zRWazLX2hozfyN1-22t10cu>2*GcU7*0n7poEX0HRw+Jq{dm9f<mWd^)(B3$l5AD{1
zMn7_3a+!IVB>_eGN$7lt+ThCE)RLmiWQdKysd*_7R#0kk8H5#_oLEwlS_I{VgR>2&
z+mjNXn^+QGmYN)2zz|<tnhR!vdt6{v0YiLpenBP7R&ZY$q}T{zs$)(Lq<aMCrYDwU
zfUPMg%1;3s0XH2KEJ5IoHbZ;?DDebW7MG;vLOC!i!1|zWf|%--nU|OY8sUgfD@sj;
Hc$fhInM<8C

delta 1582
zcmX@>I9-O<hmo5B1k|_~7}O{7iVK!7GBBKBWME+71PL=R2u(CiXVYL{U~pibxJXGa
zfti6JgPDP02UMCJB*P%!q;F^jQ4b|wGcYimV4L_!jcqeK1H(Vg$#RTxTvr(w7%sCj
zFbHu?c4JgxTEQ_ni&2efGsomfjB4t~IT#pZxFFgY!KNBGgmyj+ZhrEi`AxtJki>Bp
z6_3gKOcM2A9)dW|q9UNqzyKELbWw3R?xMm15<nAoK;zqh)Uh%!Fm$`9xOB3pfc4*e
zcQZzXrQ1ct1}1`}$^jx)&%kipMa2i?q}N&9E-DV)4jkPfDn17vF)?1~W`Ht#Wdv}_
zF<!U{veluRV^?QKM@Q$0@2`4UxDNhc?mX0a;@}T?%|o3RI$cy`Zo8<++&g$vy4gj=
zhY@TVgSCrFy-#V^aTXPj{SY^^g4j1>RCvJdc2VH~DeZIt`vdN?<18xt4A4;80n*zY
z`{(50<iwoh(wxMS%=|nBD+Px1qQn%1<ovuWg`(8r(wq{I7{gxkHq#hp1_l<8E(R9H
z$s2f+m`WHYi|~Eq1|<Ln5#}1klZ=x+_){4ZC$HmI*OX^sU|=cEtV(5IVcQAP#gfdx
z!VVT?DPdsY0Euxhu(GI5{>LvS@Q#szfjKv^q$sn3fro{sc(RIsYJD*i0|Q72NE4ec
zM3P0whKYfJD>pGSkAaaFWC+M?P?BYwW5&$Dz@1o>o(z>?nh55WF);Fiq?jhM@DwHH
zWiv4Hf%Nf!9S33a7MCQJlom5E@}Fd6U|=fI;4Milt}kI=6a=YcE;+%#o5a8<X~WFG
zz+7^Kf!C3NQOXI-Il#bM!N4dDl3^;b;akJNz|g?Jz`&cyz^DMxdxn95ftAId5k%@S
zfyhcG1_u66Mh1ppW(EcU2Eq8u{3HgZ_a4j)3=E8djH(>M+{_$;jFXE*mT59D@R~3%
zb69a(b9)LiNiZ<*aWe`s3b8RT@G~-c3Ns2bFbF6zFfa&Cb`w?Q1BC-9JV5v&!{kcQ
zc?LX;^J1Dg>>{J0K68|Q;jraU<gjI6Vqu;SBA8MI8JJiY*&^7OxpwVlQWN12nd~F(
zQ4co9k&mO5$%&WMy_uOglkw<b9u^h`P*EYpz`!8FAkV<SAPr`zGcYj7fLS^W3=Fbh
zmLUTJgB+LzDilC!MHrkI7#I}5Vo?kX3?N5~Fl52Sniv=ul)$o67(5vml)=mu3=9mQ
zge}6L&&a?4DjL`rOc)s$RKc=VaIq*x1_m{-SR!034Ww@Je@SJ9Bu0>f85p=3PQh7|
zLCKSWfq{)do_TVIR2M7A%R-aIrPCQTCOV1=M}mS76mtv=49tw6GLL=oa%p+S*ApE@
zC*P4aV!FyOSwN<5@)a4C$@65y>UTlagS^NDW*-BSAVPrwB60=90b`iR6EF`%z(l@)
zIA9DDVF49|C?WzVBJl;KCB>8V<pc#ZP{fTHC-0G4t5T9$TmsEI@gR0sYH~?_5d)a*
sn3JBGRFs)KxnEw1FEcN*B%mli38G-~dU>(QSLFq`K*d2ks5oE%06>N-EdT%j

diff --git a/grad_conj/obj/Debug/mathObject.o b/grad_conj/obj/Debug/mathObject.o
index 2b419c5fb1c3ebcf4acee0206d84d84d17ddf09d..6eaedbdc6b4f32cbde9bd2183c7d52a66f6eabda 100644
GIT binary patch
delta 3082
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
aO6hLK(#@<gLX14|;ARD+qMytz69xe4U-2mb

delta 2410
zcmdn#@WzVQhmo5B1a3(%Fz8O?6&Jk1%D`}jk%7TO1SHJBU@_4&ooxam1H%ILiHnr<
z#Mu}a3^*AWD#Retx(o~q4h#ZL`i5o@0Vt`%$iU#vKk<_qTd@EGgO$W&IYv3IBa93T
zlLZ(U{3Is3F)A^I3r)^qRAb5)nmmb7Nf0F2EX2SNAptRhck)rjKYSgG3=H>v-gf1=
zck*WJo5=^*B`3dN>S64dT*~~PmxF<U;RQ(baTXP&$&D;Zj0ThS*~QJu{{8=doJGYI
zCf)7&rISVFh5CQ6um_s(K8Wgs$sbv~8P`m<WzCwrhE<iZWAY`|Ka9U8pJ!9HWoCq0
zG~wjo(9WmLZ#0gxs0hLYLAJxpJkFv5c9rVC|NlE(zZ_>#0XvB!8e)m-WIuLUJ8hUw
zsKYd|JM05Qj|EKigp-F=P4$c>&*X?^Verr9n(V--G+C0foEaoIfztves4)38rxp(=
zT)_B&gYaZWu41MutedxSaj-CkOy19@7IT}Kfx(S|fq^HJfiYtd0|Nuo#2f|&fwat=
zoUqj7lKdhD#vBb61_omW1_s7CT&xTXeC!}*P7(`9Edys+Vh#gi&TK{ykA+*0g@Hi}
zYFzGQM}9G;g6PSS{4$yaaP_Il@yYoGl?;qfAr|gx76t}$sHWn{^Z3Q;%eS&HFeriS
znKKD)WjWLc2Ht|A%)Anq^Xjg%FffFH)q)Z&#Cdg4wcK}+%&v#~kG~|f7;Zp^E-M4W
za<BpaSs56(*clWV7#O=DCgd;(Ml&)naIrBk2r&r9XXYm{FuniJy7{hv03#nGqo**V
zFav{-A_D`1@MLizRbG%2z`@PHz;Ix*r%*8C<hjDxOiaw1Ek&#u6+=LBj(i-gOisM4
zF3rqL-iIBJ^02VTFfcG^FfuUcOr9z#&lo>>tEfEV&dFCr<r!~J{wgY8ZwPfF157W|
zVvsfl27U$x1~mo-1`!5BILn`bfk7QCRtgte2^YHzXT1bj3Rd@(fq?;(li3*NFfuS`
zfW=lY!o--E>KPa`!GiKkFqRgamBj>8n9l@>eG!IECI$v=u#OdQ*|kgz3_4)3EpV}&
za2?m-Vt3$T-(X_(48P%;d6{9>2{FU0Q-O<VGQ%t>fQyyF#k!bbp|uvyI?W6VtuM?l
zzcaAF>?mge$<~7c_$Uj^?-$^#zi@?2tT4wYvcfd0vBDf<1{br2i#fr?+~Im-;bKW}
zu^Lu}dT8u4!Zpu=E1VA(+Xxri2G@K7E_N2Kj*WqVL5hKaft#U#fq_AQfq{XIp@M;d
zK@KdI!N|a%0A_85v+4zyU<w_WVA6hYu@*RMGF)~coOK*73yN8Yb*#)V^F)|o<|)Bh
z25?zd2&<lfjUfxdWME^cgez=^i>-mPcEe>)!o}{vS<Eaji-lNV7MsDvLf~RmaIsDn
z28Mb_fJ}!=FNI5=gtKnIWxv41Bv@hA1;SaSa8?T|%n1wOVjJLM``}`a>fy|faA{C1
zg6c?aa126%wGAGhAP0lQL>OG4Vj>JFa8?JLwF1sM0cU~gQixs-Mu_wEMHoOeIYiJ0
zDk#E`184QXS!+P7$%WFFGeOk`BZC416R6B%c*MZK5Y58CfDn1dz`y`1=Mf^m7#J8p
zr8z=`osoe7R6IjO^h#1IO2DRp%wb?)W&{<t7LzZ^q%%&K+$bw*EX)XzW@P}$f?6q{
zmI*`*M#@9gfC7-2Q3s@tQFromS!Gols0^s;W@ZGnM4$pNtqcqd9+U6OD)R?JCAh%$
i2u^eq6^?@nff`Z}&AgK><+>R&HXoG}Vw`+JE))Qgol%1T

-- 
GitLab