From 2c559135013a6a6c06418f57ea2fc089a2eba9e9 Mon Sep 17 00:00:00 2001 From: Jorge Gonzalez Date: Tue, 7 Feb 2023 16:02:36 +0100 Subject: [PATCH] First version of vtu file format After some testing and making things a bit better and more general, I am quite happy with the implementation of vtu and it seems that it is working (at least as good as Gmsh2). There are some procedures that might be useful for other XML-like formats that might be moved in the future to the common module (I am thinking right now in the implementation of a general format like XDMF3). --- doc/user-manual/fpakc_UserManual.pdf | Bin 181522 -> 181687 bytes doc/user-manual/fpakc_UserManual.tex | 5 +-- src/makefile | 1 + .../inout/gmsh2/moduleMeshOutputGmsh2.f90 | 20 +++++------ src/modules/mesh/inout/makefile | 5 ++- .../mesh/inout/moduleMeshInoutCommon.f90 | 27 +++++++++++++++ .../mesh/inout/vtu/moduleMeshOutputVTU.f90 | 32 ++++-------------- 7 files changed, 51 insertions(+), 39 deletions(-) create mode 100644 src/modules/mesh/inout/moduleMeshInoutCommon.f90 diff --git a/doc/user-manual/fpakc_UserManual.pdf b/doc/user-manual/fpakc_UserManual.pdf index 154eb5b6131721f0d957daba28b534627dd05e2b..da9471c2e3131c41080d8a832dc6ef1febb6fe46 100644 GIT binary patch delta 16188 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 Ssew)hg@sTH2q^2QQ2#$a8L1-x delta 15937 zcmaiacRbba`+tt?A~VU}Bb?XS$IJ{7S;@%WNn~YovR9IkBZNq0Qz2QIQT7a3B{N%+ zhTlu?&*%HD^ZGma=G#2C7=o0Mc%lY%J`hbL2Am!4HoBB}_c zJU~2>Ugz2Jr95iIR2F9?zA?dyrvkN`8B_*pfc+m&55UR&P~5qX!RXxlm8joSF$%G(LtVH%y?l>z6PO80Wb zl?v+ZaYx)W*SNCrH6Ks7@H^b4ANmzq?u|{Z(Xoz|gjd|jci^_E!j}`uy8A~wpBaB! znYsS+$TI^DjOqA_h1&<`iT4-EWVtIft!>LRLw!H_u2}?H?lt9|fYm+fwd|nQtyoVi*EBUedT&BF7H^bn9_si=W#Y5X42kx(juD4y8T9Jz?4n9FI zd&ztScgz3T@!o9O8^R^m#mf$lkE}CRCY(#wSnw^A)(S4`lYT4Vdp@DoC+2>7@X@s} zwpMDd6*?y)jvw2#F?@{O0x_KJwc&Xs#-W6$*`|WecgsS1$J9mH85!iKj7Qy){rb(&rmyph z+X{J12d)g={3xVi_34Waw`A=XR_*>!p&`}6DVwuaGIs?mCr8c?VLA*~7mKp5zhZjh z^QZ}D!Uqf_XqwzVaqQ^Cuseehx*&?#z9pJD-xx*NxY?b( zOq)IR_E5>dz2Tc0dMeH>wn`UL>j;Me1n>)cS+dj~af3Q0-hpwp?8;6sS-4}Fvw8t_ z^_inh?sL`-t9L^kMK6%`J(>LFEQ@bK0W)TX#JDP~g6!_D8wG2?EwhI-wy0B9?M=ML zW*XO=Mn9|$2^F6FLcVdjn$FGhc;E6M@z-+|L;9w~Ln46@8Z`C$bUXp%QbfYEN_eaL zK=a!tX0FFo4!vyV%8B9*iV$Vj9tha4UGX^F#LTNUX{yB3!KXh+OoK6gqoeS9ZA))@ zi`*$QhYH!Hqh@(zSyue<{3>&Rz%_}YrYBMSoXaIcno{4YqXlz#pR0K|o3}JNgoR55 z_WQxcmqL5qDe?H%a<-lzcY%iy*llB9@>toSZ)%IU889f`*@?`{j$Ufc4WN%3q%7{9$blz^wLGJ$Q60~Bq4}JS!k_E z;JOga&iLMKJ*5EHPh)?gs_&2hYA!;Ls1>cj_O$s1vd)muEv%(MJ51+nlQbGn?pDL! ze>blFn$xxbYrkr=tN2XVb}ZS!3Fq~>{M;CoA3iF4=#tC{+}6M`$lmh0 zztuOpZTa!mv@73LA2JGO{|^NGXR%aWF21Sl6^VCDcfLPS->n&N(m(yuxV~R+n8#-cFr`@@mkj8rElwWoy&(tT$IzM*0d**yhiE z{fxOH@_1hTmEIX6!!@;GyO7;jPe&%v)QFGydq3GISRYo>d7ZnOW0#@hMTmPEWoqet zpZ$x9qo_c$t!Qyw%RLs>(uL?xN6oS<{Zg008fG)Rn(JR>YO*JrVg|{q(&FxqiQ*Vx z7v_$Pk3?UM9hWwI{Fa-U$^Xh%y~3rWA|o3mqnyD$dTaLCuIwSL_uOaJ#){O=&)O~C zF;P;P{*tZItt)77_0+Y*h&yrw)%huPHKLNh9WJpDA=!wH))pH{rPXoNA*8-}zs-YM z2O8JI?_w9W?LyN}5-sZ%-YQ3o%hf$8dp-Hw^0DEJ!ON58<^yYik!kbMD8m}}Bt^B1&N=^fvxe?A?jLZ<7X$;rn&T(e zFq9P%5#{3zDzez0#2-k3$Aqs+~qV>!;#<`ux?H%xW3N z@x=|UE{8Ox&mm;w1Ye#V?)gq|ig{X=orgTefUEv_gK8$p@X`7HkMfR#1-{9296Fhj zH0>sYOcW^dpB-Ol*{CobDyE8EhVtWS6>ELB24w)8O&8aaFc~ zce2!gt{=7S$0lUUVZ_HGuQ}NzFT2nboE`O8lY*t|$yUp&BhoE-)sC~w1gsA2x`gVNkJ6~sQ4YdrVtjDZ5hI(8I>CCv49qaBd<0H;G zc~vb(6?HR0IjNANs#-tnMoJc!lEir8BS$ND7P$*}N2$eB?0;qXaHt%TTp(Un&JW>u z&pO{X%gp@!hPc=`yw@t5F^^mCZSs@0etsR3O zY;(sr!$nok-p-RcTqfLAd}l(4DZRyndOW5BHLWjZ8&rc~zkRzAd+g^jP0rRQWUc>Q z)OT2`Qqy8vqgvvlG};zP_ocFUyRR3mlE|5wA2zJdrx0Sdheg?zjz1xcI?W=T$x$6* zD(BNKzDPugbu-Y|Ip>$=E5|M!o~bTAoHsD=GK?brv`meTXP9AN_~&BlOuptK8eDF> zdd+ly3)?G%K2bxq`dm5c@Xna#Wcw#Igpzv6iS2Hefv?%+INdzMinjYG&)}Z#kCYWd z(&**X-6*Cg*WW33I*;TNSS0A1_4Fg!rM^&npouKCQV2hPXiTiw9P^P_oQ_vlk6bZPk1-`U%xp)rb)HQF;i*A%`L%g&ipw+=m95v ztnND&Z!=FCf4Y=tyAS;-C!958sS)WLbUtHs-@}Ka2Lwd!{GKqRmDHfI>#T zx+6=mgcdn+62AveCzx_HvS^?8KJ)&j7YDU&*}537q;HyRsn|E1ESU?XM4h>%9+R=# zEO*`;)RkCjDevfMle#PX4GYSrpkL6tkpMHcj9d@aqr+7p-BvJ6wHJQVfWqC5N zt8D8cR^ep#GMuPdDs|#xM-qbn&NFrYhM@$Xz}A?zN94{@Pu-oku3sL<*BL)q*szb;;|)Lm~u#0)M%1H^I=h ze&R$6{bYFs%A^{3u0N_ZKbaTlae!Sc;hTmBi=y zO~?p~>EuU?sO)BFcRlKwYG(~-j+$$FwR7|I`g>u{)0`VnIr^~P_Gsrjm;+pC?@q0A zV5*{t@7xI)$G$?{rc>#)=SS=9-xS+*YHDxPZ%9hKoJ0+ne7QQqXwj!uQfeVcnfue$ zx>2l3Jbx%4tl}(zvQ5kc`dZC5$uPF)ALS=H+xA|E+NPd5)-?V1JttPs8?b&lc>l5=YNh$@Klm^N7 zrxXpiG8-Q1NIcX2Zs&MspS6rWS8j2yLdf@!`9f~2j1`-z7GZt(r}+HBS1u;CV=2|M ziL*HIly#HnOb;2qBOf-`PpE2ky`|7?>5*5=vbYVK-xB!XI9BjFCit_)!|jZ>GiSYr zKRC*+&_`#Tz5S-(?s}D&SS-!TG|HEN~@pIOHNuZ#=vtRtFIu9eq+Q$giN*JF^99S|F}){E zxWnCVR~=8?ii!JvaeyO$#amJr=rz!>oB#GD>e6ZHJH2@i(+TbT<+lxC%bFU-_OC=3 zlay3X4GA|gxfe#d4{UzAe3h6Y{WzBA`HiH(-dU5b0mr%E5Q}A*RT2H+EL(Zw)@Ro1vGTZ9kt}cy(i0R?=a%=P7kS3WI-4iN z!=?IpaCGFX2!91EyC;8gM^5i~O;hF<)qI$AiL_`)Nsr~+J%!->d=J$YjSs&13FWKl z>n(Q6=|{ANbyJMdWS<2tzkS>rx{BO(DR>)o}ugCERszz3m#D9+jtY(~s<1 zmz{`ERZhxx!`qEShO%G$T+K}`u_-k96)pp4(LT=)$-0^PGrE*liD6}5ROk&=&tc+T zT{V51q%Fu@Kv1c#6M0hKc2rQ^PlY?mqZnnJ&~~XrAm}VpvB;K{>lg2^7q?gkaz)g7 z8RX}Z-zR2TelI8Jm#TCz1kWh;?#61~y)Q)+ZoN|IAZC2p!Ybv_ynFk7=5TH~<5(5B z`S&*@FY?&y&&<5f%Jil>o~em(@afTO=PoM}C}B4li5`nP${RIgA|qXJUsomhSoN#V z*8IYrno$>d3)Ih_>Nw=o84>+hziZ1P^Ssi>CavmYiwnD-ZxCEKA5+NtD?P3-KUA`j zY;z$y%t-UisoHIejp*`B$qR7#bAbFQfPFpE$X3#tg`FqGUfT3@C}zxh?9dt|W4O6X zOnw;QDqzHj7&2el4GBsSv6mg^W_XzJc1SeS2u4Y1}D!xisbAOH46W6;>X1y z+Y5C$nF6;(1FpiSydEO90X)OB-}cuW9*w z*p=eOrp0)_)l7X6RIi5Hcwc=k5(O_viWp0JEwi<3PToGb)pcK-Y0Kum>XMxGph}v> zGW`!>gMcN!krkTWkYO4I=8BPl-dX&&&htgigEy}%ZJe68NO%*t6du8GH2c=kTZ2D1 z3m))0dP}7)^KrZM>7ye}yT#r#Z(-0riXyIkmL4v^fM&_qv)H!B=7ML++6oPuY0Iu> z1fC=_6KYPQ|CQ-|;q<8@?&yoLz)f=Iq_^LPoXGgOx0XH(J#lXz!F2*LV`GV41-?#k zoRcnL6B~~<=(h;{+^#Pd7$1yD6Of!_0lsmlWU5|<*}~gt5_TW0#+b7V+Z+weSQCsX zH4Ugdi~Do#e6S0g{&+X(YfW1Sx+v3<_qaWLL-5Bbc-oW}6wCA`-%sizx27}B=zFX*{iR0j`X>cQa<(rAIKup?wVMAd7_vnvf^j7((`3b&spAM_MAiIyM;NuQzg&G z=N|P=J~WP(;A#y^()3moW|MuJ=Yme9lXJOVtI0cbU(m2AS<8m2;Pw$=^2ly}`>mCy zSu2Mxy>poj5l*~J5ZS0QP%B})>~Qaih$d~nqVeg(Y~C_Br5^H{%LD7RTMbrukLN{x zdhC&@#~X2v!VxWM85Miq7QV%s{A3w_8ZADl>W!V38T2yP5-7+&dR^dO=D~4maB9&0eEww;{yR;`I69Z?4I${#GcDy zLBg#^Qf{>7T6$1-as8~@G2vmL7MJT!c3~;J$*djG)K>IlVz*!uy~bMe|#k6-eoI8 zM(Yv1op}7pq;GQg#ZOt}0#{83KYkkgIq~3P)Gu9)y&t9bW{x=!G#*KC3s~PcPh0py zxgoxknbkq?z6N%W!ZRh-H%o`2ZyPJ1(6A@VDfZ3T{)*i-FV7S9)^4=mukJQ3v`vLgL^!G!g!s3_+wVBIBqEd``B`MQL!(NLf>d=-E%^M2^DY ziGAZ_d{w{t$v)%$`_Vcb?C}W)XCHfMN9oJbSESvg-LKe7U$ysicDIxEB$gk6T_&KB zSOo=8iUT41GQ5og44EC-viJm%M$Z*wiYt96tE71hDGG**3t5Xy4jT>@MDZ&7X$l`x zrgowwqY)&Y<_+PWjSjoXb~wtj$b=J zc4i>IcKZ?DqPRv@bJ$$uaZ?o4$?63y!tNl7n zfz{h8akh;6g8q(2`1mvxsszpNS!BP_ID3KWoMt8myPW&v`|MYDE@F7w?@c$L`Lao~(q2?e`xT=1Hb( zCO@|CqE7=PaDvIaDa;a4MlBL8EFZXRB!TQD z%f_uJ*o>~>v8g194(1z$Kj^gxA%c|qjK5?SO%@#%Y3`ZrppCRFvg`9cZT}K^AtDnV z)2Gbf7p_Uq#26%6t;=7e`sv8~aN{qR>SgPN$sYy(_|hLZww-%KS3G6Yu)#ZkGcr9t z%qGh2dO>R-t!X3O#n&Y^7k5bXeiLIREqt)l*%DML8?n#WxC*EH+ogWc|y7&45GwCm z|2(bHuq!3ST{84?n(uL}3}+2N&TX_feQq6DVP8a}X}3GNf8M+B8|ry5RmshO7m0!5 zohDNqaoijXm%Pm7#x+rkGNvnu)IU`S*4)?qB0oP94-)_SBwVYwH}cuH+M>}wv(7%U zs#mfZDoS+@??*fMwj`G>Sj?ulMFyls z7ankNNc)dSXm2DwUZr(6Cm!(-y}ejcX>M0%c-w<-AEm zmRQ%lcp{I=!~(DB_1%GVMYWkKQh z7{{?teH6^NrMz*9<@%?W-#^?SbXVG2K4Nu}7({vIWNg#VRA)|o3R7TdN}ZaC&7KoH zb>mv*%z`Fckj_kpf)!OZe^~Q?XjH`W%FekAay6dQ%%8)*)?V_pJ${Hwo3G^DQXapS zYXDwQFE`x6|M7YT@i~o4^s%rjNLh28NGap~OEK6bUOH6SQ4Bp%n+s*iLeM)Rq#pWU zLC9Q@?0YV~N+``MM0pGJ-yC>XD>hR&r~z; zRTw1*lb3eU5p*A^PESuuV|dtz=?+>?Ev8!d+S3tQZAa@~WP&@+*1OeUbbo(VqX&>R z~=djcD+2+%!I4UY#d{&v@UZzJoAmMqpdrR^=juvnga{yFS|z#vEky)Z^dr zwPScI+w}xPs|l|AeZEo!V`KicFNg2@YusRTQkCaaJ;JfS6m;q$SE<&U=}uSnvf%3a z^6IU!s^bflS+VO&d3z7vqofoi@UHSj!P~c$duq--q2$S~Sr?9UJ1x4CxKqevE&j5@ zPl~Jfd9%Cr6|xGAw*{}CeO-3-0GblYL2Bt$tblenfUe|_%s+H1)i ze}Pv*+Fp0K8+G|_v0k$F84Nv9u(-FP*Z$$`QyWfk?+%w6Wou_1Qj$79On8tKGubdRI)U|#mzI>vT zXBl|;GDp3z>%-GU(}9skmq#DjvaW7hRiPcSFnvcTR=SfjS+}aiG z(2DKEfbs=R)MjHxVL)Y;*<^Q#>qUlVe3X?c!4{SmY^X#~L#QEiFT=JrK~&CbeEM`! z4A;ckyvTAtxz$R@Sr4xgC=XTj7L-E{d30wD28My+*9%W*as{~tH&#Zc` z!#cgDnk=7UN;Y=?Y+|?K=NA{A_hWGM#rr^*Y9NYRbwatEzQv;0_YQ-+)3P^>zt(Ot z{^2q_dY5<65zA2!mx9P8Fupna!l?SBxaYK6l&@3qc;PK8*h`i-m7cpeqeJ$xl6UXQ zF25TlKa(Ectmzc}j17}#*cP3Zq*8?7la^GwD@u8WTWt5eO%ZVM=9SICx{(4mL)O{k zhngW%x7f8 z)a6}4f!345V@G6~pJsfDK3TmOb(AelBdj%F! zEvrs~ZBFIzsqpYt!1VL+Je{vPm+s@P2h>KkN=9rxJ

