Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • vtk/vtk
  • brad.king/vtk
  • allisonvacanti/vtk
  • chuck.atkins/vtk
  • shawn.waldon/vtk
  • robertmaynard/vtk
  • gcasey/vtk
  • danlipsa/vtk
  • sankhesh/vtk
  • nix/vtk
  • utkarsh.ayachit/vtk
  • seanm/vtk
  • amaclean/vtk
  • lorensen/vtk
  • dgobbi/vtk
  • jpouderoux/vtk
  • ken-martin/vtk
  • ben.boeckel/vtk
  • karsten.tausche/vtk
  • jbeezley/vtk
  • demarle/vtk
  • karasevpa/vtk
  • sebastien.jourdain/vtk
  • will.schroeder/vtk
  • pixelstime/vtk
  • sujin.philip/vtk
  • acbauer/vtk
  • berkgeveci/vtk
  • cory.quammen/vtk
  • john.tourtellott/vtk
  • jcfr/vtk
  • tcoulange/vtk
  • finetjul/vtk
  • aashish-chaudhary/vtk
  • tadeu/vtk
  • bxa/vtk
  • clinton/vtk
  • cjh1/vtk
  • alextsui05/vtk
  • jorge.suit/vtk
  • mwestphal/vtk
  • arnaudgelas/vtk
  • splines/vtk
  • dcthomp/spline-vtk
  • Lin.Ma/vtk-spline
  • matt-mccormick/vtk
  • ndfabian/vtk
  • scott.wittenburg/vtk
  • bill-hoffman/vtk
  • dlrdave/vtk
  • ethanb/vtk
  • johan-andruejol/vtk
  • ashray/vtk
  • Toki/vtk
  • kimbaol/vtk
  • toster/vtk
  • applekey/vtk
  • quantumsteve/vtk
  • a_neeman/vtk
  • biddisco/vtk
  • mhanwell/vtk
  • jjomier/vtk
  • dkuegler/vtk
  • bobifx/vtk
  • yordan_kyosev/vtk
  • schuyler.kylstra/vtk
  • ilya-five/vtk
  • JimCosby/vtk
  • Geng/vtk
  • blessley/vtk
  • davisb/vtk
  • iMSTK/vtk
  • chunmingchen/vtk
  • danlugli/vtk
  • chaffra/vtk
  • tjcorona/vtk
  • mennodeij1/vtk
  • thehummingbird/vtk
  • prabhuramachandran/vtk
  • chiranjibsur/vtk
  • jwilliz/vtk
  • wydesenej/vtk
  • msmolens/vtk
  • Lin.Ma/vtk
  • joseph.g.hennessey2.ctr/vtk
  • Wu/vtk
  • rogerkint/vtk
  • Xabi/vtk
  • timt/vtk
  • dcthomp/vtk
  • carson/vtk
  • Niels_Dekker/vtk
  • dmsurti/vtk
  • shreejan/vtk
  • brudfors/vtk
  • yumin/vtk
  • bob.obara/vtk
  • cousin_it/vtk
  • fstrati/vtk
  • dzenanz/vtk
  • cdeepakroy/vtk
  • LucasGandelKitware/vtk
  • alexis-girault/vtk
  • sreekanth-arikatla/vtk
  • SumedhaSingla/vtk
  • ricardo-ortiz/vtk
  • yboumenir/vtk
  • alvaro.sanchez/vtk
  • jgoizueta/vtk
  • bloring/vtk
  • akhilsurabhi/vtk
  • appstonic/vtk
  • waldyrious/vtk
  • lenlen/vtk
  • romangrothausmann/vtk
  • NevilX/vtk
  • natorious1990/vtk
  • ktsumura/vtk
  • radix-vinni/vtk
  • saumyabhadani/vtk
  • starius/vtk
  • mgenet/vtk
  • dhanannjay-deo/vtk
  • fabian.wenzel/vtk
  • stephenshamilton/vtk
  • axkibe/vtk
  • grlee77/vtk
  • lisa-avila/vtk
  • martyngigg/vtk
  • asmith/vtk
  • opoplawski/vtk
  • maxoox/vtk
  • estan/vtk
  • awehrfritz/vtk
  • dsgruss/vtk
  • abheekg/vtk
  • jfavre/vtk
  • updega2/vtk
  • dgraves/vtk
  • zaherabdulazeez/vtk
  • lisphacker/vtk
  • BillMcGrory/vtk
  • Yang/vtk
  • dumontal/vtk
  • DVigneault/vtk
  • xyjin213/vtk
  • cpatrick/vtk
  • isohatalaj/vtk
  • rete/vtk
  • polycorn/vtk
  • Promayon/vtk
  • karthik/vtk
  • betsy.mcphail/vtk
  • nschloe/vtk
  • kmorel/vtk
  • aniqah/vtk
  • rupertnash/vtk
  • iMichka/vtk
  • shru13448/vtk
  • aeslaughter/vtk
  • QuadmasterXLII1/vtk
  • QuadmasterXLII/vtk
  • haocheng.liu/vtk
  • LouisBergmann/vtk
  • alouis/vtk
  • bjacquet/vtk
  • pieper/vtk
  • Ychuan1115/vtk
  • srikanthnagella/vtk
  • SeunOdutola/vtk
  • jborck/vtk
  • sidd23295/vtk
  • besoft/vtk
  • imikejackson/vtk
  • tttanichka333/vtk
  • vromerocano/vtk
  • fogleman/vtk
  • hinashah/vtk
  • abhishekns/vtk
  • mpkh/vtk
  • borisb/vtk
  • eg/vtk
  • technic/vtk
  • chet.nieter/vtk
  • maleike/vtk
  • emmenlau/vtk
  • florianlink1/vtk
  • teracamo/vtk
  • ole.v.solberg/vtk
  • greenjava/vtk
  • snorrikris/vtk
  • HaipengY/vtk
  • hina/vtk
  • jhlegarreta/vtk
  • diorcety/vtk
  • taketwo/vtk
  • mnucci32/vtk
  • gnzlbg/vtk
  • dfroger/vtk
  • WimK/vtk
  • luciemacron/vtk
  • kd7uns/vtk
  • dgkf/vtk
  • gocarlos/vtk
  • jayas121/vtk
  • olesen/vtk
  • Jon_Garner/vtk
  • cschmitz/vtk
  • Paul/vtk
  • kaaalid/vtk
  • neiltwist/vtk
  • Hertz1239/vtk
  • jupiterben/vtk
  • pierre.guilbert/vtk
  • matthew-woehlke/vtk
  • xantares/vtk
  • mayeul.chassagnard/vtk
  • t-ikegami/vtk
  • gbivins4/vtk
  • jacob/vtk
  • sarahjelinek/vtk
  • nicolas.vuaille/vtk
  • art/vtk
  • Levinaz69/vtk
  • aron.helser/vtk
  • yohey/vtk
  • alex-novinski/vtk
  • jacob-becker/vtk
  • robbie_lxw/vtk
  • burhan14031/vtk
  • thewtex/vtk
  • ML/vtk
  • bilke/vtk
  • bvanelli/vtk
  • Juliano/vtk
  • luliag/vtk
  • muellni/vtk
  • barkinet/vtk
  • kvankooten/vtk
  • Moonypoony/vtk
  • derino/vtk
  • wendy/vtk
  • kekivelez/vtk
  • Archeks/vtk
  • claireguilbaud/vtk
  • lassoan/vtk
  • brunbennett/vtk
  • hcwiley/vtk
  • jie.cheng/vtk
  • kghandi/vtk
  • michalhabera/vtk
  • francis.giraldeau/vtk
  • GG1991/vtk
  • ugiwgh/vtk
  • benjaminjeliot/vtk
  • locuscaeruleus/vtk
  • marcelotrevisani/vtk
  • Punzo/vtk
  • pavelpokutnev/vtk
  • sylmarien/vtk
  • jbvimort/vtk
  • athius/vtk
  • aowen87/vtk
  • StefanBruens/vtk
  • nocnokneo/vtk
  • mds/vtk
  • forrest.li/vtk
  • rcfwgithub/vtk
  • Guenoleh/vtk
  • drmateo/vtk
  • ahota/vtk
  • nishanthkarthik/vtk
  • pdhahn/vtk
  • dyoll/vtk
  • todoooo/vtk
  • Rhodanos/vtk
  • bjoernthiel/vtk
  • pink2/vtk
  • thudacko/vtk
  • qwofford/vtk
  • michael.migliore/vtk
  • mohamedAhmedIsmailAhmed/vtk
  • m-chaturvedi/vtk
  • Shoepon/vtk
  • ricardomorello/vtk
  • ktsai/vtk
  • hjmjohnson/vtk
  • daseven/vtk
  • federico.miorelli/vtk
  • jianfulin/vtk
  • ihnorton/vtk
  • handrake0724/vtk
  • yuelinho777/vtk
  • eberroca/vtk
  • arankin/vtk
  • zachmullen/vtk
  • alzi/vtk
  • csukuangfj/vtk
  • nick.laurenson/vtk
  • ethan.stam/vtk
  • bujack/vtk
  • ifmfr/vtk
  • jpulido/vtk
  • Butakoff/vtk
  • innokentiy.alaytsev/vtk
  • hendersa/vtk
  • tkarabela/vtk
  • charly.girot/vtk
  • dbonhaus/vtk
  • ClundXIII/vtk
  • shaikan/vtk
  • timrowley/vtk
  • tomj/vtk
  • ombre5733/vtk
  • hbwhlk83/vtk
  • cpinter/vtk
  • fbudin/vtk
  • nehaljwani/vtk
  • CometS1/vtk
  • debian/vtk
  • jan.o.schutte/vtk
  • normanius/vtk
  • wehhh/vtk
  • bwspenc/vtk
  • sergioPereiraBR/vtk
  • yurivict/vtk
  • GarrettMorrison/vtk
  • jensgw/vtk
  • alesgenova/vtk
  • paulharris/vtk
  • niranjankala/vtk
  • tavaughan/vtk
  • christianezeani/vtk
  • kihneman/vtk
  • phcerdan/vtk
  • Bengt/vtk
  • knolla/vtk
  • shreeraj.jadhav/vtk
  • Sunderlandkyl/vtk
  • drpeterfranz/vtk
  • pedroneto/vtk
  • levara/vtk
  • TheBlackCat/vtk
  • Bleach665/vtk
  • JeromeDuboisPro/vtk
  • pbergeron/vtk
  • ilovezfs/vtk
  • jeffamstutz/vtk
  • edwinbennink/vtk
  • ChrisB/vtk
  • rexchai/vtk
  • jclearwater/vtk
  • pengzhou93/vtk
  • Cotrik/vtk
  • drouin-simon/vtk
  • Simon-GitLab/vtk
  • mcvaneede/vtk
  • aaigner/vtk
  • murraypurves/vtk
  • Chrisyunhua/vtk
  • lhofmann/vtk
  • tobias-haenel/vtk
  • aitormoreno/vtk
  • severnaa/vtk
  • angelika.ophagen/vtk
  • AOphagen/vtk
  • byhongda/vtk
  • HuangLiJinJames/vtk
  • NicholasWon47/vtk
  • chenhaomagnetic/vtk
  • imngy/vtk
  • maxGimeno/vtk
  • kf6kjg/vtk
  • cstew2/vtk
  • lrineau/vtk
  • vnpavanelli/vtk
  • erichlf/vtk
  • SunBlack/vtk
  • PauloCarvalhoRJ/vtk
  • McrmDev/vtk
  • jblekien/vtk
  • guerrero78/vtk
  • hygonsoc/vtk
  • embeddedmz/vtk
  • wangtaoz/vtk
  • andrea-iob/vtk
  • ollielo/vtk
  • boonth/vtk
  • lugia-kun/vtk
  • adrien.boucaud/vtk
  • jstark/vtk
  • mathiash/vtk
  • patrick-oleary/vtk
  • patchett2002/vtk
  • tbiedert/vtk
  • MITRALZ/vtk
  • shihabrus/vtk
  • Xaxetrov/vtk
  • charles.gueunet/vtk
  • edern.haumont/vtk
  • schweitzer/vtk
  • leonhardt/vtk
  • williamfgc/vtk
  • hococoder/vtk
  • barcharcraz/vtk
  • lcantell/vtk
  • matt.leotta/vtk
  • kairong.jiang/vtk
  • neohsbrother/vtk
  • animeshbaranawal/vtk
  • jdoenias/vtk
  • bmwiedemann/vtk
  • stephen.sanchez/vtk
  • kislinsk/vtk
  • yufeimi/vtk
  • milljm/vtk
  • zmj1316/vtk
  • zhuokaizhao/vtk
  • nghia.truong/vtk
  • Mycai/vtk
  • Jacques-Bernard/vtk
  • yohann.bearzi/vtk
  • nghiatruong.vn/vtk
  • caitlin.ross/vtk
  • aandreyev/vtk
  • robustwangace/vtk
  • kovtuh/vtk
  • paulyc/vtk
  • pronaman/vtk
  • huyidao625/vtk
  • EvgenyVRN/vtk
  • yale.lee_nga/vtk
  • cobo/vtk
  • Highphone110/vtk
  • kevin.tew/vtk
  • daniel.jasinski/vtk
  • aspsee/vtk
  • Jellby/vtk
  • Bo98/vtk
  • tkoyama010/vtk
  • keith.m.ballard/vtk
  • XinhuaZhang/vtk
  • Simon-Esneault/vtk
  • maximilian.reimer.42/vtk
  • florian360/vtk
  • patrick.avery/vtk
  • aglv/vtk
  • mat127/vtk
  • brad-t-moore/vtk
  • thompson318/vtk
  • kingyue737/vtk
  • gilcu2/vtk
  • shogarth/vtk
  • doktorkjeld/vtk
  • BuzzBurrowes/vtk
  • amine.aboufirass/vtk
  • kirv/vtk
  • westphalm/vtk
  • gerald.lodron/vtk
  • yhtank/vtk
  • paul.lafoix/vtk
  • KiraGabi/vtk
  • ralovich/vtk
  • s.jafari.m/vtk
  • richardc/vtk
  • larsoner/vtk
  • DavidLaidlaw/vtk
  • thibault.pelletier/vtk
  • dhanakoti.murali/vtk
  • vbolea/vtk
  • aravind90/vtk
  • martijnkoopman/vtk
  • Tiphainejh/vtk
  • yozara/vtk
  • NicolaasWeideman/vtk
  • fdepourcq/vtk
  • Eustache/vtk
  • mdaley/vtk
  • aangelos28/vtk
  • RaoGY/vtk
  • sthibaul/vtk
  • qyr3366/vtk
  • ChristophHonal/vtk
  • christos.tsolakis/vtk
  • Cool/vtk
  • hansuk/vtk
  • mdorier/vtk
  • nerdalien/vtk
  • yasushi.saito/vtk
  • paul.choisel/vtk
  • kovynev/vtk
  • bobmiller/vtk
  • ziqiangxu/vtk
  • gonzalosaezm55/vtk
  • SailCPU/vtk
  • woodbot/vtk
  • yufan/vtk
  • amelvill-umich/vtk
  • mossaiby/vtk
  • likehuaer/vtk
  • timothee.chabat/vtk
  • Senidenary/vtk
  • Tobias-Fischer/vtk
  • BrentFoster/vtk
  • thliebig/vtk
  • thomas.caissard/vtk
  • whophil/vtk
  • RafaelPalomar/vtk
  • Angelo-abel/vtk
  • shawfei/vtk
  • MattesSchu/vtk
  • guillaume.gindre/vtk
  • maack/vtk
  • zqcolorful/vtk
  • tniemi/vtk
  • imalkov82/vtk
  • bzindovic/vtk
  • v.engelgardt/vtk
  • mjjackey/vtk
  • halowine/vtk
  • laurenn.lam/vtk
  • zonghx/vtk
  • ProGamerCode/vtk
  • bp85540/vtk
  • julia.sanchez/vtk
  • melanie.carriere/vtk
  • jules.bourdais/vtk
  • jerome.dias/vtk
  • luca.lacaille/vtk
  • octave.rossi/vtk
  • c.wetterer-nelson/vtk
  • nima.tofighi/vtk
  • jspanchu/vtk
  • jsteele/vtk
  • PetiteViking/vtk
  • bart/vtk
  • LucasGasparinoBSC/vtk
  • julien2412/vtk
  • francois.mazen/vtk
  • lxgwd1983/vtk
  • timothee.couble/vtk
  • benntqoo/vtk
  • jmhawkins/vtk
  • stonej/vtk
  • JackGuyver/vtk
  • rodrigomologni/vtk
  • chart3388/vtk
  • jessica.marquis/vtk
  • rockandsalt/vtk
  • zakaria220/vtk
  • ryan.krattiger1/vtk
  • darktemplarbasealt/vtk
  • scbiradar/vtk
  • andrew.wilson/vtk
  • moritz-h/vtk
  • kyzitemelos93/vtk
  • qqzhoucn/vtk
  • laurent.malka/vtk
  • akaszynski/vtk
  • spiros.tsalikis/vtk
  • sercxjo/vtk
  • jesper.norell/vtk
  • tiffany.chhim/vtk
  • jennifermanzella11/vtk
  • loongson-zn/vtk
  • RonRahaman/vtk
  • Snethy/vtk
  • antoine.ruffion/vtk
  • air-h-128k-il/vtk
  • atomicky/vtk
  • chenjt2001/vtk
  • cclauss/vtk
  • Connor-Bowley/vtk
  • ferdymercury/vtk
  • connor.bowley/vtk
  • Tianyang86/vtk
  • stephen.crowell/vtk
  • xzhang/vtk
  • antoine.schieb/vtk
  • ArchangeGabriel/vtk
  • thomas.galland/vtk
  • kadabraqc/vtk
  • sanguinariojoe/vtk
  • tom.suchel/vtk
  • mgoodson-cvd/vtk
  • jtojnar/vtk
  • bwoodsend/vtk
  • frantze.raphael/vtk
  • YuhaoQiu/vtk
  • user-zmt/vtk
  • XiaLiChao82/vtk
  • biagas/vtk
  • gaspard.thevenon/vtk
  • nicoco/vtk
  • svenevs/vtk
  • olesalscheider/vtk
  • EvanHampton-Seequent/vtk
  • spsjorspeterse/vtk
  • p-j-smith/vtk
  • jaswant.panchumarti/vtk
  • nasos/vtk
  • david.berger/vtk
  • dmt/vtk
  • huangjx-beijing/vtk
  • andtokm/vtk
  • MehdiChinoune/vtk
  • alexy.pellegrini/vtk
  • lucas.givord/vtk
  • jianhui2769/vtk
  • chengchengjing/vtk
  • scienceasdf/vtk
  • maidamai0/vtk
  • GuillaumeFavelier/vtk
  • ayenpure/vtk
  • ikerssm/vtk
  • hakostra/vtk
  • epalmer/vtk
  • Dophi123/vtk
  • julien.fausty/vtk
  • zjibben/vtk
  • nncarlson/vtk
  • Simon96128/vtk
  • jiapei1001/vtk
  • jiapei100/vtk
  • Failxxx/vtk
  • jcorbettfrank/vtk
  • Xingorno/vtk
  • windgs/vtk
  • orbisvicis/vtk
  • jramaiah/vtk
  • luzpaz/vtk
  • kammnd/vtk
  • lokessh/vtk
  • QinChen1998/vtk
  • mirenradia/vtk
  • tbirdso/vtk
  • jones/vtk
  • HollowSun/vtk
  • db/vtk
  • matthiasbock/vtk
  • adam-grant-hendry/vtk
  • Kenichiro-Yoshimi/vtk
  • redemptorridon/vtk
  • Neumann-A/vtk
  • tereshkinvadimst/vtk
  • francorougier60/vtk
  • felixonmars/vtk
  • gabrielmuller/vtk
  • Alex9/vtk
  • XinweiHsu/vtk
  • Zz-er/vtk
  • ferdnyc/vtk
  • mahmoudmohamedk8200949/vtk
  • HamsaSaber/vtk
  • boomanaiden154/vtk
  • bebuch/vtk
  • fab/vtk
  • chrisadamsonmcri/vtk
  • yarous224/vtk
  • zhenhaochu/vtk
  • pranjal.sahu/vtk
  • thibault.bruyere/vtk
  • banesullivan/vtk
  • is0591hs/vtk
  • philipp.weissenbacher/vtk
  • xavier.tricoche/vtk
  • hopfer.benjamin/vtk
  • liyinyan/vtk
  • gabriel.lefloch/vtk
  • bistek/vtk
  • mmXIO/vtk
  • MicK7/vtk
  • jndxljun/vtk
  • Shirin_ra/vtk
  • hanfengyu/vtk
  • zhhaoyuting111/vtk
  • john-stone/vtk
  • woosukbyun0724/vtk
  • xenosLit/vtk
  • ashishmalik5am/vtk
  • j824h/vtk
  • jschueller/vtk
  • alexdewar/vtk
  • mo.gomaa1996/vtk
  • rubendebruin/vtk
  • CiaoTan/vtk
  • bhaq-tri/vtk
  • TattiRuby/vtk
  • griffin28/vtk
  • he.wryyy/vtk
  • aly.tireira/vtk
  • Riaa/vtk
  • b89alireza/vtk
  • john.parent/vtk
  • marin.kajtazi/vtk
  • andy9t7/vtk
  • mikedubb0811/vtk
  • kookoo9999/vtk
  • charly.bollinger/vtk
  • kamm1948/vtk
  • jacob.moore/vtk
  • gaoxinyu18/vtk
  • zhouyi-u/vtk
  • Robbie/vtk
  • couletj/vtk
  • julien.chaize1/vtk
  • shreeni152/vtk
  • lkaly/vtk
  • louis.gombert/vtk
  • linneapalmstrom/vtk
  • ppebay/vtk
  • Rocky/vtk
  • jiangxingkai/vtk
  • xutang/vtk
  • jens.munk.hansen/vtk
  • 5268368/vtk
  • jumbojing/vtk
  • vectorD/vtk
  • mo-schmid/vtk
  • CC9701/vtk
  • Diiiiii-9/vtk
  • moussa-li/vtk
  • MatthewFlamm/vtk
  • sergeylesnik/vtk
  • xpnguyen/vtk
  • FireFlyUh/vtk
  • klevzoff/vtk
  • jake.yun/vtk
  • ixxi/vtk
  • stavbodik/vtk
  • willdunklin/vtk
  • hjhicks321/vtk
  • ymao.mu/vtk
  • fghoussen/vtk
  • Otahal/vtk
  • OccupyMars2025/vtk
  • dglaeser/vtk
  • Skyde/vtk
  • rbinyahib/vtk
  • jmisedam/vtk
  • petlenz/vtk
  • nmnobre/vtk
  • mheinsen/vtk
  • LimitingFactor/vtk
  • Senguo/vtk
  • lee.newberg/vtk
  • svniemeijer/vtk
  • alfiogn/vtk
  • 2xB/vtk
  • karamozianalireza1010/vtk
  • astucky/vtk
  • penfe/vtk
  • lgombert/vtk
  • saichaitanya.rodda/vtk
  • thaumaturg1c/vtk
  • pkestene/vtk
  • rlexmann/vtk
  • gabokamaze/vtk
  • 212dandan/vtk
  • dinghao19960829/vtk
  • ScarpMarc/vtk
  • yangdonglai/vtk
  • stauffert.maxime/vtk
  • dyollb/vtk
  • hollowsunhc/vtk
  • loic.gaillard/vtk
  • ychaos/vtk
  • dperozzi/vtk
  • SeanCurtis-TRI/vtk
  • jhodges/vtk
  • jingliang2005/vtk
  • hbwhzc/vtk
  • zellmann/vtk
  • germa89/vtk
  • 2nafish117/vtk
  • uporersith/vtk
  • jordi.subirana/vtk
  • carlosgcolon/vtk
  • PeterFranzSeequent/vtk
  • cristianAnd24/vtk
  • mrbean-bremen/vtk
  • usiems/vtk
  • Krzmbrzl/vtk
  • tom.clabault/vtk
  • dpseiter1/vtk
  • scivision/vtk
  • Donvlouss/vtk
  • fedormsv/vtk
  • chandan.satija/vtk
  • anuraaga/vtk
  • kxxt/vtk
  • ryosga/vtk
  • Ajile3D/vtk-ajile
  • matekelemen/vtk
  • lililiangyu/vtk
  • ArashPartow/vtk
  • Peter.Zajac/vtk
  • zackgalbreath/vtk
  • bansan/vtk
  • leon.victor/vtk
  • gabbyva5/vtk
  • ClaudioHoffmann/vtk
  • larshg/vtk
  • barracuda156/vtk
  • niconiconi/vtk
  • quangvd3/vtk
  • lmaoha/vtk
  • jarredgaudineer/vtk
  • YingjuHan/vtk
  • afa/vtk
  • thecasterian/vtk
  • codeling/vtk
  • wortiz/vtk
  • undeadde/vtk
  • jonathanschilling/vtk
  • ychu-hoo/vtk
  • FlashPanda/vtk
  • rachedwaly/vtk
  • DownerCase/vtk
  • TurBoss/vtk
  • dunyazad/vtk
  • marquis.weng/vtk
  • chir-set/vtk
  • Mechazo11/az-vtk
  • nekto1989/vtk
  • jean.fechter/vtk
  • anonymous-fys/vtk
  • clintonstimpson/vtk
  • krande/vtk
  • zist8888/vtk
  • Joker-7-7/vtk
  • skashtanov/vtk
  • o.derewonko/vtk
  • ndelpuppo/vtk
  • kenavolic/vtk
  • raimund-schluessler/vtk
  • medmssaouri/vtk-pca-normals
  • karchit0509/vtk
  • gapry/vtk
  • guillaume-jacquenot/vtk
  • Dave-Allured/vtk
  • ctaylo41/vtk
  • johnnynunez/vtk
  • 1div0/vtk
  • aruggieri/vtk
  • LunaNebula/vtk
  • quinn.powell/vtk
  • exbluesbreaker/vtk
  • junghans/vtk
  • NikitaKolebaev/vtk
  • jwilson1881/vtk
  • celynchgt/vtk
  • guillaume.gisbert/vtk
