pygments.rb-jruby 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/CHANGELOG.md +71 -0
  4. data/Gemfile +2 -0
  5. data/LICENSE +17 -0
  6. data/README.md +118 -0
  7. data/Rakefile +66 -0
  8. data/bench.rb +22 -0
  9. data/cache-lexers.rb +8 -0
  10. data/lexers +0 -0
  11. data/lib/pygments.rb +8 -0
  12. data/lib/pygments/lexer.rb +148 -0
  13. data/lib/pygments/mentos.py +351 -0
  14. data/lib/pygments/popen.rb +404 -0
  15. data/lib/pygments/version.rb +3 -0
  16. data/pygments.rb.gemspec +24 -0
  17. data/test/test_data.c +2581 -0
  18. data/test/test_data.py +514 -0
  19. data/test/test_data_generated +2582 -0
  20. data/test/test_pygments.rb +287 -0
  21. data/vendor/custom_lexers/github.py +565 -0
  22. data/vendor/pygments-main/AUTHORS +153 -0
  23. data/vendor/pygments-main/CHANGES +889 -0
  24. data/vendor/pygments-main/LICENSE +25 -0
  25. data/vendor/pygments-main/MANIFEST.in +6 -0
  26. data/vendor/pygments-main/Makefile +59 -0
  27. data/vendor/pygments-main/REVISION +1 -0
  28. data/vendor/pygments-main/TODO +15 -0
  29. data/vendor/pygments-main/docs/generate.py +472 -0
  30. data/vendor/pygments-main/docs/pygmentize.1 +94 -0
  31. data/vendor/pygments-main/docs/src/api.txt +270 -0
  32. data/vendor/pygments-main/docs/src/authors.txt +5 -0
  33. data/vendor/pygments-main/docs/src/changelog.txt +5 -0
  34. data/vendor/pygments-main/docs/src/cmdline.txt +147 -0
  35. data/vendor/pygments-main/docs/src/filterdevelopment.txt +70 -0
  36. data/vendor/pygments-main/docs/src/filters.txt +42 -0
  37. data/vendor/pygments-main/docs/src/formatterdevelopment.txt +169 -0
  38. data/vendor/pygments-main/docs/src/formatters.txt +48 -0
  39. data/vendor/pygments-main/docs/src/index.txt +69 -0
  40. data/vendor/pygments-main/docs/src/installation.txt +71 -0
  41. data/vendor/pygments-main/docs/src/integrate.txt +48 -0
  42. data/vendor/pygments-main/docs/src/java.txt +70 -0
  43. data/vendor/pygments-main/docs/src/lexerdevelopment.txt +603 -0
  44. data/vendor/pygments-main/docs/src/lexers.txt +67 -0
  45. data/vendor/pygments-main/docs/src/moinmoin.txt +39 -0
  46. data/vendor/pygments-main/docs/src/plugins.txt +93 -0
  47. data/vendor/pygments-main/docs/src/quickstart.txt +202 -0
  48. data/vendor/pygments-main/docs/src/rstdirective.txt +22 -0
  49. data/vendor/pygments-main/docs/src/styles.txt +143 -0
  50. data/vendor/pygments-main/docs/src/tokens.txt +349 -0
  51. data/vendor/pygments-main/docs/src/unicode.txt +49 -0
  52. data/vendor/pygments-main/external/autopygmentize +64 -0
  53. data/vendor/pygments-main/external/lasso-builtins-generator-9.lasso +144 -0
  54. data/vendor/pygments-main/external/markdown-processor.py +67 -0
  55. data/vendor/pygments-main/external/moin-parser.py +112 -0
  56. data/vendor/pygments-main/external/pygments.bashcomp +38 -0
  57. data/vendor/pygments-main/external/rst-directive-old.py +77 -0
  58. data/vendor/pygments-main/external/rst-directive.py +83 -0
  59. data/vendor/pygments-main/ez_setup.py +276 -0
  60. data/vendor/pygments-main/pygmentize +7 -0
  61. data/vendor/pygments-main/pygments/__init__.py +91 -0
  62. data/vendor/pygments-main/pygments/cmdline.py +441 -0
  63. data/vendor/pygments-main/pygments/console.py +74 -0
  64. data/vendor/pygments-main/pygments/filter.py +74 -0
  65. data/vendor/pygments-main/pygments/filters/__init__.py +356 -0
  66. data/vendor/pygments-main/pygments/formatter.py +95 -0
  67. data/vendor/pygments-main/pygments/formatters/__init__.py +68 -0
  68. data/vendor/pygments-main/pygments/formatters/_mapping.py +92 -0
  69. data/vendor/pygments-main/pygments/formatters/bbcode.py +109 -0
  70. data/vendor/pygments-main/pygments/formatters/html.py +821 -0
  71. data/vendor/pygments-main/pygments/formatters/img.py +553 -0
  72. data/vendor/pygments-main/pygments/formatters/latex.py +378 -0
  73. data/vendor/pygments-main/pygments/formatters/other.py +115 -0
  74. data/vendor/pygments-main/pygments/formatters/rtf.py +136 -0
  75. data/vendor/pygments-main/pygments/formatters/svg.py +154 -0
  76. data/vendor/pygments-main/pygments/formatters/terminal.py +112 -0
  77. data/vendor/pygments-main/pygments/formatters/terminal256.py +222 -0
  78. data/vendor/pygments-main/pygments/lexer.py +765 -0
  79. data/vendor/pygments-main/pygments/lexers/__init__.py +240 -0
  80. data/vendor/pygments-main/pygments/lexers/_asybuiltins.py +1645 -0
  81. data/vendor/pygments-main/pygments/lexers/_clbuiltins.py +232 -0
  82. data/vendor/pygments-main/pygments/lexers/_lassobuiltins.py +5172 -0
  83. data/vendor/pygments-main/pygments/lexers/_luabuiltins.py +249 -0
  84. data/vendor/pygments-main/pygments/lexers/_mapping.py +354 -0
  85. data/vendor/pygments-main/pygments/lexers/_openedgebuiltins.py +562 -0
  86. data/vendor/pygments-main/pygments/lexers/_phpbuiltins.py +3787 -0
  87. data/vendor/pygments-main/pygments/lexers/_postgres_builtins.py +233 -0
  88. data/vendor/pygments-main/pygments/lexers/_robotframeworklexer.py +557 -0
  89. data/vendor/pygments-main/pygments/lexers/_scilab_builtins.py +40 -0
  90. data/vendor/pygments-main/pygments/lexers/_sourcemodbuiltins.py +1072 -0
  91. data/vendor/pygments-main/pygments/lexers/_stan_builtins.py +360 -0
  92. data/vendor/pygments-main/pygments/lexers/_vimbuiltins.py +13 -0
  93. data/vendor/pygments-main/pygments/lexers/agile.py +2290 -0
  94. data/vendor/pygments-main/pygments/lexers/asm.py +398 -0
  95. data/vendor/pygments-main/pygments/lexers/compiled.py +3723 -0
  96. data/vendor/pygments-main/pygments/lexers/dalvik.py +104 -0
  97. data/vendor/pygments-main/pygments/lexers/dotnet.py +671 -0
  98. data/vendor/pygments-main/pygments/lexers/foxpro.py +428 -0
  99. data/vendor/pygments-main/pygments/lexers/functional.py +2731 -0
  100. data/vendor/pygments-main/pygments/lexers/github.py +565 -0
  101. data/vendor/pygments-main/pygments/lexers/hdl.py +356 -0
  102. data/vendor/pygments-main/pygments/lexers/jvm.py +1112 -0
  103. data/vendor/pygments-main/pygments/lexers/math.py +1918 -0
  104. data/vendor/pygments-main/pygments/lexers/other.py +3778 -0
  105. data/vendor/pygments-main/pygments/lexers/parsers.py +778 -0
  106. data/vendor/pygments-main/pygments/lexers/shell.py +424 -0
  107. data/vendor/pygments-main/pygments/lexers/special.py +100 -0
  108. data/vendor/pygments-main/pygments/lexers/sql.py +559 -0
  109. data/vendor/pygments-main/pygments/lexers/templates.py +1742 -0
  110. data/vendor/pygments-main/pygments/lexers/text.py +1893 -0
  111. data/vendor/pygments-main/pygments/lexers/web.py +4045 -0
  112. data/vendor/pygments-main/pygments/modeline.py +40 -0
  113. data/vendor/pygments-main/pygments/plugin.py +74 -0
  114. data/vendor/pygments-main/pygments/scanner.py +104 -0
  115. data/vendor/pygments-main/pygments/style.py +117 -0
  116. data/vendor/pygments-main/pygments/styles/__init__.py +70 -0
  117. data/vendor/pygments-main/pygments/styles/autumn.py +65 -0
  118. data/vendor/pygments-main/pygments/styles/borland.py +51 -0
  119. data/vendor/pygments-main/pygments/styles/bw.py +49 -0
  120. data/vendor/pygments-main/pygments/styles/colorful.py +81 -0
  121. data/vendor/pygments-main/pygments/styles/default.py +73 -0
  122. data/vendor/pygments-main/pygments/styles/emacs.py +72 -0
  123. data/vendor/pygments-main/pygments/styles/friendly.py +72 -0
  124. data/vendor/pygments-main/pygments/styles/fruity.py +42 -0
  125. data/vendor/pygments-main/pygments/styles/manni.py +75 -0
  126. data/vendor/pygments-main/pygments/styles/monokai.py +106 -0
  127. data/vendor/pygments-main/pygments/styles/murphy.py +80 -0
  128. data/vendor/pygments-main/pygments/styles/native.py +65 -0
  129. data/vendor/pygments-main/pygments/styles/pastie.py +75 -0
  130. data/vendor/pygments-main/pygments/styles/perldoc.py +69 -0
  131. data/vendor/pygments-main/pygments/styles/rrt.py +33 -0
  132. data/vendor/pygments-main/pygments/styles/tango.py +141 -0
  133. data/vendor/pygments-main/pygments/styles/trac.py +63 -0
  134. data/vendor/pygments-main/pygments/styles/vim.py +63 -0
  135. data/vendor/pygments-main/pygments/styles/vs.py +38 -0
  136. data/vendor/pygments-main/pygments/token.py +195 -0
  137. data/vendor/pygments-main/pygments/unistring.py +140 -0
  138. data/vendor/pygments-main/pygments/util.py +277 -0
  139. data/vendor/pygments-main/scripts/check_sources.py +242 -0
  140. data/vendor/pygments-main/scripts/detect_missing_analyse_text.py +32 -0
  141. data/vendor/pygments-main/scripts/epydoc.css +280 -0
  142. data/vendor/pygments-main/scripts/find_codetags.py +205 -0
  143. data/vendor/pygments-main/scripts/find_error.py +170 -0
  144. data/vendor/pygments-main/scripts/get_vimkw.py +43 -0
  145. data/vendor/pygments-main/scripts/pylintrc +301 -0
  146. data/vendor/pygments-main/scripts/reindent.py +291 -0
  147. data/vendor/pygments-main/scripts/vim2pygments.py +933 -0
  148. data/vendor/pygments-main/setup.cfg +7 -0
  149. data/vendor/pygments-main/setup.py +90 -0
  150. data/vendor/pygments-main/tests/dtds/HTML4-f.dtd +37 -0
  151. data/vendor/pygments-main/tests/dtds/HTML4-s.dtd +869 -0
  152. data/vendor/pygments-main/tests/dtds/HTML4.dcl +88 -0
  153. data/vendor/pygments-main/tests/dtds/HTML4.dtd +1092 -0
  154. data/vendor/pygments-main/tests/dtds/HTML4.soc +9 -0
  155. data/vendor/pygments-main/tests/dtds/HTMLlat1.ent +195 -0
  156. data/vendor/pygments-main/tests/dtds/HTMLspec.ent +77 -0
  157. data/vendor/pygments-main/tests/dtds/HTMLsym.ent +241 -0
  158. data/vendor/pygments-main/tests/examplefiles/ANTLRv3.g +608 -0
  159. data/vendor/pygments-main/tests/examplefiles/AcidStateAdvanced.hs +209 -0
  160. data/vendor/pygments-main/tests/examplefiles/AlternatingGroup.mu +102 -0
  161. data/vendor/pygments-main/tests/examplefiles/BOM.js +1 -0
  162. data/vendor/pygments-main/tests/examplefiles/CPDictionary.j +611 -0
  163. data/vendor/pygments-main/tests/examplefiles/Config.in.cache +1973 -0
  164. data/vendor/pygments-main/tests/examplefiles/Constants.mo +158 -0
  165. data/vendor/pygments-main/tests/examplefiles/DancingSudoku.lhs +411 -0
  166. data/vendor/pygments-main/tests/examplefiles/Deflate.fs +578 -0
  167. data/vendor/pygments-main/tests/examplefiles/Errors.scala +18 -0
  168. data/vendor/pygments-main/tests/examplefiles/File.hy +174 -0
  169. data/vendor/pygments-main/tests/examplefiles/Get-CommandDefinitionHtml.ps1 +66 -0
  170. data/vendor/pygments-main/tests/examplefiles/IPDispatchC.nc +104 -0
  171. data/vendor/pygments-main/tests/examplefiles/IPDispatchP.nc +671 -0
  172. data/vendor/pygments-main/tests/examplefiles/Intro.java +1660 -0
  173. data/vendor/pygments-main/tests/examplefiles/Makefile +1131 -0
  174. data/vendor/pygments-main/tests/examplefiles/Object.st +4394 -0
  175. data/vendor/pygments-main/tests/examplefiles/OrderedMap.hx +584 -0
  176. data/vendor/pygments-main/tests/examplefiles/RoleQ.pm6 +23 -0
  177. data/vendor/pygments-main/tests/examplefiles/SmallCheck.hs +378 -0
  178. data/vendor/pygments-main/tests/examplefiles/Sorting.mod +470 -0
  179. data/vendor/pygments-main/tests/examplefiles/Sudoku.lhs +382 -0
  180. data/vendor/pygments-main/tests/examplefiles/addressbook.proto +30 -0
  181. data/vendor/pygments-main/tests/examplefiles/antlr_throws +1 -0
  182. data/vendor/pygments-main/tests/examplefiles/apache2.conf +393 -0
  183. data/vendor/pygments-main/tests/examplefiles/as3_test.as +143 -0
  184. data/vendor/pygments-main/tests/examplefiles/as3_test2.as +46 -0
  185. data/vendor/pygments-main/tests/examplefiles/as3_test3.as +3 -0
  186. data/vendor/pygments-main/tests/examplefiles/aspx-cs_example +27 -0
  187. data/vendor/pygments-main/tests/examplefiles/autoit_submit.au3 +25 -0
  188. data/vendor/pygments-main/tests/examplefiles/badcase.java +2 -0
  189. data/vendor/pygments-main/tests/examplefiles/batchfile.bat +49 -0
  190. data/vendor/pygments-main/tests/examplefiles/bigtest.nsi +308 -0
  191. data/vendor/pygments-main/tests/examplefiles/boot-9.scm +1557 -0
  192. data/vendor/pygments-main/tests/examplefiles/ca65_example +284 -0
  193. data/vendor/pygments-main/tests/examplefiles/cbmbas_example +9 -0
  194. data/vendor/pygments-main/tests/examplefiles/cells.ps +515 -0
  195. data/vendor/pygments-main/tests/examplefiles/ceval.c +2604 -0
  196. data/vendor/pygments-main/tests/examplefiles/cheetah_example.html +13 -0
  197. data/vendor/pygments-main/tests/examplefiles/classes.dylan +125 -0
  198. data/vendor/pygments-main/tests/examplefiles/condensed_ruby.rb +10 -0
  199. data/vendor/pygments-main/tests/examplefiles/coq_RelationClasses +447 -0
  200. data/vendor/pygments-main/tests/examplefiles/database.pytb +20 -0
  201. data/vendor/pygments-main/tests/examplefiles/de.MoinMoin.po +2461 -0
  202. data/vendor/pygments-main/tests/examplefiles/demo.ahk +181 -0
  203. data/vendor/pygments-main/tests/examplefiles/demo.cfm +38 -0
  204. data/vendor/pygments-main/tests/examplefiles/django_sample.html+django +68 -0
  205. data/vendor/pygments-main/tests/examplefiles/dwarf.cw +17 -0
  206. data/vendor/pygments-main/tests/examplefiles/erl_session +10 -0
  207. data/vendor/pygments-main/tests/examplefiles/escape_semicolon.clj +1 -0
  208. data/vendor/pygments-main/tests/examplefiles/evil_regex.js +48 -0
  209. data/vendor/pygments-main/tests/examplefiles/example.Rd +78 -0
  210. data/vendor/pygments-main/tests/examplefiles/example.bug +54 -0
  211. data/vendor/pygments-main/tests/examplefiles/example.c +2080 -0
  212. data/vendor/pygments-main/tests/examplefiles/example.ceylon +52 -0
  213. data/vendor/pygments-main/tests/examplefiles/example.clay +33 -0
  214. data/vendor/pygments-main/tests/examplefiles/example.cls +15 -0
  215. data/vendor/pygments-main/tests/examplefiles/example.cob +3556 -0
  216. data/vendor/pygments-main/tests/examplefiles/example.cpp +2363 -0
  217. data/vendor/pygments-main/tests/examplefiles/example.gs +106 -0
  218. data/vendor/pygments-main/tests/examplefiles/example.gst +7 -0
  219. data/vendor/pygments-main/tests/examplefiles/example.hx +142 -0
  220. data/vendor/pygments-main/tests/examplefiles/example.jag +48 -0
  221. data/vendor/pygments-main/tests/examplefiles/example.kt +47 -0
  222. data/vendor/pygments-main/tests/examplefiles/example.lagda +19 -0
  223. data/vendor/pygments-main/tests/examplefiles/example.lua +250 -0
  224. data/vendor/pygments-main/tests/examplefiles/example.monkey +152 -0
  225. data/vendor/pygments-main/tests/examplefiles/example.moo +26 -0
  226. data/vendor/pygments-main/tests/examplefiles/example.moon +629 -0
  227. data/vendor/pygments-main/tests/examplefiles/example.msc +43 -0
  228. data/vendor/pygments-main/tests/examplefiles/example.nim +1010 -0
  229. data/vendor/pygments-main/tests/examplefiles/example.ns2 +69 -0
  230. data/vendor/pygments-main/tests/examplefiles/example.p +34 -0
  231. data/vendor/pygments-main/tests/examplefiles/example.pas +2708 -0
  232. data/vendor/pygments-main/tests/examplefiles/example.prg +161 -0
  233. data/vendor/pygments-main/tests/examplefiles/example.rb +1852 -0
  234. data/vendor/pygments-main/tests/examplefiles/example.reg +19 -0
  235. data/vendor/pygments-main/tests/examplefiles/example.rexx +50 -0
  236. data/vendor/pygments-main/tests/examplefiles/example.rhtml +561 -0
  237. data/vendor/pygments-main/tests/examplefiles/example.rkt +95 -0
  238. data/vendor/pygments-main/tests/examplefiles/example.rpf +4 -0
  239. data/vendor/pygments-main/tests/examplefiles/example.sh-session +19 -0
  240. data/vendor/pygments-main/tests/examplefiles/example.shell-session +45 -0
  241. data/vendor/pygments-main/tests/examplefiles/example.sml +156 -0
  242. data/vendor/pygments-main/tests/examplefiles/example.snobol +15 -0
  243. data/vendor/pygments-main/tests/examplefiles/example.stan +108 -0
  244. data/vendor/pygments-main/tests/examplefiles/example.tea +34 -0
  245. data/vendor/pygments-main/tests/examplefiles/example.ts +28 -0
  246. data/vendor/pygments-main/tests/examplefiles/example.u +548 -0
  247. data/vendor/pygments-main/tests/examplefiles/example.weechatlog +9 -0
  248. data/vendor/pygments-main/tests/examplefiles/example.xhtml +376 -0
  249. data/vendor/pygments-main/tests/examplefiles/example.xtend +34 -0
  250. data/vendor/pygments-main/tests/examplefiles/example.yaml +302 -0
  251. data/vendor/pygments-main/tests/examplefiles/example2.aspx +29 -0
  252. data/vendor/pygments-main/tests/examplefiles/example2.msc +79 -0
  253. data/vendor/pygments-main/tests/examplefiles/example_elixir.ex +363 -0
  254. data/vendor/pygments-main/tests/examplefiles/example_file.fy +128 -0
  255. data/vendor/pygments-main/tests/examplefiles/firefox.mak +586 -0
  256. data/vendor/pygments-main/tests/examplefiles/flipflop.sv +19 -0
  257. data/vendor/pygments-main/tests/examplefiles/foo.sce +6 -0
  258. data/vendor/pygments-main/tests/examplefiles/format.ml +1213 -0
  259. data/vendor/pygments-main/tests/examplefiles/fucked_up.rb +77 -0
  260. data/vendor/pygments-main/tests/examplefiles/function.mu +1 -0
  261. data/vendor/pygments-main/tests/examplefiles/functional.rst +1472 -0
  262. data/vendor/pygments-main/tests/examplefiles/garcia-wachs.kk +133 -0
  263. data/vendor/pygments-main/tests/examplefiles/genclass.clj +510 -0
  264. data/vendor/pygments-main/tests/examplefiles/genshi_example.xml+genshi +193 -0
  265. data/vendor/pygments-main/tests/examplefiles/genshitext_example.genshitext +33 -0
  266. data/vendor/pygments-main/tests/examplefiles/glsl.frag +7 -0
  267. data/vendor/pygments-main/tests/examplefiles/glsl.vert +13 -0
  268. data/vendor/pygments-main/tests/examplefiles/grammar-test.p6 +22 -0
  269. data/vendor/pygments-main/tests/examplefiles/hello.smali +40 -0
  270. data/vendor/pygments-main/tests/examplefiles/hello.sp +9 -0
  271. data/vendor/pygments-main/tests/examplefiles/html+php_faulty.php +1 -0
  272. data/vendor/pygments-main/tests/examplefiles/http_request_example +15 -0
  273. data/vendor/pygments-main/tests/examplefiles/http_response_example +29 -0
  274. data/vendor/pygments-main/tests/examplefiles/import.hs +4 -0
  275. data/vendor/pygments-main/tests/examplefiles/inet_pton6.dg +71 -0
  276. data/vendor/pygments-main/tests/examplefiles/intro.ik +24 -0
  277. data/vendor/pygments-main/tests/examplefiles/ints.php +10 -0
  278. data/vendor/pygments-main/tests/examplefiles/intsyn.fun +675 -0
  279. data/vendor/pygments-main/tests/examplefiles/intsyn.sig +286 -0
  280. data/vendor/pygments-main/tests/examplefiles/irb_heredoc +8 -0
  281. data/vendor/pygments-main/tests/examplefiles/irc.lsp +214 -0
  282. data/vendor/pygments-main/tests/examplefiles/java.properties +16 -0
  283. data/vendor/pygments-main/tests/examplefiles/jbst_example1.jbst +28 -0
  284. data/vendor/pygments-main/tests/examplefiles/jbst_example2.jbst +45 -0
  285. data/vendor/pygments-main/tests/examplefiles/jinjadesignerdoc.rst +713 -0
  286. data/vendor/pygments-main/tests/examplefiles/json.lasso +301 -0
  287. data/vendor/pygments-main/tests/examplefiles/json.lasso9 +213 -0
  288. data/vendor/pygments-main/tests/examplefiles/lighttpd_config.conf +13 -0
  289. data/vendor/pygments-main/tests/examplefiles/linecontinuation.py +47 -0
  290. data/vendor/pygments-main/tests/examplefiles/livescript-demo.ls +41 -0
  291. data/vendor/pygments-main/tests/examplefiles/logos_example.xm +28 -0
  292. data/vendor/pygments-main/tests/examplefiles/ltmain.sh +2849 -0
  293. data/vendor/pygments-main/tests/examplefiles/main.cmake +42 -0
  294. data/vendor/pygments-main/tests/examplefiles/markdown.lsp +679 -0
  295. data/vendor/pygments-main/tests/examplefiles/matlab_noreturn +3 -0
  296. data/vendor/pygments-main/tests/examplefiles/matlab_sample +30 -0
  297. data/vendor/pygments-main/tests/examplefiles/matlabsession_sample.txt +37 -0
  298. data/vendor/pygments-main/tests/examplefiles/metagrammar.treetop +455 -0
  299. data/vendor/pygments-main/tests/examplefiles/mg_sample.pro +73 -0
  300. data/vendor/pygments-main/tests/examplefiles/minehunt.qml +112 -0
  301. data/vendor/pygments-main/tests/examplefiles/minimal.ns2 +4 -0
  302. data/vendor/pygments-main/tests/examplefiles/moin_SyntaxReference.txt +340 -0
  303. data/vendor/pygments-main/tests/examplefiles/multiline_regexes.rb +38 -0
  304. data/vendor/pygments-main/tests/examplefiles/nanomsg.intr +95 -0
  305. data/vendor/pygments-main/tests/examplefiles/nasm_aoutso.asm +96 -0
  306. data/vendor/pygments-main/tests/examplefiles/nasm_objexe.asm +30 -0
  307. data/vendor/pygments-main/tests/examplefiles/nemerle_sample.n +87 -0
  308. data/vendor/pygments-main/tests/examplefiles/nginx_nginx.conf +118 -0
  309. data/vendor/pygments-main/tests/examplefiles/numbers.c +12 -0
  310. data/vendor/pygments-main/tests/examplefiles/objc_example.m +32 -0
  311. data/vendor/pygments-main/tests/examplefiles/objc_example2.m +24 -0
  312. data/vendor/pygments-main/tests/examplefiles/perl_misc +62 -0
  313. data/vendor/pygments-main/tests/examplefiles/perl_perl5db +998 -0
  314. data/vendor/pygments-main/tests/examplefiles/perl_regex-delims +120 -0
  315. data/vendor/pygments-main/tests/examplefiles/perlfunc.1 +856 -0
  316. data/vendor/pygments-main/tests/examplefiles/phpMyAdmin.spec +163 -0
  317. data/vendor/pygments-main/tests/examplefiles/phpcomplete.vim +567 -0
  318. data/vendor/pygments-main/tests/examplefiles/pleac.in.rb +1223 -0
  319. data/vendor/pygments-main/tests/examplefiles/postgresql_test.txt +47 -0
  320. data/vendor/pygments-main/tests/examplefiles/pppoe.applescript +10 -0
  321. data/vendor/pygments-main/tests/examplefiles/psql_session.txt +122 -0
  322. data/vendor/pygments-main/tests/examplefiles/py3_test.txt +2 -0
  323. data/vendor/pygments-main/tests/examplefiles/py3tb_test.py3tb +4 -0
  324. data/vendor/pygments-main/tests/examplefiles/pycon_test.pycon +14 -0
  325. data/vendor/pygments-main/tests/examplefiles/pytb_test2.pytb +2 -0
  326. data/vendor/pygments-main/tests/examplefiles/pytb_test3.pytb +4 -0
  327. data/vendor/pygments-main/tests/examplefiles/python25-bsd.mak +234 -0
  328. data/vendor/pygments-main/tests/examplefiles/qsort.prolog +13 -0
  329. data/vendor/pygments-main/tests/examplefiles/r-console-transcript.Rout +38 -0
  330. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_rlscan +280 -0
  331. data/vendor/pygments-main/tests/examplefiles/ragel-cpp_snippet +2 -0
  332. data/vendor/pygments-main/tests/examplefiles/regex.js +22 -0
  333. data/vendor/pygments-main/tests/examplefiles/reversi.lsp +427 -0
  334. data/vendor/pygments-main/tests/examplefiles/robotframework.txt +39 -0
  335. data/vendor/pygments-main/tests/examplefiles/ruby_func_def.rb +11 -0
  336. data/vendor/pygments-main/tests/examplefiles/rust_example.rs +233 -0
  337. data/vendor/pygments-main/tests/examplefiles/scilab.sci +30 -0
  338. data/vendor/pygments-main/tests/examplefiles/session.dylan-console +9 -0
  339. data/vendor/pygments-main/tests/examplefiles/sibling.prolog +19 -0
  340. data/vendor/pygments-main/tests/examplefiles/simple.md +747 -0
  341. data/vendor/pygments-main/tests/examplefiles/smarty_example.html +209 -0
  342. data/vendor/pygments-main/tests/examplefiles/source.lgt +343 -0
  343. data/vendor/pygments-main/tests/examplefiles/sources.list +62 -0
  344. data/vendor/pygments-main/tests/examplefiles/sphere.pov +18 -0
  345. data/vendor/pygments-main/tests/examplefiles/sqlite3.sqlite3-console +27 -0
  346. data/vendor/pygments-main/tests/examplefiles/squid.conf +30 -0
  347. data/vendor/pygments-main/tests/examplefiles/string.jl +1031 -0
  348. data/vendor/pygments-main/tests/examplefiles/string_delimiters.d +21 -0
  349. data/vendor/pygments-main/tests/examplefiles/stripheredoc.sh +3 -0
  350. data/vendor/pygments-main/tests/examplefiles/swig_java.swg +1329 -0
  351. data/vendor/pygments-main/tests/examplefiles/swig_std_vector.i +225 -0
  352. data/vendor/pygments-main/tests/examplefiles/test.R +153 -0
  353. data/vendor/pygments-main/tests/examplefiles/test.adb +211 -0
  354. data/vendor/pygments-main/tests/examplefiles/test.agda +102 -0
  355. data/vendor/pygments-main/tests/examplefiles/test.asy +131 -0
  356. data/vendor/pygments-main/tests/examplefiles/test.awk +121 -0
  357. data/vendor/pygments-main/tests/examplefiles/test.bas +29 -0
  358. data/vendor/pygments-main/tests/examplefiles/test.bb +95 -0
  359. data/vendor/pygments-main/tests/examplefiles/test.bmx +145 -0
  360. data/vendor/pygments-main/tests/examplefiles/test.boo +39 -0
  361. data/vendor/pygments-main/tests/examplefiles/test.bro +250 -0
  362. data/vendor/pygments-main/tests/examplefiles/test.cs +374 -0
  363. data/vendor/pygments-main/tests/examplefiles/test.css +54 -0
  364. data/vendor/pygments-main/tests/examplefiles/test.cu +36 -0
  365. data/vendor/pygments-main/tests/examplefiles/test.d +135 -0
  366. data/vendor/pygments-main/tests/examplefiles/test.dart +23 -0
  367. data/vendor/pygments-main/tests/examplefiles/test.dtd +89 -0
  368. data/vendor/pygments-main/tests/examplefiles/test.ebnf +31 -0
  369. data/vendor/pygments-main/tests/examplefiles/test.ec +605 -0
  370. data/vendor/pygments-main/tests/examplefiles/test.ecl +58 -0
  371. data/vendor/pygments-main/tests/examplefiles/test.eh +315 -0
  372. data/vendor/pygments-main/tests/examplefiles/test.erl +169 -0
  373. data/vendor/pygments-main/tests/examplefiles/test.evoque +33 -0
  374. data/vendor/pygments-main/tests/examplefiles/test.fan +818 -0
  375. data/vendor/pygments-main/tests/examplefiles/test.flx +57 -0
  376. data/vendor/pygments-main/tests/examplefiles/test.gdc +13 -0
  377. data/vendor/pygments-main/tests/examplefiles/test.groovy +97 -0
  378. data/vendor/pygments-main/tests/examplefiles/test.html +339 -0
  379. data/vendor/pygments-main/tests/examplefiles/test.ini +10 -0
  380. data/vendor/pygments-main/tests/examplefiles/test.java +653 -0
  381. data/vendor/pygments-main/tests/examplefiles/test.jsp +24 -0
  382. data/vendor/pygments-main/tests/examplefiles/test.maql +45 -0
  383. data/vendor/pygments-main/tests/examplefiles/test.mod +374 -0
  384. data/vendor/pygments-main/tests/examplefiles/test.moo +51 -0
  385. data/vendor/pygments-main/tests/examplefiles/test.myt +166 -0
  386. data/vendor/pygments-main/tests/examplefiles/test.nim +93 -0
  387. data/vendor/pygments-main/tests/examplefiles/test.opa +10 -0
  388. data/vendor/pygments-main/tests/examplefiles/test.p6 +252 -0
  389. data/vendor/pygments-main/tests/examplefiles/test.pas +743 -0
  390. data/vendor/pygments-main/tests/examplefiles/test.php +505 -0
  391. data/vendor/pygments-main/tests/examplefiles/test.plot +333 -0
  392. data/vendor/pygments-main/tests/examplefiles/test.ps1 +108 -0
  393. data/vendor/pygments-main/tests/examplefiles/test.pypylog +1839 -0
  394. data/vendor/pygments-main/tests/examplefiles/test.r3 +94 -0
  395. data/vendor/pygments-main/tests/examplefiles/test.rb +177 -0
  396. data/vendor/pygments-main/tests/examplefiles/test.rhtml +43 -0
  397. data/vendor/pygments-main/tests/examplefiles/test.scaml +8 -0
  398. data/vendor/pygments-main/tests/examplefiles/test.ssp +12 -0
  399. data/vendor/pygments-main/tests/examplefiles/test.tcsh +830 -0
  400. data/vendor/pygments-main/tests/examplefiles/test.vb +407 -0
  401. data/vendor/pygments-main/tests/examplefiles/test.vhdl +161 -0
  402. data/vendor/pygments-main/tests/examplefiles/test.xqy +138 -0
  403. data/vendor/pygments-main/tests/examplefiles/test.xsl +23 -0
  404. data/vendor/pygments-main/tests/examplefiles/test2.pypylog +120 -0
  405. data/vendor/pygments-main/tests/examplefiles/truncated.pytb +15 -0
  406. data/vendor/pygments-main/tests/examplefiles/type.lisp +1218 -0
  407. data/vendor/pygments-main/tests/examplefiles/underscore.coffee +603 -0
  408. data/vendor/pygments-main/tests/examplefiles/unicode.applescript +5 -0
  409. data/vendor/pygments-main/tests/examplefiles/unicodedoc.py +11 -0
  410. data/vendor/pygments-main/tests/examplefiles/unix-io.lid +37 -0
  411. data/vendor/pygments-main/tests/examplefiles/webkit-transition.css +3 -0
  412. data/vendor/pygments-main/tests/examplefiles/while.pov +13 -0
  413. data/vendor/pygments-main/tests/examplefiles/wiki.factor +384 -0
  414. data/vendor/pygments-main/tests/examplefiles/xml_example +1897 -0
  415. data/vendor/pygments-main/tests/examplefiles/zmlrpc.f90 +798 -0
  416. data/vendor/pygments-main/tests/old_run.py +138 -0
  417. data/vendor/pygments-main/tests/run.py +49 -0
  418. data/vendor/pygments-main/tests/support.py +15 -0
  419. data/vendor/pygments-main/tests/support/tags +36 -0
  420. data/vendor/pygments-main/tests/test_basic_api.py +295 -0
  421. data/vendor/pygments-main/tests/test_clexer.py +31 -0
  422. data/vendor/pygments-main/tests/test_cmdline.py +105 -0
  423. data/vendor/pygments-main/tests/test_examplefiles.py +99 -0
  424. data/vendor/pygments-main/tests/test_html_formatter.py +178 -0
  425. data/vendor/pygments-main/tests/test_latex_formatter.py +55 -0
  426. data/vendor/pygments-main/tests/test_lexers_other.py +68 -0
  427. data/vendor/pygments-main/tests/test_perllexer.py +137 -0
  428. data/vendor/pygments-main/tests/test_regexlexer.py +47 -0
  429. data/vendor/pygments-main/tests/test_token.py +46 -0
  430. data/vendor/pygments-main/tests/test_using_api.py +40 -0
  431. data/vendor/pygments-main/tests/test_util.py +135 -0
  432. data/vendor/simplejson/.gitignore +10 -0
  433. data/vendor/simplejson/.travis.yml +5 -0
  434. data/vendor/simplejson/CHANGES.txt +291 -0
  435. data/vendor/simplejson/LICENSE.txt +19 -0
  436. data/vendor/simplejson/MANIFEST.in +5 -0
  437. data/vendor/simplejson/README.rst +19 -0
  438. data/vendor/simplejson/conf.py +179 -0
  439. data/vendor/simplejson/index.rst +628 -0
  440. data/vendor/simplejson/scripts/make_docs.py +18 -0
  441. data/vendor/simplejson/setup.py +104 -0
  442. data/vendor/simplejson/simplejson/__init__.py +510 -0
  443. data/vendor/simplejson/simplejson/_speedups.c +2745 -0
  444. data/vendor/simplejson/simplejson/decoder.py +425 -0
  445. data/vendor/simplejson/simplejson/encoder.py +567 -0
  446. data/vendor/simplejson/simplejson/ordered_dict.py +119 -0
  447. data/vendor/simplejson/simplejson/scanner.py +77 -0
  448. data/vendor/simplejson/simplejson/tests/__init__.py +67 -0
  449. data/vendor/simplejson/simplejson/tests/test_bigint_as_string.py +55 -0
  450. data/vendor/simplejson/simplejson/tests/test_check_circular.py +30 -0
  451. data/vendor/simplejson/simplejson/tests/test_decimal.py +66 -0
  452. data/vendor/simplejson/simplejson/tests/test_decode.py +83 -0
  453. data/vendor/simplejson/simplejson/tests/test_default.py +9 -0
  454. data/vendor/simplejson/simplejson/tests/test_dump.py +67 -0
  455. data/vendor/simplejson/simplejson/tests/test_encode_basestring_ascii.py +46 -0
  456. data/vendor/simplejson/simplejson/tests/test_encode_for_html.py +32 -0
  457. data/vendor/simplejson/simplejson/tests/test_errors.py +34 -0
  458. data/vendor/simplejson/simplejson/tests/test_fail.py +91 -0
  459. data/vendor/simplejson/simplejson/tests/test_float.py +19 -0
  460. data/vendor/simplejson/simplejson/tests/test_indent.py +86 -0
  461. data/vendor/simplejson/simplejson/tests/test_item_sort_key.py +20 -0
  462. data/vendor/simplejson/simplejson/tests/test_namedtuple.py +121 -0
  463. data/vendor/simplejson/simplejson/tests/test_pass1.py +76 -0
  464. data/vendor/simplejson/simplejson/tests/test_pass2.py +14 -0
  465. data/vendor/simplejson/simplejson/tests/test_pass3.py +20 -0
  466. data/vendor/simplejson/simplejson/tests/test_recursion.py +67 -0
  467. data/vendor/simplejson/simplejson/tests/test_scanstring.py +117 -0
  468. data/vendor/simplejson/simplejson/tests/test_separators.py +42 -0
  469. data/vendor/simplejson/simplejson/tests/test_speedups.py +20 -0
  470. data/vendor/simplejson/simplejson/tests/test_tuple.py +49 -0
  471. data/vendor/simplejson/simplejson/tests/test_unicode.py +109 -0
  472. data/vendor/simplejson/simplejson/tool.py +39 -0
  473. metadata +557 -0