!!;UqadsaQVY+!jf?eTkl z_s3=nXE5T$Iiks3AMClect118uQeh&9obk-`EILQ7Dz0N1ZXS?1*{Psbe?45qwR9s zv||m=EBsIQGAPgDn46xaFL2%~0OG^04Tcj6E(tbMyAX$&TCWSk^X;0Pof z0sqg5DxW-W9_ad_~dzdwfK;b?&53P^(^z()Mw=f5I=G=Qk|7{*LMBJrdjA#f;C>F{9xjvze; z$6-k{gW~}ZP||Y%0*QgpP@piNK!iVK0w z4&)Dq;}IDAZ)yG%1_j#kkAuI@A+b=jkZ=s-E)u{)41+`>pyyBo3`9F525K!N9%>R4 z0M!nIL_?UMQ20MJ{;dcG_>Z#@{%{Et1_7}X3j048Qg==JRkA#E-FPEaV9c8VT`P3>Ff3cr2V~4L+-ggdWFY zNo@uOB^(MJ_8`W_3t%_`0*fWl4~$_j_57_f0N}BtmI6(TMUxl>JO`jifCZ399EyYo z{NTBRcoG6J{=dM-p%HjUkm2B9f~+cp;Ry&hNn`;C6q;00IGEEQ(BjZ26a;P@K$`r( zy8wpN1aJV4`i%zBy$HrjK;lWm49o&ps59ZfpeMl)40%#105k?ciYq7u5=|-v9*6p! zR}ON*|KWwlVGz)RSTqSt;Di4oDnPe@+y(PDp~>>y#`F{CK79EBn6kic_T49Ph-4lFi*7?%4VYolgnu;+r~hyu@GA_P+Q2mq4V!GJ9_vMpIA5?0vi_OOzH(#00FTx_P=fCzx5Rd zHaHL;$AZ=VkN1ef6)-7r$fN?+E+jO4f;}R!vH~VR06)e+QV|@BB?TWmhb0|kKpKwJ zO+h2!p&1v1mqdIx5(Q3(yu{v0n1CS`PdZrua2$aAQ@h{x$HJk`2qsqusyMJ6Bc7=O zeF6zJ1DLNM5s&*HX%+`I*MGnZ3IGa)fjBQ%QX$m@Y}Ec~AOG?R9QJ=O#zFHt4i9Av z_DB$+!5#^c3-L(!pP~LwO$Fl`;*5B379rIR?3*CYh{r&!iN`?eEI4IDg~75wJrAr5 zjLqQ8fPs1w9uMiEaaaV7#0>zjnZqNAw$(7a1RRn#zG4~}52ZQ5@=U>8DU^o;p;3Z5%p44DqJtH*)$OZ$cxBvi7+QbVrFd+hDX#s#A zl9nU@EWD(%CfJGooq~SL4~|`=aRY#p9EtmaLSg>_^UoLoz^RACEx{}dNk(8{14|pJ zCBOmmPv8G73h-2p88uV(poi~wL5lg0?BGAV4J)L_&>7~@HU^FTn-#103m9Hb2Z z$5e4B)Ch3yC1rvDX9!|pEts-#IPh`E$B4g_I&dWn8bhi)=!E~n)e+EX5FBW+5LZWl zUmWuuETjJPf3RzX_&Neoiouo@Ixhj>4voZ$2Lh4~U~nwh-2N*J;h*&&fBalg1|;OTZza&>$h>`ays}QYT1*q)sr3NFx@!3#r+l zBIw_3*8%?jrXM5<(x+oVR3Wf}Wf|hPNc11D{zesK0$K8b!hkEKf06lZe~<`vcmEO( zeByvc$^`5X{+{v<4j%m11`+|myO00`g#n?4@F0K-jlYQp4?>&<2WC1V+asvP+%!1g%C_PkdX>R8Zttl!9kDI{^Q#TeSyfeqBZh2cMS0sL|Yk~F|gHL1^l8?L{%vr-^52ynea zsxbnjl0Jw4u*CCaFlGs8f5>K|mL_(^