853 results
Show changes
Commits on Source (3)
## vtkOpenFOAMReader: Multithreaded Reading of case files
`vtkOpenFOAMReader` now supports multithreaded reading of case files. This feature is of by default, but it can be
enabled using the`SetSequentialProcessing(false)`. It can be useful to enabled when reading large case files that
are stored on a network drive. If the case file is stored on a local drive, it is recommended to keep this feature off.
......@@ -1029,6 +1029,9 @@ public:
void SetupInformation(const std::string& casePath, const std::string& regionName,
const std::string& procName, vtkOpenFOAMReaderPrivate* master, bool requirePolyMesh = true);
void SetProgress(double progress) { this->Progress = progress; }
double GetProgress() const { return this->Progress; }
private:
vtkOpenFOAMReader* Parent;
......@@ -1054,6 +1057,8 @@ private:
int InternalMeshSelectionStatus;
int InternalMeshSelectionStatusOld;
double Progress = 0;
// filenames / directories
vtkStringArray* VolFieldFiles;
vtkStringArray* DimFieldFiles;
......@@ -8581,7 +8586,7 @@ void vtkOpenFOAMReaderPrivate::InterpolateCellToPoint(vtkFloatArray* pData, vtkF
auto lenIt = length.begin() + first;
auto vcIt = vc.begin() + first;
for (auto it = reduce.begin() + first; it != reduce.begin() + last;
++it, ++volIt, ++areaIt, ++lenIt, ++vcIt)
++it, ++volIt, ++areaIt, ++lenIt, ++vcIt)
{
*it = (*volIt > 0
? *volIt
......@@ -9131,7 +9136,7 @@ void vtkOpenFOAMReaderPrivate::GetVolFieldAtTimeStep(
// assign cell values to additional points
const vtkIdType nAddPoints = this->AdditionalCellIds->GetNumberOfTuples();
for (vtkIdType pointi = 0, newPointi = this->NumPoints; pointi < nAddPoints;
++pointi, ++newPointi)
++pointi, ++newPointi)
{
ctpData->SetTuple(newPointi, this->AdditionalCellIds->GetValue(pointi), iData);
}
......@@ -10490,10 +10495,12 @@ bool vtkOpenFOAMReaderPrivate::GetAreaMesh(
// return 0 if there's any error, 1 if success
int vtkOpenFOAMReaderPrivate::RequestData(vtkMultiBlockDataSet* output)
{
this->Parent->UpdateProgress(this, 0.0);
if (!this->HasPolyMesh())
{
// Ignore a region without a mesh, but will normally be precluded earlier
vtkWarningMacro("Called RequestData without a mesh.");
this->Parent->UpdateProgress(this, 1.0);
return 1;
}
......@@ -10612,7 +10619,7 @@ int vtkOpenFOAMReaderPrivate::RequestData(vtkMultiBlockDataSet* output)
{
return 0;
}
this->Parent->UpdateProgress(0.2);
this->Parent->UpdateProgress(this, 0.2);
}
if (createEulerians && recreateInternalMesh)
......@@ -10626,7 +10633,7 @@ int vtkOpenFOAMReaderPrivate::RequestData(vtkMultiBlockDataSet* output)
{
return 0;
}
this->Parent->UpdateProgress(0.3);
this->Parent->UpdateProgress(this, 0.3);
}
if (createEulerians &&
......@@ -10645,7 +10652,7 @@ int vtkOpenFOAMReaderPrivate::RequestData(vtkMultiBlockDataSet* output)
{
return 0;
}
this->Parent->UpdateProgress(0.4);
this->Parent->UpdateProgress(this, 0.4);
}
// Create internal mesh, only if required for display
......@@ -10810,7 +10817,7 @@ int vtkOpenFOAMReaderPrivate::RequestData(vtkMultiBlockDataSet* output)
// Don't need mesh points beyond here...
// Be explicit: pointArray = vtkSmartPointer<vtkFloatArray>{};
this->Parent->UpdateProgress(0.5);
this->Parent->UpdateProgress(this, 0.5);
// Eulerian variables
if (updateVariables && createEulerians)
......@@ -10882,23 +10889,23 @@ int vtkOpenFOAMReaderPrivate::RequestData(vtkMultiBlockDataSet* output)
for (vtkIdType i = 0; i < this->VolFieldFiles->GetNumberOfValues(); ++i)
{
this->GetVolFieldAtTimeStep(this->VolFieldFiles->GetValue(i));
this->Parent->UpdateProgress(0.5 + (0.5 * ++nFieldsRead) / nFieldsToRead);
this->Parent->UpdateProgress(this, 0.5 + (0.5 * ++nFieldsRead) / nFieldsToRead);
}
for (vtkIdType i = 0; i < this->DimFieldFiles->GetNumberOfValues(); ++i)
{
this->GetVolFieldAtTimeStep(this->DimFieldFiles->GetValue(i), true); // Internal field
this->Parent->UpdateProgress(0.5 + (0.5 * ++nFieldsRead) / nFieldsToRead);
this->Parent->UpdateProgress(this, 0.5 + (0.5 * ++nFieldsRead) / nFieldsToRead);
}
for (vtkIdType i = 0; i < this->PointFieldFiles->GetNumberOfValues(); ++i)
{
this->GetPointFieldAtTimeStep(this->PointFieldFiles->GetValue(i));
this->Parent->UpdateProgress(0.5 + (0.5 * ++nFieldsRead) / nFieldsToRead);
this->Parent->UpdateProgress(this, 0.5 + (0.5 * ++nFieldsRead) / nFieldsToRead);
}
#if VTK_FOAMFILE_FINITE_AREA
for (vtkIdType i = 0; i < this->AreaFieldFiles->GetNumberOfValues(); ++i)
{
this->GetAreaFieldAtTimeStep(this->AreaFieldFiles->GetValue(i));
this->Parent->UpdateProgress(0.5 + (0.5 * ++nFieldsRead) / nFieldsToRead);
this->Parent->UpdateProgress(this, 0.5 + (0.5 * ++nFieldsRead) / nFieldsToRead);
}
#endif
}
......@@ -10992,7 +10999,7 @@ int vtkOpenFOAMReaderPrivate::RequestData(vtkMultiBlockDataSet* output)
}
this->InternalMeshSelectionStatusOld = this->InternalMeshSelectionStatus;
this->Parent->UpdateProgress(1.0);
this->Parent->UpdateProgress(this, 1.0);
return 1;
}
......@@ -11006,6 +11013,8 @@ vtkOpenFOAMReader::vtkOpenFOAMReader()
// must be false to avoid reloading by vtkAppendCompositeDataLeaves::Update()
this->Refresh = false;
this->SequentialProcessing = false;
// initialize file name
this->FileName = nullptr;
......@@ -11059,7 +11068,6 @@ vtkOpenFOAMReader::vtkOpenFOAMReader()
// Lagrangian paths
this->LagrangianPaths = vtkStringArray::New();
this->CurrentReaderIndex = 0;
this->Use64BitLabels = false;
this->Use64BitFloats = true;
this->Use64BitLabelsOld = false;
......@@ -11257,6 +11265,8 @@ int vtkOpenFOAMReader::RequestInformation(vtkInformation* vtkNotUsed(request),
return 1;
}
static std::atomic<int> Id = 0;
//------------------------------------------------------------------------------
// RequestData
int vtkOpenFOAMReader::RequestData(vtkInformation* vtkNotUsed(request),
......@@ -11265,6 +11275,11 @@ int vtkOpenFOAMReader::RequestData(vtkInformation* vtkNotUsed(request),
vtkInformation* outInfo = outputVector->GetInformationObject(0);
auto* output = vtkMultiBlockDataSet::SafeDownCast(outInfo->Get(vtkDataObject::DATA_OBJECT()));
int readerId = Id++;
// std::cout << readerId << " vtkOpenFOAMReader::RequestData has " << this->Readers.size()
// << " readers" << std::endl;
auto start = std::chrono::high_resolution_clock::now();
// Times
{
int nTimes(0); // Also used for logic
......@@ -11293,7 +11308,6 @@ int vtkOpenFOAMReader::RequestData(vtkInformation* vtkNotUsed(request),
{
return 0;
}
this->CurrentReaderIndex = 0;
}
// Create dataset
......@@ -11305,19 +11319,41 @@ int vtkOpenFOAMReader::RequestData(vtkInformation* vtkNotUsed(request),
(reader = vtkOpenFOAMReaderPrivate::SafeDownCast(this->Readers[0]))->GetRegionName().empty())
{
ret = reader->RequestData(output);
this->Parent->CurrentReaderIndex++;
}
else
{
for (auto& readerObj : this->Readers)
// Reader each file in parallel
std::vector<vtkSmartPointer<vtkMultiBlockDataSet>> subOutputs(this->Readers.size());
auto readersProcessing = [&](vtkIdType begin, vtkIdType end) -> void
{
for (vtkIdType readerId = begin; readerId < end; ++readerId)
{
auto localReader = vtkOpenFOAMReaderPrivate::SafeDownCast(this->Readers[readerId]);
if (!localReader)
{
continue;
}
auto subOutput = vtkSmartPointer<vtkMultiBlockDataSet>::New();
const int res = localReader->RequestData(subOutput);
subOutputs[readerId] = res ? subOutput : nullptr;
}
};
if (this->GetSequentialProcessing())
{
readersProcessing(0, static_cast<vtkIdType>(this->Readers.size()));
}
else
{
vtkSMPTools::For(0, static_cast<vtkIdType>(this->Readers.size()), readersProcessing);
}
for (size_t i = 0; i < this->Readers.size(); ++i)
{
reader = vtkOpenFOAMReaderPrivate::SafeDownCast(readerObj);
reader = vtkOpenFOAMReaderPrivate::SafeDownCast(this->Readers[i]);
if (!reader)
{
continue;
}
auto subOutput = vtkSmartPointer<vtkMultiBlockDataSet>::New();
if (reader->RequestData(subOutput))
if (auto& subOutput = subOutputs[i])
{
std::string regionName(reader->GetRegionName());
if (regionName.empty())
......@@ -11333,7 +11369,6 @@ int vtkOpenFOAMReader::RequestData(vtkInformation* vtkNotUsed(request),
{
ret = 0;
}
this->Parent->CurrentReaderIndex++;
}
}
......@@ -11341,6 +11376,10 @@ int vtkOpenFOAMReader::RequestData(vtkInformation* vtkNotUsed(request),
{
this->UpdateStatus();
}
auto end = std::chrono::high_resolution_clock::now();
// std::cout << readerId << " vtkOpenFOAMReader::RequestData: Elapsed time: "
// << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << " ms"
// << std::endl;
return ret;
}
......@@ -11744,11 +11783,37 @@ void vtkOpenFOAMReader::UpdateStatus()
}
//------------------------------------------------------------------------------
void vtkOpenFOAMReader::UpdateProgress(double amount)
double vtkOpenFOAMReader::ComputeProgress()
{
this->vtkAlgorithm::UpdateProgress(
(static_cast<double>(this->Parent->CurrentReaderIndex) + amount) /
static_cast<double>(this->Parent->Readers.size()));
// get valid readers
std::vector<vtkOpenFOAMReaderPrivate*> readers;
for (auto& readerObj : this->Readers)
{
if (auto reader = vtkOpenFOAMReaderPrivate::SafeDownCast(readerObj))
{
readers.push_back(reader);
}
}
// compute the current progress
if (!readers.empty())
{
// compute the current progress
const double sum = std::accumulate(readers.begin(), readers.end(), 0.0,
[](double acc, const auto& reader) { return acc + reader->GetProgress(); });
return sum / readers.size();
}
return 1.0;
}
//------------------------------------------------------------------------------
void vtkOpenFOAMReader::UpdateProgress(vtkOpenFOAMReaderPrivate* reader, double amount)
{
// Update progress for the reader
reader->SetProgress(amount);
// lock the progress mutex
std::lock_guard<std::mutex> lock(this->ProgressMutex);
// update the progress
this->vtkAlgorithm::UpdateProgress(this->GetProgress());
}
VTK_ABI_NAMESPACE_END
......@@ -38,6 +38,8 @@
#include "vtkIOGeometryModule.h" // For export macro
#include "vtkMultiBlockDataSetAlgorithm.h"
#include <mutex> // For std::mutex
VTK_ABI_NAMESPACE_BEGIN
class vtkCollection;
class vtkCharArray;
......@@ -70,6 +72,22 @@ public:
vtkGetFilePathMacro(FileName);
///@}
///@{
/**
* Set/Get If sequential (instead of multithreaded) processing is utilized for reading each case
* files.
*
* By default, this is off because if on, it may yield better results if data are located at a
* network drive since the speed of reading data is limited by the network speed. Nonetheless, it
* may be slower if data are located at a local drive (most common case) since the speed of
* reading data is limited by the speed of the local drive, which is substantially faster than the
* network speed.
*/
vtkSetMacro(SequentialProcessing, bool);
vtkGetMacro(SequentialProcessing, bool);
vtkBooleanMacro(SequentialProcessing, bool);
///@}
/**
* Get the number of cell arrays available in the input.
*/
......@@ -349,10 +367,17 @@ public:
int MakeMetaDataAtTimeStep(bool);
/**
* Compute the progress of the reader.
*/
virtual double ComputeProgress();
protected:
// refresh flag
bool Refresh;
bool SequentialProcessing;
// for creating cell-to-point translated data
vtkTypeBool CreateCellToPoint;
......@@ -437,9 +462,6 @@ protected:
// paths to Lagrangians
vtkStringArray* LagrangianPaths;
// index of the active reader
int CurrentReaderIndex;
vtkOpenFOAMReader();
~vtkOpenFOAMReader() override;
int RequestInformation(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
......@@ -449,7 +471,7 @@ protected:
void SetTimeInformation(vtkInformationVector*, vtkDoubleArray*);
void CreateCharArrayFromString(vtkCharArray*, const char*, vtkStdString&);
void UpdateStatus();
void UpdateProgress(double);
void UpdateProgress(vtkOpenFOAMReaderPrivate* reader, double progress);
private:
vtkOpenFOAMReader* Parent;
......@@ -468,6 +490,8 @@ private:
// Print some time information (names, current time-step)
void PrintTimes(std::ostream& os, vtkIndent indent = vtkIndent(), bool full = false) const;
std::mutex ProgressMutex;
};
VTK_ABI_NAMESPACE_END
......
......@@ -65,12 +65,15 @@
#include "vtkMultiBlockDataSet.h"
#include "vtkMultiProcessController.h"
#include "vtkObjectFactory.h"
#include "vtkSMPTools.h"
#include "vtkSortDataArray.h"
#include "vtkStreamingDemandDrivenPipeline.h"
#include "vtkStringArray.h"
#include <algorithm>
#include <cctype>
#include <cstring>
#include <numeric>
//------------------------------------------------------------------------------
......@@ -94,6 +97,9 @@ vtkSmartPointer<vtkOpenFOAMReader> NewFoamReader(vtkOpenFOAMReader* parent)
reader->SetSkipZeroTime(parent->GetSkipZeroTime());
reader->SetUse64BitLabels(parent->GetUse64BitLabels());
reader->SetUse64BitFloats(parent->GetUse64BitFloats());
// This function is only used in the decomposed case, so we are basically multithread (if asked)
// over the processor dirs, but not over all /polyMesh/faces files of each processor dir.
reader->SetSequentialProcessing(true);
return reader;
}
......@@ -390,6 +396,7 @@ int vtkPOpenFOAMReader::RequestInformation(
const bool isRootProc = (this->ProcessId == 0);
const bool isParallel = (this->NumProcesses > 1);
int returnCode = 1;
auto start = std::chrono::high_resolution_clock::now();
// Set handle piece request for all cases. Even if the reconstructed case is not actually
// distributed, we need all processes to go through RequestData every time in order to go through
......@@ -491,6 +498,7 @@ int vtkPOpenFOAMReader::RequestInformation(
processorDirs = ::ScanForProcessorDirs(dir);
nProcessorDirs = static_cast<int>(processorDirs->GetNumberOfTuples());
std::cout << "nProcessorDirs: " << nProcessorDirs << std::endl;
if (nProcessorDirs)
{
......@@ -557,25 +565,46 @@ int vtkPOpenFOAMReader::RequestInformation(
// Create reader instances for processor subdirectories,
// skip first one since it has already been created above
std::vector<std::string> procDirNames;
for (int dirIndex = (this->ProcessId ? this->ProcessId : this->NumProcesses);
dirIndex < nProcessorDirs; dirIndex += this->NumProcesses)
dirIndex < nProcessorDirs; dirIndex += this->NumProcesses)
{
const std::string procDirName = ::ProcessorDirName(processorDirs, dirIndex);
vtkFoamDebug(<< "Additional processor dir: " << procDirName << "\n");
procDirNames.push_back(procDirName);
}
auto subReader = ::NewFoamReader(this);
// If getting metadata failed, simply skip the reader instance
if (subReader->MakeInformationVector(nullptr, procDirName, timeNames, timeValues) &&
subReader->MakeMetaDataAtTimeStep(true))
{
this->Superclass::Readers.emplace_back(subReader);
}
else
std::vector<vtkSmartPointer<vtkObject>> procReaders(procDirNames.size(), nullptr);
auto readersMakeInformationVector = [&](vtkIdType begin, vtkIdType end) -> void
{
for (vtkIdType i = begin; i < end; ++i)
{
vtkWarningMacro(<< "Removing reader for processor subdirectory " << procDirName);
auto subReader = ::NewFoamReader(this);
// std::cout << procDirNames[i] << std::endl;
// If getting metadata failed, simply skip the reader instance
if (subReader->MakeInformationVector(nullptr, procDirNames[i], timeNames, timeValues) &&
subReader->MakeMetaDataAtTimeStep(true))
{
procReaders[i] = subReader;
}
else
{
vtkWarningMacro(<< "Removing reader for processor subdirectory " << procDirNames[i]);
}
}
};
if (this->GetSequentialProcessing())
{
readersMakeInformationVector(0, static_cast<vtkIdType>(procReaders.size()));
}
else
{
vtkSMPTools::For(0, static_cast<vtkIdType>(procReaders.size()), readersMakeInformationVector);
}
// move valid readers to the main list
std::copy_if(std::make_move_iterator(procReaders.begin()),
std::make_move_iterator(procReaders.end()), std::back_inserter(this->Superclass::Readers),
[](const auto& reader) { return reader != nullptr; });
// Cleanup
if (!isRootProc || (nProcessorDirs == 0))
......@@ -593,6 +622,10 @@ int vtkPOpenFOAMReader::RequestInformation(
this->GatherMetaData();
this->Superclass::Refresh = false;
}
auto end = std::chrono::high_resolution_clock::now();
std::cout << "vtkPOpenFOAMReader::RequestInformation: Elapsed time: "
<< std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << " ms"
<< std::endl;
return returnCode;
}
......@@ -605,6 +638,7 @@ int vtkPOpenFOAMReader::RequestData(
const bool isParallel = (this->NumProcesses > 1);
int returnCode = 1;
auto start = std::chrono::high_resolution_clock::now();
vtkSmartPointer<vtkMultiProcessController> splitController;
vtkInformation* outInfo = outputVector->GetInformationObject(0);
auto* output = vtkMultiBlockDataSet::SafeDownCast(outInfo->Get(vtkDataObject::DATA_OBJECT()));
......@@ -661,25 +695,46 @@ int vtkPOpenFOAMReader::RequestData(
vtkAppendCompositeDataLeaves* append = vtkAppendCompositeDataLeaves::New();
// append->AppendFieldDataOn();
this->Superclass::CurrentReaderIndex = 0;
for (auto& readerObj : this->Superclass::Readers)
std::vector<int> updatedReaders(this->Superclass::Readers.size(), 0);
auto readersProcessing = [&](vtkIdType begin, vtkIdType end) -> void
{
vtkOpenFOAMReader* reader = vtkOpenFOAMReader::SafeDownCast(readerObj);
if (!reader)
for (vtkIdType i = begin; i < end; ++i)
{
continue;
}
// even if the child readers themselves are not modified, mark
// them as modified if "this" has been modified, since they
// refer to the property of "this"
if ((nTimes && reader->SetTimeValue(requestedTimeValue)) ||
(this->MTimeOld != this->GetMTime()))
{
reader->Modified();
vtkOpenFOAMReader* reader = vtkOpenFOAMReader::SafeDownCast(this->Superclass::Readers[i]);
if (!reader)
{
continue;
}
// even if the child readers themselves are not modified, mark
// them as modified if "this" has been modified, since they
// refer to the property of "this"
if ((nTimes && reader->SetTimeValue(requestedTimeValue)) ||
(this->MTimeOld != this->GetMTime()))
{
reader->Modified();
}
if (reader->MakeMetaDataAtTimeStep(false))
{
reader->Update();
updatedReaders[i] = 1;
}
}
if (reader->MakeMetaDataAtTimeStep(false))
};
if (this->GetSequentialProcessing())
{
readersProcessing(0, static_cast<vtkIdType>(this->Superclass::Readers.size()));
}
else
{
vtkSMPTools::For(
0, static_cast<vtkIdType>(this->Superclass::Readers.size()), readersProcessing);
}
for (size_t i = 0; i < this->Superclass::Readers.size(); ++i)
{
if (updatedReaders[i])
{
append->AddInputConnection(reader->GetOutputPort());
append->AddInputConnection(
vtkOpenFOAMReader::SafeDownCast(this->Superclass::Readers[i])->GetOutputPort());
}
}
......@@ -729,6 +784,10 @@ int vtkPOpenFOAMReader::RequestData(
this->Superclass::UpdateStatus();
this->MTimeOld = this->GetMTime();
auto end = std::chrono::high_resolution_clock::now();
std::cout << "vtkPOpenFOAMReader::RequestData: Elapsed time: "
<< std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << " ms"
<< std::endl;
return returnCode;
}
......@@ -952,4 +1011,26 @@ void vtkPOpenFOAMReader::AllGather(vtkDataArraySelection* sa)
}
}
}
//------------------------------------------------------------------------------
double vtkPOpenFOAMReader::ComputeProgress()
{
// get valid readers
std::vector<vtkOpenFOAMReader*> readers;
for (auto& readerObj : this->Superclass::Readers)
{
if (auto reader = vtkOpenFOAMReader::SafeDownCast(readerObj))
{
readers.push_back(reader);
}
}
// compute the current progress
if (!readers.empty())
{
const double sum = std::accumulate(readers.begin(), readers.end(), 0.0,
[](double acc, const auto& reader) { return acc + reader->ComputeProgress(); });
return sum / readers.size();
}
return 1.0;
}
VTK_ABI_NAMESPACE_END
......@@ -54,6 +54,12 @@ public:
vtkGetObjectMacro(Controller, vtkMultiProcessController);
///@}
/**
* Compute the progress of the reader.
*/
double ComputeProgress() override;
protected:
vtkPOpenFOAMReader();
~vtkPOpenFOAMReader() override;
......