@@ -0,0 +1,798 @@
1
+ !!$
2
+ !!$
3
+ !!$ MD2P4
4
+ !!$ Multilevel Domain Decomposition Parallel Preconditioner Package for PSBLAS
5
+ !!$ for
6
+ !!$ Parallel Sparse BLAS v2.0
7
+ !!$ (C) Copyright 2006 Salvatore Filippone University of Rome Tor Vergata
8
+ !!$ Alfredo Buttari University of Rome Tor Vergata
9
+ !!$ Daniela Di Serafino II University of Naples
10
+ !!$ Pasqua D'Ambra ICAR-CNR
11
+ !!$
12
+ !!$ Redistribution and use in source and binary forms, with or without
13
+ !!$ modification, are permitted provided that the following conditions
14
+ !!$ are met:
15
+ !!$ 1. Redistributions of source code must retain the above copyright
16
+ !!$ notice, this list of conditions and the following disclaimer.
17
+ !!$ 2. Redistributions in binary form must reproduce the above copyright
18
+ !!$ notice, this list of conditions, and the following disclaimer in the
19
+ !!$ documentation and/or other materials provided with the distribution.
20
+ !!$ 3. The name of the MD2P4 group or the names of its contributors may
21
+ !!$ not be used to endorse or promote products derived from this
22
+ !!$ software without specific written permission.
23
+ !!$
24
+ !!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ !!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
26
+ !!$ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27
+ !!$ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE MD2P4 GROUP OR ITS CONTRIBUTORS
28
+ !!$ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29
+ !!$ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30
+ !!$ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31
+ !!$ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32
+ !!$ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33
+ !!$ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
+ !!$ POSSIBILITY OF SUCH DAMAGE.
35
+ !!$
36
+ !!$
37
+ subroutine psb_zmlprc_aply(alpha,baseprecv,x,beta,y,desc_data,trans,work,info)
38
+ !
39
+ ! Compute Y <- beta*Y + alpha*K^-1 X
40
+ ! where K is a multilevel preconditioner stored in baseprecv
41
+ !
42
+ ! cfr.: Smith, Biorstad & Gropp
43
+ ! Domain Decomposition
44
+ ! Cambridge Univ. Press
45
+ !
46
+ ! To each level I there corresponds a matrix A(I) and a preconditioner K(I)
47
+ !
48
+ ! A notational difference: in the DD reference above the preconditioner for
49
+ ! a given level K(I) is written out as a sum over the subdomains
50
+ !
51
+ ! SUM_k(R_k^T A_k R_k)
52
+ !
53
+ ! whereas in this code the sum is implicit in the parallelization,
54
+ ! i.e. each process takes care of one subdomain, and for each level we have
55
+ ! as many subdomains as there are processes (except for the coarsest level where
56
+ ! we might have a replicated index space). Thus the sum apparently disappears
57
+ ! from our code, but only apparently, because it is implicit in the call
58
+ ! to psb_baseprc_aply.
59
+ !
60
+ ! A bit of description of the baseprecv(:) data structure:
61
+ ! 1. Number of levels = NLEV = size(baseprecv(:))
62
+ ! 2. baseprecv(ilev)%av(:) sparse matrices needed for the current level.
63
+ ! Includes:
64
+ ! 2.1.: baseprecv(ilev)%av(l_pr_) L factor of ILU preconditioners
65
+ ! 2.2.: baseprecv(ilev)%av(u_pr_) U factor of ILU preconditioners
66
+ ! 2.3.: baseprecv(ilev)%av(ap_nd_) Off-diagonal part of A for Jacobi sweeps
67
+ ! 2.4.: baseprecv(ilev)%av(ac_) Aggregated matrix of level ILEV
68
+ ! 2.5.: baseprecv(ilev)%av(sm_pr_t_) Smoother prolongator transpose; maps vectors
69
+ ! (ilev-1) ---> (ilev)
70
+ ! 2.6.: baseprecv(ilev)%av(sm_pr_) Smoother prolongator; maps vectors
71
+ ! (ilev) ---> (ilev-1)
72
+ ! Shouldn't we keep just one of them and handle transpose in the sparse BLAS? maybe
73
+ !
74
+ ! 3. baseprecv(ilev)%desc_data comm descriptor for level ILEV
75
+ ! 4. baseprecv(ilev)%base_a Pointer (really a pointer!) to the base matrix
76
+ ! of the current level, i.e.: if ILEV=1 then A
77
+ ! else the aggregated matrix av(ac_); so we have
78
+ ! a unified treatment of residuals. Need this to
79
+ ! avoid passing explicitly matrix A to the
80
+ ! outer prec. routine
81
+ ! 5. baseprecv(ilev)%mlia The aggregation map from (ilev-1)-->(ilev)
82
+ ! if no smoother, it is used instead of sm_pr_
83
+ ! 6. baseprecv(ilev)%nlaggr Number of aggregates on the various procs.
84
+ !
85
+
86
+ use psb_serial_mod
87
+ use psb_descriptor_type
88
+ use psb_prec_type
89
+ use psb_psblas_mod
90
+ use psb_penv_mod
91
+ use psb_const_mod
92
+ use psb_error_mod
93
+ use psb_penv_mod
94
+ implicit none
95
+
96
+ type(psb_desc_type),intent(in) :: desc_data
97
+ type(psb_zbaseprc_type), intent(in) :: baseprecv(:)
98
+ complex(kind(1.d0)),intent(in) :: alpha,beta
99
+ complex(kind(1.d0)),intent(inout) :: x(:), y(:)
100
+ character :: trans
101
+ complex(kind(1.d0)),target :: work(:)
102
+ integer, intent(out) :: info
103
+
104
+
105
+ ! Local variables
106
+ integer :: n_row,n_col
107
+ complex(kind(1.d0)), allocatable :: tx(:),ty(:),t2l(:),w2l(:),&
108
+ & x2l(:),b2l(:),tz(:),tty(:)
109
+ character ::diagl, diagu
110
+ integer :: ictxt,np,me,i, isz, nrg,nr2l,err_act, iptype, int_err(5)
111
+ real(kind(1.d0)) :: omega
112
+ real(kind(1.d0)) :: t1, t2, t3, t4, t5, t6, t7, mpi_wtime
113
+ logical, parameter :: debug=.false., debugprt=.false.
114
+ integer :: ismth, nlev, ilev
115
+ external mpi_wtime
116
+ character(len=20) :: name, ch_err
117
+
118
+ type psb_mlprec_wrk_type
119
+ complex(kind(1.d0)), pointer :: tx(:)=>null(),ty(:)=>null(),&
120
+ & x2l(:)=>null(),y2l(:)=>null(),&
121
+ & b2l(:)=>null(),tty(:)=>null()
122
+ end type psb_mlprec_wrk_type
123
+ type(psb_mlprec_wrk_type), pointer :: mlprec_wrk(:)
124
+
125
+ interface psb_baseprc_aply
126
+ subroutine psb_zbaseprc_aply(alpha,prec,x,beta,y,desc_data,trans,work,info)
127
+ use psb_descriptor_type
128
+ use psb_prec_type
129
+ type(psb_desc_type),intent(in) :: desc_data
130
+ type(psb_zbaseprc_type), intent(in) :: prec
131
+ complex(kind(1.d0)),intent(inout) :: x(:), y(:)
132
+ complex(kind(1.d0)),intent(in) :: alpha,beta
133
+ character(len=1) :: trans
134
+ complex(kind(1.d0)),target :: work(:)
135
+ integer, intent(out) :: info
136
+ end subroutine psb_zbaseprc_aply
137
+ end interface
138
+
139
+ name='psb_mlprc_aply'
140
+ info = 0
141
+ call psb_erractionsave(err_act)
142
+
143
+
144
+ ictxt=desc_data%matrix_data(psb_ctxt_)
145
+ call psb_info(ictxt, me, np)
146
+
147
+ nlev = size(baseprecv)
148
+ allocate(mlprec_wrk(nlev),stat=info)
149
+ if (info /= 0) then
150
+ call psb_errpush(4010,name,a_err='Allocate')
151
+ goto 9999
152
+ end if
153
+
154
+
155
+ select case(baseprecv(2)%iprcparm(ml_type_))
156
+
157
+ case(no_ml_)
158
+ ! Should not really get here.
159
+ call psb_errpush(4010,name,a_err='no_ml_ in mlprc_aply?')
160
+ goto 9999
161
+
162
+
163
+ case(add_ml_prec_)
164
+
165
+
166
+ !
167
+ ! Additive is very simple.
168
+ ! 1. X(1) = Xext
169
+ ! 2. DO ILEV=2,NLEV
170
+ ! X(ILEV) = AV(PR_SM_T_)*X(ILEV-1)
171
+ ! 3. Y(ILEV) = (K(ILEV)**(-1))*X(ILEV)
172
+ ! 4. DO ILEV=NLEV-1,1,-1
173
+ ! Y(ILEV) = AV(PR_SM_)*Y(ILEV+1)
174
+ ! 5. Yext = beta*Yext + Y(1)
175
+ !
176
+ ! Note: level numbering reversed wrt ref. DD, i.e.
177
+ ! 1..NLEV <=> (j) <-> 0
178
+
179
+
180
+ call psb_baseprc_aply(alpha,baseprecv(1),x,beta,y,&
181
+ & baseprecv(1)%base_desc,trans,work,info)
182
+ if(info /=0) goto 9999
183
+ allocate(mlprec_wrk(1)%x2l(size(x)),mlprec_wrk(1)%y2l(size(y)))
184
+ mlprec_wrk(1)%x2l(:) = x(:)
185
+
186
+
187
+ do ilev = 2, nlev
188
+ n_row = baseprecv(ilev-1)%base_desc%matrix_data(psb_n_row_)
189
+ n_col = baseprecv(ilev-1)%desc_data%matrix_data(psb_n_col_)
190
+ nr2l = baseprecv(ilev)%desc_data%matrix_data(psb_n_col_)
191
+ nrg = baseprecv(ilev)%desc_data%matrix_data(psb_n_row_)
192
+ allocate(mlprec_wrk(ilev)%x2l(nr2l),mlprec_wrk(ilev)%y2l(nr2l),&
193
+ & mlprec_wrk(ilev)%tx(max(n_row,n_col)),&
194
+ & mlprec_wrk(ilev)%ty(max(n_row,n_col)), stat=info)
195
+ if (info /= 0) then
196
+ call psb_errpush(4010,name,a_err='Allocate')
197
+ goto 9999
198
+ end if
199
+
200
+ mlprec_wrk(ilev)%x2l(:) = zzero
201
+ mlprec_wrk(ilev)%y2l(:) = zzero
202
+ mlprec_wrk(ilev)%tx(1:n_row) = mlprec_wrk(ilev-1)%x2l(1:n_row)
203
+ mlprec_wrk(ilev)%tx(n_row+1:max(n_row,n_col)) = zzero
204
+ mlprec_wrk(ilev)%ty(:) = zzero
205
+
206
+ ismth=baseprecv(ilev)%iprcparm(smth_kind_)
207
+
208
+ if (ismth /= no_smth_) then
209
+ !
210
+ ! Smoothed aggregation
211
+ !
212
+
213
+
214
+ if (baseprecv(ilev)%iprcparm(glb_smth_) >0) then
215
+ call psb_halo(mlprec_wrk(ilev-1)%x2l,baseprecv(ilev-1)%base_desc,&
216
+ & info,work=work)
217
+ if(info /=0) goto 9999
218
+ else
219
+ mlprec_wrk(ilev-1)%x2l(n_row+1:max(n_row,n_col)) = zzero
220
+ end if
221
+
222
+ call psb_csmm(zone,baseprecv(ilev)%av(sm_pr_t_),mlprec_wrk(ilev-1)%x2l,&
223
+ & zzero,mlprec_wrk(ilev)%x2l,info)
224
+ if(info /=0) goto 9999
225
+
226
+ else
227
+ !
228
+ ! Raw aggregation, may take shortcut
229
+ !
230
+ do i=1,n_row
231
+ mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) = &
232
+ & mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) + &
233
+ & mlprec_wrk(ilev-1)%x2l(i)
234
+ end do
235
+
236
+ end if
237
+
238
+ if (baseprecv(ilev)%iprcparm(coarse_mat_)==mat_repl_) Then
239
+ call psb_sum(ictxt,mlprec_wrk(ilev)%x2l(1:nrg))
240
+ else if (baseprecv(ilev)%iprcparm(coarse_mat_) /= mat_distr_) Then
241
+ write(0,*) 'Unknown value for baseprecv(2)%iprcparm(coarse_mat_) ',&
242
+ & baseprecv(ilev)%iprcparm(coarse_mat_)
243
+ endif
244
+
245
+ call psb_baseprc_aply(zone,baseprecv(ilev),&
246
+ & mlprec_wrk(ilev)%x2l,zzero,mlprec_wrk(ilev)%y2l,&
247
+ & baseprecv(ilev)%desc_data, 'N',work,info)
248
+
249
+ enddo
250
+
251
+ do ilev =nlev,2,-1
252
+
253
+ ismth=baseprecv(ilev)%iprcparm(smth_kind_)
254
+ n_row = baseprecv(ilev-1)%base_desc%matrix_data(psb_n_row_)
255
+ n_col = baseprecv(ilev-1)%desc_data%matrix_data(psb_n_col_)
256
+ nr2l = baseprecv(ilev)%desc_data%matrix_data(psb_n_col_)
257
+ nrg = baseprecv(ilev)%desc_data%matrix_data(psb_n_row_)
258
+
259
+ if (ismth /= no_smth_) then
260
+
261
+ call psb_csmm(zone,baseprecv(ilev)%av(sm_pr_),mlprec_wrk(ilev)%y2l,&
262
+ & zone,mlprec_wrk(ilev-1)%y2l,info)
263
+ if(info /=0) goto 9999
264
+
265
+ else
266
+
267
+ do i=1, n_row
268
+ mlprec_wrk(ilev-1)%y2l(i) = mlprec_wrk(ilev-1)%y2l(i) + &
269
+ & mlprec_wrk(ilev)%y2l(baseprecv(ilev)%mlia(i))
270
+ enddo
271
+
272
+ end if
273
+ end do
274
+
275
+ call psb_geaxpby(alpha,mlprec_wrk(1)%y2l,zone,y,baseprecv(1)%base_desc,info)
276
+ if(info /=0) goto 9999
277
+
278
+
279
+ case(mult_ml_prec_)
280
+
281
+ !
282
+ ! Multiplicative multilevel
283
+ ! Pre/post smoothing versions.
284
+ !
285
+
286
+ select case(baseprecv(2)%iprcparm(smth_pos_))
287
+
288
+ case(post_smooth_)
289
+
290
+
291
+ !
292
+ ! Post smoothing.
293
+ ! 1. X(1) = Xext
294
+ ! 2. DO ILEV=2, NLEV :: X(ILEV) = AV(PR_SM_T_,ILEV)*X(ILEV-1)
295
+ ! 3. Y(NLEV) = (K(NLEV)**(-1))*X(NLEV)
296
+ ! 4. DO ILEV=NLEV-1,1,-1
297
+ ! Y(ILEV) = AV(PR_SM_,ILEV+1)*Y(ILEV+1)
298
+ ! Y(ILEV) = Y(ILEV) + (K(ILEV)**(-1))*(X(ILEV)-A(ILEV)*Y(ILEV))
299
+ !
300
+ ! 5. Yext = beta*Yext + Y(1)
301
+ !
302
+ ! Note: level numbering reversed wrt ref. DD, i.e.
303
+ ! 1..NLEV <=> (j) <-> 0
304
+ !
305
+ ! Also: post smoothing is not spelled out in detail in DD.
306
+ !
307
+ !
308
+
309
+
310
+ n_col = desc_data%matrix_data(psb_n_col_)
311
+ nr2l = baseprecv(1)%desc_data%matrix_data(psb_n_col_)
312
+
313
+ allocate(mlprec_wrk(1)%x2l(nr2l),mlprec_wrk(1)%y2l(nr2l), &
314
+ & mlprec_wrk(1)%tx(nr2l), stat=info)
315
+ mlprec_wrk(1)%x2l(:) = zzero
316
+ mlprec_wrk(1)%y2l(:) = zzero
317
+ mlprec_wrk(1)%tx(:) = zzero
318
+
319
+ call psb_geaxpby(zone,x,zzero,mlprec_wrk(1)%tx,&
320
+ & baseprecv(1)%base_desc,info)
321
+ call psb_geaxpby(zone,x,zzero,mlprec_wrk(1)%x2l,&
322
+ & baseprecv(1)%base_desc,info)
323
+
324
+ do ilev=2, nlev
325
+ n_row = baseprecv(ilev-1)%base_desc%matrix_data(psb_n_row_)
326
+ n_col = baseprecv(ilev-1)%desc_data%matrix_data(psb_n_col_)
327
+ nr2l = baseprecv(ilev)%desc_data%matrix_data(psb_n_col_)
328
+ nrg = baseprecv(ilev)%desc_data%matrix_data(psb_n_row_)
329
+ ismth = baseprecv(ilev)%iprcparm(smth_kind_)
330
+
331
+ allocate(mlprec_wrk(ilev)%tx(nr2l),mlprec_wrk(ilev)%y2l(nr2l),&
332
+ & mlprec_wrk(ilev)%x2l(nr2l), stat=info)
333
+
334
+ if (info /= 0) then
335
+ call psb_errpush(4010,name,a_err='Allocate')
336
+ goto 9999
337
+ end if
338
+
339
+ mlprec_wrk(ilev)%x2l(:) = zzero
340
+ mlprec_wrk(ilev)%y2l(:) = zzero
341
+ mlprec_wrk(ilev)%tx(:) = zzero
342
+ if (ismth /= no_smth_) then
343
+ !
344
+ ! Smoothed aggregation
345
+ !
346
+ if (baseprecv(ilev)%iprcparm(glb_smth_) >0) then
347
+ call psb_halo(mlprec_wrk(ilev-1)%x2l,&
348
+ & baseprecv(ilev-1)%base_desc,info,work=work)
349
+ if(info /=0) goto 9999
350
+ else
351
+ mlprec_wrk(ilev-1)%x2l(n_row+1:max(n_row,n_col)) = zzero
352
+ end if
353
+
354
+ call psb_csmm(zone,baseprecv(ilev)%av(sm_pr_t_),mlprec_wrk(ilev-1)%x2l, &
355
+ & zzero,mlprec_wrk(ilev)%x2l,info)
356
+ if(info /=0) goto 9999
357
+
358
+ else
359
+ !
360
+ ! Raw aggregation, may take shortcut
361
+ !
362
+ do i=1,n_row
363
+ mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) = &
364
+ & mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) + &
365
+ & mlprec_wrk(ilev-1)%x2l(i)
366
+ end do
367
+ end if
368
+
369
+ if (baseprecv(ilev)%iprcparm(coarse_mat_)==mat_repl_) Then
370
+ call psb_sum(ictxt,mlprec_wrk(ilev)%x2l(1:nrg))
371
+ else if (baseprecv(ilev)%iprcparm(coarse_mat_) /= mat_distr_) Then
372
+ write(0,*) 'Unknown value for baseprecv(2)%iprcparm(coarse_mat_) ',&
373
+ & baseprecv(ilev)%iprcparm(coarse_mat_)
374
+ endif
375
+ call psb_geaxpby(zone,mlprec_wrk(ilev)%x2l,zzero,mlprec_wrk(ilev)%tx,&
376
+ & baseprecv(ilev)%base_desc,info)
377
+ if(info /=0) goto 9999
378
+
379
+ enddo
380
+
381
+
382
+ call psb_baseprc_aply(zone,baseprecv(nlev),mlprec_wrk(nlev)%x2l, &
383
+ & zzero, mlprec_wrk(nlev)%y2l,baseprecv(nlev)%desc_data,'N',work,info)
384
+
385
+ if(info /=0) goto 9999
386
+
387
+
388
+ do ilev=nlev-1, 1, -1
389
+ ismth = baseprecv(ilev+1)%iprcparm(smth_kind_)
390
+ if (ismth /= no_smth_) then
391
+ if (ismth == smth_omg_) &
392
+ & call psb_halo(mlprec_wrk(ilev+1)%y2l,baseprecv(ilev+1)%desc_data,&
393
+ & info,work=work)
394
+ call psb_csmm(zone,baseprecv(ilev+1)%av(sm_pr_),mlprec_wrk(ilev+1)%y2l,&
395
+ & zzero,mlprec_wrk(ilev)%y2l,info)
396
+ if(info /=0) goto 9999
397
+
398
+ else
399
+ n_row = baseprecv(ilev)%base_desc%matrix_data(psb_n_row_)
400
+ mlprec_wrk(ilev)%y2l(:) = zzero
401
+ do i=1, n_row
402
+ mlprec_wrk(ilev)%y2l(i) = mlprec_wrk(ilev)%y2l(i) + &
403
+ & mlprec_wrk(ilev+1)%y2l(baseprecv(ilev+1)%mlia(i))
404
+ enddo
405
+
406
+ end if
407
+
408
+ call psb_spmm(-zone,baseprecv(ilev)%base_a,mlprec_wrk(ilev)%y2l,&
409
+ & zone,mlprec_wrk(ilev)%tx,baseprecv(ilev)%base_desc,info,work=work)
410
+
411
+ if(info /=0) goto 9999
412
+
413
+ call psb_baseprc_aply(zone,baseprecv(ilev),mlprec_wrk(ilev)%tx,&
414
+ & zone,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%base_desc, trans, work,info)
415
+
416
+ if(info /=0) goto 9999
417
+
418
+ enddo
419
+
420
+ call psb_geaxpby(alpha,mlprec_wrk(1)%y2l,beta,y,baseprecv(1)%base_desc,info)
421
+
422
+ if(info /=0) goto 9999
423
+
424
+
425
+ case(pre_smooth_)
426
+
427
+
428
+ !
429
+ ! Pre smoothing.
430
+ ! 1. X(1) = Xext
431
+ ! 2. Y(1) = (K(1)**(-1))*X(1)
432
+ ! 3. TX(1) = X(1) - A(1)*Y(1)
433
+ ! 4. DO ILEV=2, NLEV
434
+ ! X(ILEV) = AV(PR_SM_T_,ILEV)*TX(ILEV-1)
435
+ ! Y(ILEV) = (K(ILEV)**(-1))*X(ILEV)
436
+ ! TX(ILEV) = (X(ILEV)-A(ILEV)*Y(ILEV))
437
+ ! 5. DO ILEV=NLEV-1,1,-1
438
+ ! Y(ILEV) = Y(ILEV) + AV(PR_SM_,ILEV+1)*Y(ILEV+1)
439
+ ! 6. Yext = beta*Yext + Y(1)
440
+ !
441
+ ! Note: level numbering reversed wrt ref. DD, i.e.
442
+ ! 1..NLEV <=> (j) <-> 0
443
+ !
444
+ !
445
+
446
+ n_col = desc_data%matrix_data(psb_n_col_)
447
+ nr2l = baseprecv(1)%desc_data%matrix_data(psb_n_col_)
448
+
449
+ allocate(mlprec_wrk(1)%x2l(nr2l),mlprec_wrk(1)%y2l(nr2l), &
450
+ & mlprec_wrk(1)%tx(nr2l), stat=info)
451
+ if (info /= 0) then
452
+ call psb_errpush(4010,name,a_err='Allocate')
453
+ goto 9999
454
+ end if
455
+
456
+ mlprec_wrk(1)%y2l(:) = zzero
457
+
458
+
459
+ mlprec_wrk(1)%x2l(:) = x
460
+
461
+ call psb_baseprc_aply(zone,baseprecv(1),mlprec_wrk(1)%x2l,&
462
+ & zzero,mlprec_wrk(1)%y2l,&
463
+ & baseprecv(1)%base_desc,&
464
+ & trans,work,info)
465
+
466
+ if(info /=0) goto 9999
467
+
468
+ mlprec_wrk(1)%tx = mlprec_wrk(1)%x2l
469
+
470
+ call psb_spmm(-zone,baseprecv(1)%base_a,mlprec_wrk(1)%y2l,&
471
+ & zone,mlprec_wrk(1)%tx,baseprecv(1)%base_desc,info,work=work)
472
+ if(info /=0) goto 9999
473
+
474
+ do ilev = 2, nlev
475
+ n_row = baseprecv(ilev-1)%base_desc%matrix_data(psb_n_row_)
476
+ n_col = baseprecv(ilev-1)%desc_data%matrix_data(psb_n_col_)
477
+ nr2l = baseprecv(ilev)%desc_data%matrix_data(psb_n_col_)
478
+ nrg = baseprecv(ilev)%desc_data%matrix_data(psb_n_row_)
479
+ ismth = baseprecv(ilev)%iprcparm(smth_kind_)
480
+ allocate(mlprec_wrk(ilev)%tx(nr2l),mlprec_wrk(ilev)%y2l(nr2l),&
481
+ & mlprec_wrk(ilev)%x2l(nr2l), stat=info)
482
+
483
+
484
+ if (info /= 0) then
485
+ call psb_errpush(4010,name,a_err='Allocate')
486
+ goto 9999
487
+ end if
488
+
489
+ mlprec_wrk(ilev)%x2l(:) = zzero
490
+ mlprec_wrk(ilev)%y2l(:) = zzero
491
+ mlprec_wrk(ilev)%tx(:) = zzero
492
+
493
+
494
+ if (ismth /= no_smth_) then
495
+ !
496
+ !Smoothed Aggregation
497
+ !
498
+ if (baseprecv(ilev)%iprcparm(glb_smth_) >0) then
499
+
500
+ call psb_halo(mlprec_wrk(ilev-1)%tx,baseprecv(ilev-1)%base_desc,&
501
+ & info,work=work)
502
+ if(info /=0) goto 9999
503
+ else
504
+ mlprec_wrk(ilev-1)%tx(n_row+1:max(n_row,n_col)) = zzero
505
+ end if
506
+
507
+ call psb_csmm(zone,baseprecv(ilev)%av(sm_pr_t_),mlprec_wrk(ilev-1)%tx,zzero,&
508
+ & mlprec_wrk(ilev)%x2l,info)
509
+ if(info /=0) goto 9999
510
+
511
+ else
512
+ !
513
+ ! Raw aggregation, may take shortcuts
514
+ !
515
+ mlprec_wrk(ilev)%x2l = zzero
516
+ do i=1,n_row
517
+ mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) = &
518
+ & mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) + &
519
+ & mlprec_wrk(ilev-1)%tx(i)
520
+ end do
521
+ end if
522
+
523
+ if (baseprecv(ilev)%iprcparm(coarse_mat_)==mat_repl_) then
524
+ call psb_sum(ictxt,mlprec_wrk(ilev)%x2l(1:nrg))
525
+ else if (baseprecv(ilev)%iprcparm(coarse_mat_) /= mat_distr_) then
526
+ write(0,*) 'Unknown value for baseprecv(2)%iprcparm(coarse_mat_) ',&
527
+ & baseprecv(ilev)%iprcparm(coarse_mat_)
528
+ endif
529
+
530
+
531
+ call psb_baseprc_aply(zone,baseprecv(ilev),mlprec_wrk(ilev)%x2l,&
532
+ & zzero,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%desc_data, 'N',work,info)
533
+
534
+ if(info /=0) goto 9999
535
+
536
+ if(ilev < nlev) then
537
+ mlprec_wrk(ilev)%tx = mlprec_wrk(ilev)%x2l
538
+ call psb_spmm(-zone,baseprecv(ilev)%base_a,mlprec_wrk(ilev)%y2l,&
539
+ & zone,mlprec_wrk(ilev)%tx,baseprecv(ilev)%base_desc,info,work=work)
540
+ if(info /=0) goto 9999
541
+ endif
542
+
543
+ enddo
544
+
545
+ do ilev = nlev-1, 1, -1
546
+
547
+ ismth=baseprecv(ilev+1)%iprcparm(smth_kind_)
548
+
549
+ if (ismth /= no_smth_) then
550
+
551
+ if (ismth == smth_omg_) &
552
+ & call psb_halo(mlprec_wrk(ilev+1)%y2l,&
553
+ & baseprecv(ilev+1)%desc_data,info,work=work)
554
+ call psb_csmm(zone,baseprecv(ilev+1)%av(sm_pr_),mlprec_wrk(ilev+1)%y2l,&
555
+ & zone,mlprec_wrk(ilev)%y2l,info)
556
+
557
+ if(info /=0) goto 9999
558
+
559
+ else
560
+
561
+ n_row = baseprecv(ilev+1)%base_desc%matrix_data(psb_n_row_)
562
+ do i=1, n_row
563
+ mlprec_wrk(ilev)%y2l(i) = mlprec_wrk(ilev)%y2l(i) + &
564
+ & mlprec_wrk(ilev+1)%y2l(baseprecv(ilev+1)%mlia(i))
565
+ enddo
566
+
567
+ end if
568
+
569
+ enddo
570
+
571
+ call psb_geaxpby(alpha,mlprec_wrk(1)%y2l,beta,y,&
572
+ & baseprecv(1)%base_desc,info)
573
+
574
+ if(info /=0) goto 9999
575
+
576
+
577
+
578
+ case(smooth_both_)
579
+
580
+ !
581
+ ! Symmetrized smoothing.
582
+ ! 1. X(1) = Xext
583
+ ! 2. Y(1) = (K(1)**(-1))*X(1)
584
+ ! 3. TX(1) = X(1) - A(1)*Y(1)
585
+ ! 4. DO ILEV=2, NLEV
586
+ ! X(ILEV) = AV(PR_SM_T_,ILEV)*TX(ILEV-1)
587
+ ! Y(ILEV) = (K(ILEV)**(-1))*X(ILEV)
588
+ ! TX(ILEV) = (X(ILEV)-A(ILEV)*Y(ILEV))
589
+ ! 5. DO ILEV=NLEV-1,1,-1
590
+ ! Y(ILEV) = Y(ILEV) + AV(PR_SM_,ILEV+1)*Y(ILEV+1)
591
+ ! Y(ILEV) = Y(ILEV) + (K(ILEV)**(-1))*(X(ILEV)-A(ILEV)*Y(ILEV))
592
+ ! 6. Yext = beta*Yext + Y(1)
593
+ !
594
+ ! Note: level numbering reversed wrt ref. DD, i.e.
595
+ ! 1..NLEV <=> (j) <-> 0
596
+ !
597
+ !
598
+ n_col = desc_data%matrix_data(psb_n_col_)
599
+ nr2l = baseprecv(1)%desc_data%matrix_data(psb_n_col_)
600
+
601
+ allocate(mlprec_wrk(1)%x2l(nr2l),mlprec_wrk(1)%y2l(nr2l), &
602
+ & mlprec_wrk(1)%ty(nr2l), mlprec_wrk(1)%tx(nr2l), stat=info)
603
+
604
+ mlprec_wrk(1)%x2l(:) = zzero
605
+ mlprec_wrk(1)%y2l(:) = zzero
606
+ mlprec_wrk(1)%tx(:) = zzero
607
+ mlprec_wrk(1)%ty(:) = zzero
608
+
609
+
610
+ if (info /= 0) then
611
+ call psb_errpush(4010,name,a_err='Allocate')
612
+ goto 9999
613
+ end if
614
+
615
+ call psb_geaxpby(zone,x,zzero,mlprec_wrk(1)%x2l,&
616
+ & baseprecv(1)%base_desc,info)
617
+ call psb_geaxpby(zone,x,zzero,mlprec_wrk(1)%tx,&
618
+ & baseprecv(1)%base_desc,info)
619
+
620
+ call psb_baseprc_aply(zone,baseprecv(1),mlprec_wrk(1)%x2l,&
621
+ & zzero,mlprec_wrk(1)%y2l,&
622
+ & baseprecv(1)%base_desc,&
623
+ & trans,work,info)
624
+
625
+ if(info /=0) goto 9999
626
+
627
+ mlprec_wrk(1)%ty = mlprec_wrk(1)%x2l
628
+
629
+ call psb_spmm(-zone,baseprecv(1)%base_a,mlprec_wrk(1)%y2l,&
630
+ & zone,mlprec_wrk(1)%ty,baseprecv(1)%base_desc,info,work=work)
631
+ if(info /=0) goto 9999
632
+
633
+ do ilev = 2, nlev
634
+ n_row = baseprecv(ilev-1)%base_desc%matrix_data(psb_n_row_)
635
+ n_col = baseprecv(ilev-1)%desc_data%matrix_data(psb_n_col_)
636
+ nr2l = baseprecv(ilev)%desc_data%matrix_data(psb_n_col_)
637
+ nrg = baseprecv(ilev)%desc_data%matrix_data(psb_n_row_)
638
+ ismth=baseprecv(ilev)%iprcparm(smth_kind_)
639
+ allocate(mlprec_wrk(ilev)%ty(nr2l),mlprec_wrk(ilev)%y2l(nr2l),&
640
+ & mlprec_wrk(ilev)%x2l(nr2l), stat=info)
641
+
642
+ mlprec_wrk(ilev)%x2l(:) = zzero
643
+ mlprec_wrk(ilev)%y2l(:) = zzero
644
+ mlprec_wrk(ilev)%tx(:) = zzero
645
+ mlprec_wrk(ilev)%ty(:) = zzero
646
+
647
+
648
+ if (info /= 0) then
649
+ call psb_errpush(4010,name,a_err='Allocate')
650
+ goto 9999
651
+ end if
652
+
653
+
654
+ if (ismth /= no_smth_) then
655
+ !
656
+ !Smoothed Aggregation
657
+ !
658
+ if (baseprecv(ilev)%iprcparm(glb_smth_) >0) then
659
+
660
+ call psb_halo(mlprec_wrk(ilev-1)%ty,baseprecv(ilev-1)%base_desc,&
661
+ & info,work=work)
662
+ if(info /=0) goto 9999
663
+ else
664
+ mlprec_wrk(ilev-1)%ty(n_row+1:max(n_row,n_col)) = zzero
665
+ end if
666
+
667
+ call psb_csmm(zone,baseprecv(ilev)%av(sm_pr_t_),mlprec_wrk(ilev-1)%ty,zzero,&
668
+ & mlprec_wrk(ilev)%x2l,info)
669
+ if(info /=0) goto 9999
670
+
671
+ else
672
+ !
673
+ ! Raw aggregation, may take shortcuts
674
+ !
675
+ mlprec_wrk(ilev)%x2l = zzero
676
+ do i=1,n_row
677
+ mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) = &
678
+ & mlprec_wrk(ilev)%x2l(baseprecv(ilev)%mlia(i)) + &
679
+ & mlprec_wrk(ilev-1)%ty(i)
680
+ end do
681
+ end if
682
+
683
+ if (baseprecv(ilev)%iprcparm(coarse_mat_)==mat_repl_) then
684
+ call psb_sum(ictxt,mlprec_wrk(ilev)%x2l(1:nrg))
685
+ else if (baseprecv(ilev)%iprcparm(coarse_mat_) /= mat_distr_) then
686
+ write(0,*) 'Unknown value for baseprecv(2)%iprcparm(coarse_mat_) ',&
687
+ & baseprecv(ilev)%iprcparm(coarse_mat_)
688
+ endif
689
+
690
+ call psb_geaxpby(zone,mlprec_wrk(ilev)%x2l,zzero,mlprec_wrk(ilev)%tx,&
691
+ & baseprecv(ilev)%base_desc,info)
692
+ if(info /=0) goto 9999
693
+
694
+ call psb_baseprc_aply(zone,baseprecv(ilev),mlprec_wrk(ilev)%x2l,&
695
+ & zzero,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%desc_data, 'N',work,info)
696
+
697
+ if(info /=0) goto 9999
698
+
699
+ if(ilev < nlev) then
700
+ mlprec_wrk(ilev)%ty = mlprec_wrk(ilev)%x2l
701
+ call psb_spmm(-zone,baseprecv(ilev)%base_a,mlprec_wrk(ilev)%y2l,&
702
+ & zone,mlprec_wrk(ilev)%ty,baseprecv(ilev)%base_desc,info,work=work)
703
+ if(info /=0) goto 9999
704
+ endif
705
+
706
+ enddo
707
+
708
+
709
+ do ilev=nlev-1, 1, -1
710
+
711
+ ismth=baseprecv(ilev+1)%iprcparm(smth_kind_)
712
+ if (ismth /= no_smth_) then
713
+ if (ismth == smth_omg_) &
714
+ & call psb_halo(mlprec_wrk(ilev+1)%y2l,baseprecv(ilev+1)%desc_data,&
715
+ & info,work=work)
716
+ call psb_csmm(zone,baseprecv(ilev+1)%av(sm_pr_),mlprec_wrk(ilev+1)%y2l,&
717
+ & zone,mlprec_wrk(ilev)%y2l,info)
718
+ if(info /=0) goto 9999
719
+
720
+ else
721
+ n_row = baseprecv(ilev)%base_desc%matrix_data(psb_n_row_)
722
+ do i=1, n_row
723
+ mlprec_wrk(ilev)%y2l(i) = mlprec_wrk(ilev)%y2l(i) + &
724
+ & mlprec_wrk(ilev+1)%y2l(baseprecv(ilev+1)%mlia(i))
725
+ enddo
726
+
727
+ end if
728
+
729
+ call psb_spmm(-zone,baseprecv(ilev)%base_a,mlprec_wrk(ilev)%y2l,&
730
+ & zone,mlprec_wrk(ilev)%tx,baseprecv(ilev)%base_desc,info,work=work)
731
+
732
+ if(info /=0) goto 9999
733
+
734
+ call psb_baseprc_aply(zone,baseprecv(ilev),mlprec_wrk(ilev)%tx,&
735
+ & zone,mlprec_wrk(ilev)%y2l,baseprecv(ilev)%base_desc, trans, work,info)
736
+
737
+ if(info /=0) goto 9999
738
+
739
+ enddo
740
+
741
+ call psb_geaxpby(alpha,mlprec_wrk(1)%y2l,beta,y,&
742
+ & baseprecv(1)%base_desc,info)
743
+
744
+ if(info /=0) goto 9999
745
+
746
+
747
+ case default
748
+
749
+ call psb_errpush(4013,name,a_err='wrong smooth_pos',&
750
+ & i_Err=(/baseprecv(2)%iprcparm(smth_pos_),0,0,0,0/))
751
+ goto 9999
752
+
753
+ end select
754
+
755
+ case default
756
+ call psb_errpush(4013,name,a_err='wrong mltype',&
757
+ & i_Err=(/baseprecv(2)%iprcparm(ml_type_),0,0,0,0/))
758
+ goto 9999
759
+
760
+ end select
761
+
762
+
763
+ call mlprec_wrk_free(mlprec_wrk)
764
+ deallocate(mlprec_wrk)
765
+
766
+ call psb_erractionrestore(err_act)
767
+ return
768
+
769
+ 9999 continue
770
+ call psb_errpush(info,name)
771
+ call psb_erractionrestore(err_act)
772
+ if (err_act.eq.act_abort) then
773
+ call psb_error()
774
+ return
775
+ end if
776
+ return
777
+
778
+ contains
779
+ subroutine mlprec_wrk_free(wrk)
780
+ type(psb_mlprec_wrk_type) :: wrk(:)
781
+ ! This will not be needed when we have allocatables, as
782
+ ! it is sufficient to deallocate the container, and
783
+ ! the compiler is supposed to recursively deallocate the
784
+ ! various components.
785
+ integer i
786
+
787
+ do i=1, size(wrk)
788
+ if (associated(wrk(i)%tx)) deallocate(wrk(i)%tx)
789
+ if (associated(wrk(i)%ty)) deallocate(wrk(i)%ty)
790
+ if (associated(wrk(i)%x2l)) deallocate(wrk(i)%x2l)
791
+ if (associated(wrk(i)%y2l)) deallocate(wrk(i)%y2l)
792
+ if (associated(wrk(i)%b2l)) deallocate(wrk(i)%b2l)
793
+ if (associated(wrk(i)%tty)) deallocate(wrk(i)%tty)
794
+ end do
795
+ end subroutine mlprec_wrk_free
796
+
797
+ end subroutine psb_zmlprc_aply
798
+