ww3tool 0.1.1__py3-none-any.whl

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 (870) hide show
  1. desktop/__init__.py +29 -0
  2. desktop/_repo_root.py +38 -0
  3. desktop/application.py +63 -0
  4. desktop/background_runner.py +46 -0
  5. desktop/branding.py +30 -0
  6. desktop/components/__init__.py +11 -0
  7. desktop/components/bounds_map_preview.py +252 -0
  8. desktop/components/combo_box.py +98 -0
  9. desktop/components/forcing_progress_dialog.py +84 -0
  10. desktop/components/globe_picker_dialog.py +474 -0
  11. desktop/components/header_card.py +36 -0
  12. desktop/components/image_gallery_drawer.py +470 -0
  13. desktop/components/ndbc_station_map_dialog.py +207 -0
  14. desktop/components/point_edit_dialog.py +179 -0
  15. desktop/components/region_map_dialog.py +233 -0
  16. desktop/components/right_aligned_controls.py +53 -0
  17. desktop/components/scroll_area.py +46 -0
  18. desktop/components/section_title.py +56 -0
  19. desktop/components/styles.py +127 -0
  20. desktop/components/table_widget.py +58 -0
  21. desktop/components/validators.py +29 -0
  22. desktop/qt_callback_dispatcher.py +31 -0
  23. desktop/steps/__init__.py +13 -0
  24. desktop/steps/calculation_panel.py +523 -0
  25. desktop/steps/forcing_panel.py +268 -0
  26. desktop/steps/grid_panel.py +941 -0
  27. desktop/steps/local_run_panel.py +133 -0
  28. desktop/steps/point_io.py +272 -0
  29. desktop/steps/server_connect_panel.py +563 -0
  30. desktop/steps/server_ops_panel.py +111 -0
  31. desktop/steps/ww3_panel.py +679 -0
  32. desktop/view_models/__init__.py +11 -0
  33. desktop/view_models/forcing_step.py +136 -0
  34. desktop/view_models/local_run.py +49 -0
  35. desktop/view_models/pipeline.py +958 -0
  36. desktop/view_models/plot.py +201 -0
  37. desktop/view_models/remote.py +263 -0
  38. desktop/view_models/settings.py +139 -0
  39. desktop/windows/__init__.py +22 -0
  40. desktop/windows/cluster_monitor.py +1181 -0
  41. desktop/windows/plot_window.py +1060 -0
  42. desktop/windows/preprocessing_window.py +3577 -0
  43. desktop/windows/settings_window.py +1559 -0
  44. desktop/windows/tools_window.py +534 -0
  45. desktop/windows/work_folder_dialog.py +239 -0
  46. run.py +552 -0
  47. workflows/__init__.py +105 -0
  48. workflows/application/__init__.py +119 -0
  49. workflows/application/configuration.py +1462 -0
  50. workflows/application/download_jason3.py +182 -0
  51. workflows/application/forcing_coverage_checker.py +193 -0
  52. workflows/application/forcing_inspection.py +266 -0
  53. workflows/application/forcing_merge.py +64 -0
  54. workflows/application/forcing_preparation.py +259 -0
  55. workflows/application/grid_preparation.py +152 -0
  56. workflows/application/grid_tools.py +412 -0
  57. workflows/application/local_run.py +75 -0
  58. workflows/application/match_jason3.py +339 -0
  59. workflows/application/match_ndbc.py +264 -0
  60. workflows/application/plot_spectrum.py +182 -0
  61. workflows/application/plot_wave_maps.py +429 -0
  62. workflows/application/plot_wind_field.py +210 -0
  63. workflows/application/preprocessing_workflow.py +146 -0
  64. workflows/application/remote_ops.py +2003 -0
  65. workflows/application/slurm_ops.py +26 -0
  66. workflows/domain/__init__.py +77 -0
  67. workflows/domain/config_models.py +638 -0
  68. workflows/domain/forcing_fields.py +179 -0
  69. workflows/domain/grid_bounds.py +230 -0
  70. workflows/domain/grid_spacing_recommendation.py +153 -0
  71. workflows/domain/named_path_preset_yaml.py +86 -0
  72. workflows/domain/output_scheme_yaml.py +188 -0
  73. workflows/domain/parameter_catalog.py +115 -0
  74. workflows/domain/timestep_recommendation.py +282 -0
  75. workflows/infrastructure/__init__.py +12 -0
  76. workflows/infrastructure/adapters/__init__.py +18 -0
  77. workflows/infrastructure/adapters/grid_generation_adapter.py +852 -0
  78. workflows/infrastructure/adapters/grid_visualization_adapter.py +191 -0
  79. workflows/infrastructure/adapters/ww3_namelist_adapter.py +409 -0
  80. workflows/infrastructure/forcing/__init__.py +27 -0
  81. workflows/infrastructure/forcing/file_path_manager.py +175 -0
  82. workflows/infrastructure/forcing/file_service.py +718 -0
  83. workflows/infrastructure/forcing/forcing_normalize_service.py +757 -0
  84. workflows/infrastructure/forcing/forcing_time_metadata.py +208 -0
  85. workflows/infrastructure/forcing/merge_service.py +947 -0
  86. workflows/infrastructure/forcing/use_cases.py +340 -0
  87. workflows/infrastructure/forcing/variable_detector.py +156 -0
  88. workflows/infrastructure/grid_visualization/__init__.py +16 -0
  89. workflows/infrastructure/grid_visualization/rect_grid_desc_parse.py +421 -0
  90. workflows/infrastructure/grid_visualization/structured_grid_paths.py +82 -0
  91. workflows/infrastructure/grid_visualization/worker.py +1408 -0
  92. workflows/infrastructure/local/__init__.py +4 -0
  93. workflows/infrastructure/local/run_service.py +628 -0
  94. workflows/infrastructure/plot/__init__.py +13 -0
  95. workflows/infrastructure/plot/jason3_download_worker.py +702 -0
  96. workflows/infrastructure/plot/jason3_worker.py +904 -0
  97. workflows/infrastructure/plot/ndbc_worker.py +667 -0
  98. workflows/infrastructure/plot/photo_output.py +62 -0
  99. workflows/infrastructure/plot/spectrum_worker.py +1790 -0
  100. workflows/infrastructure/plot/wave_map_worker.py +1434 -0
  101. workflows/infrastructure/plot/wind_field_worker.py +485 -0
  102. workflows/infrastructure/plot/workers_utils.py +357 -0
  103. workflows/infrastructure/region_map_renderer.py +147 -0
  104. workflows/infrastructure/remote/__init__.py +16 -0
  105. workflows/infrastructure/remote/ssh_client.py +590 -0
  106. workflows/infrastructure/remote/ssh_config.py +139 -0
  107. workflows/infrastructure/runtime_config.py +1599 -0
  108. workflows/infrastructure/ww3/__init__.py +12 -0
  109. workflows/infrastructure/ww3/grid_param_write.py +160 -0
  110. workflows/infrastructure/ww3/modify_ww3_nml.py +678 -0
  111. workflows/infrastructure/ww3/namelist_param_write.py +159 -0
  112. workflows/infrastructure/ww3/namelists_nml.py +298 -0
  113. workflows/infrastructure/ww3/nested_level_dirs.py +54 -0
  114. workflows/infrastructure/ww3/nml_log_format.py +63 -0
  115. workflows/infrastructure/ww3/nml_primitives.py +96 -0
  116. workflows/infrastructure/ww3/restart_checkpoints.py +262 -0
  117. workflows/infrastructure/ww3/server_sh.py +389 -0
  118. workflows/infrastructure/ww3/smc_forcing_bbox.py +125 -0
  119. workflows/infrastructure/ww3/smc_open_boundary.py +44 -0
  120. workflows/infrastructure/ww3/smc_ww3_version.py +158 -0
  121. workflows/infrastructure/ww3/step4_service.py +182 -0
  122. workflows/infrastructure/ww3/widget_stubs.py +199 -0
  123. workflows/infrastructure/ww3/ww3_grid_nml.py +1176 -0
  124. workflows/infrastructure/ww3/ww3_multi_nml.py +596 -0
  125. workflows/infrastructure/ww3/ww3_ounf_nml.py +175 -0
  126. workflows/infrastructure/ww3/ww3_ounp_nml.py +356 -0
  127. workflows/infrastructure/ww3/ww3_prnc_nml.py +909 -0
  128. workflows/infrastructure/ww3/ww3_shel_nml.py +957 -0
  129. workflows/infrastructure/ww3/ww3_trnc_nml.py +373 -0
  130. workflows/interfaces/__init__.py +15 -0
  131. workflows/interfaces/command_line.py +1211 -0
  132. workflows/interfaces/interactive_cli.py +1923 -0
  133. workflows/interfaces/workdir_setup.py +107 -0
  134. workflows/support/__init__.py +24 -0
  135. workflows/support/formatting.py +18 -0
  136. workflows/support/logging.py +69 -0
  137. workflows/support/process_worker.py +145 -0
  138. workflows/support/translations.py +118 -0
  139. ww3tool-0.1.1.dist-info/METADATA +245 -0
  140. ww3tool-0.1.1.dist-info/RECORD +870 -0
  141. ww3tool-0.1.1.dist-info/WHEEL +5 -0
  142. ww3tool-0.1.1.dist-info/entry_points.txt +2 -0
  143. ww3tool-0.1.1.dist-info/top_level.txt +4 -0
  144. ww3tool_resources/__init__.py +18 -0
  145. ww3tool_resources/meshgen/README.md +100 -0
  146. ww3tool_resources/meshgen/get_reference_data.py +442 -0
  147. ww3tool_resources/meshgen/smc_generator/README.md +152 -0
  148. ww3tool_resources/meshgen/smc_generator/SMCGTools/Bathys/Bathy044_033d.jpg +0 -0
  149. ww3tool_resources/meshgen/smc_generator/SMCGTools/Bathys/ECBuoys.dat +400 -0
  150. ww3tool_resources/meshgen/smc_generator/SMCGTools/Bathys/SPBuoys.dat +51 -0
  151. ww3tool_resources/meshgen/smc_generator/SMCGTools/Bathys/Subgrdline3.dat +45 -0
  152. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/PropHyb/Constants.f90 +198 -0
  153. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/PropHyb/Makefile +45 -0
  154. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/PropHyb/SMCPropWW3Hyb.f90 +1473 -0
  155. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/PropHyb/W3DispMD.f90 +439 -0
  156. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/PropHyb/W3MPInitMD.f90 +515 -0
  157. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/PropHyb/W3PSMCMD.f90 +1884 -0
  158. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/PropOMP/Constants.f90 +78 -0
  159. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/PropOMP/Makefile +46 -0
  160. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/PropOMP/Makefileifort +46 -0
  161. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/PropOMP/SMCGPropMP.f90 +1202 -0
  162. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/PropOMP/W3DispMD.f90 +439 -0
  163. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/PropOMP/W3PSMCMD.f90 +1463 -0
  164. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/SWESMCoMP/Makefile +45 -0
  165. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/SWESMCoMP/SWEsCnstMD.f90 +226 -0
  166. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/SWESMCoMP/SWEsDynaMD.f90 +2167 -0
  167. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/SWESMCoMP/SWEsInitMD.f90 +1264 -0
  168. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/SWESMCoMP/SWEsInput.txt +10 -0
  169. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/SWESMCoMP/SWEsnSMCPM.f90 +688 -0
  170. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/SWESMCoMP/runSWEsOMP +58 -0
  171. ww3tool_resources/meshgen/smc_generator/SMCGTools/F90SMC/constants.mod +0 -0
  172. ww3tool_resources/meshgen/smc_generator/SMCGTools/LICENSE +28 -0
  173. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/PropInput.txt +9 -0
  174. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/SWEsInput.txt +10 -0
  175. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/SideInputAMM153.txt +6 -0
  176. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/SideInputSMC1dR3.txt +5 -0
  177. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/SideInputSMC1dR3Arc.txt +5 -0
  178. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/SideMPInput.txt +5 -0
  179. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/SideMPInputArc.txt +5 -0
  180. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/convps2gif +32 -0
  181. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/convps2gif90r +37 -0
  182. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/countcell4lv +56 -0
  183. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/countcell6lv +54 -0
  184. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/countijsd4lv +77 -0
  185. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/countijsd6lv +82 -0
  186. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/removecell +34 -0
  187. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/runSMCGProp +48 -0
  188. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/runSMCSideMP +52 -0
  189. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/runSWEsOMP +56 -0
  190. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/runSub3CountCell +31 -0
  191. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/runSub3SideMP +49 -0
  192. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/trimtempcels +36 -0
  193. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/Casp6125Cels.d +1293 -0
  194. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/GtLk6125Cels.d +1545 -0
  195. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/awkAmazon +8 -0
  196. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/awkAustralia +7 -0
  197. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/awkCaspiaNo +7 -0
  198. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/awkCaspian +17 -0
  199. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/awkErieStCl +7 -0
  200. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/awkGtLakeNo +7 -0
  201. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/awkMeditern +10 -0
  202. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/awkMicHuron +11 -0
  203. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/awkSuperior +9 -0
  204. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/awkTurpBngl +7 -0
  205. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/zAmazon.png +0 -0
  206. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/zCaspian0.png +0 -0
  207. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/zCaspianS.png +0 -0
  208. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/zErieStCl.png +0 -0
  209. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/zMeditern.png +0 -0
  210. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/zMerged4Atn.png +0 -0
  211. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/zMerged4Pcf.png +0 -0
  212. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/zMerged4Sth.png +0 -0
  213. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/zMicHuron.png +0 -0
  214. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/zSuperior.png +0 -0
  215. ww3tool_resources/meshgen/smc_generator/SMCGTools/Linuxs/zTrimming/zTurpBngl.png +0 -0
  216. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/AMM153kmCells.py +121 -0
  217. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/AMM153kmGrids.py +224 -0
  218. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/AMM153kmProps.py +210 -0
  219. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/AMM153kmSWHts.py +174 -0
  220. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/AMM153kmWHDif.py +228 -0
  221. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/BathymetryView.py +79 -0
  222. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/ECBuoys.dat +400 -0
  223. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GridInfo125120.txt +6 -0
  224. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GridInfo125120Subs.txt +5 -0
  225. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GridInfo251020.txt +6 -0
  226. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GridInfo36125.txt +6 -0
  227. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GridInfo61250.txt +6 -0
  228. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GridInfo61250Subs.txt +5 -0
  229. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GridInfoAMM153.txt +7 -0
  230. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GridInfoGtLks.txt +6 -0
  231. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GridInfoMeditr.txt +6 -0
  232. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GridInfoRtdArc.txt +7 -0
  233. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GridInfoSMC1R3.txt +5 -0
  234. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GridInfoSWEs1d.txt +5 -0
  235. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/Gridinfo.dat +2 -0
  236. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/GtLks6125Grids.py +126 -0
  237. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/Lakes625Cells.py +116 -0
  238. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMC1R3W2dif.py +206 -0
  239. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMC1R3grids.py +273 -0
  240. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMC1R3wdpth.py +252 -0
  241. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMC61250Obstr.py +133 -0
  242. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMC61250Pro3S.py +179 -0
  243. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMC61250Rgul.txt +8 -0
  244. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMCGloblCell.py +114 -0
  245. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMCGloblGrid.py +337 -0
  246. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMCGloblProp.py +274 -0
  247. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMCGloblSWHt.py +250 -0
  248. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMCGridRInfo.py +58 -0
  249. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMCHfdinfo.dat +2 -0
  250. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMCRotatGrid.py +250 -0
  251. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SMCRotatSWHt.py +174 -0
  252. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SPBuoys.dat +51 -0
  253. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SWEs1dinfo.dat +2 -0
  254. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/Slatlons.dat +6 -0
  255. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/Sub61250Grid3.py +304 -0
  256. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/Sub61250SWHts.py +200 -0
  257. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/Sub61250Splt3.py +224 -0
  258. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/Sub61250bstr3.py +127 -0
  259. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SubGloblGrid.py +328 -0
  260. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/SubGloblSWHt.py +218 -0
  261. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/addtexts.py +26 -0
  262. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/awkGibrlt +8 -0
  263. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/colrboxy.py +79 -0
  264. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/colrpoly.py +70 -0
  265. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/configinterp.txt +9 -0
  266. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/configreduce.txt +8 -0
  267. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/eq2lldeg.py +102 -0
  268. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/latlon2ijs.py +121 -0
  269. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/ll2eqdeg.py +95 -0
  270. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/readcell.py +78 -0
  271. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/readftxt.py +71 -0
  272. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/readmerg.py +49 -0
  273. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/readtext.py +55 -0
  274. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/reduce_interp.py +530 -0
  275. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/regional_bounds.py +39 -0
  276. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/regulrinfo.py +96 -0
  277. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/rgbcolor.py +34 -0
  278. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/rgbspectrum.dat +257 -0
  279. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/scale_depth.py +26 -0
  280. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/scale_diff.py +38 -0
  281. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/scale_dsqrt.py +51 -0
  282. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/scale_liner.py +29 -0
  283. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/scale_logwh.py +36 -0
  284. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/scale_swh.py +26 -0
  285. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcellSWE.py +280 -0
  286. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcellbdy.py +346 -0
  287. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcellful.py +221 -0
  288. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcellgen.py +449 -0
  289. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcellmap.py +252 -0
  290. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcelsplit.py +262 -0
  291. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcelvrglr.py +115 -0
  292. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcelvrts.py +147 -0
  293. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcfield.py +112 -0
  294. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcfrglr.py +95 -0
  295. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcglobl.py +262 -0
  296. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcgrglr.py +149 -0
  297. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcgrids.py +172 -0
  298. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcliner.py +49 -0
  299. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smclocal.py +193 -0
  300. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcontour.py +95 -0
  301. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcswhcv.py +50 -0
  302. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcupalevel.py +69 -0
  303. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcviewdep.py +145 -0
  304. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/smcviewrap.py +137 -0
  305. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/steromap.py +89 -0
  306. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/strendat +1 -0
  307. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/swhglobl.py +196 -0
  308. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/swhlocal.py +151 -0
  309. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/whtdfsqr.py +69 -0
  310. ww3tool_resources/meshgen/smc_generator/SMCGTools/PySMCs/whtliner.py +52 -0
  311. ww3tool_resources/meshgen/smc_generator/SMCGTools/README.md +2 -0
  312. ww3tool_resources/meshgen/smc_generator/SMCGTools/SMCGTools_Guide.pdf +0 -0
  313. ww3tool_resources/meshgen/smc_generator/SMCGTools/output/SMC_ChinaSeaBdys.dat +842 -0
  314. ww3tool_resources/meshgen/smc_generator/SMCGTools/output/SMC_ChinaSeaRunInfo.json +14 -0
  315. ww3tool_resources/meshgen/smc_generator/create_grid.py +1136 -0
  316. ww3tool_resources/meshgen/smc_generator/grid.json +46 -0
  317. ww3tool_resources/meshgen/smc_generator/output/grid.json +61 -0
  318. ww3tool_resources/meshgen/smc_generator/output/grid_boundary.dat +7790 -0
  319. ww3tool_resources/meshgen/smc_generator/output/grid_cell.dat +8944 -0
  320. ww3tool_resources/meshgen/smc_generator/output/grid_iside.dat +11229 -0
  321. ww3tool_resources/meshgen/smc_generator/output/grid_jside.dat +11039 -0
  322. ww3tool_resources/meshgen/smc_generator/output/grid_subtr.dat +8944 -0
  323. ww3tool_resources/meshgen/smc_generator/smcgside.py +393 -0
  324. ww3tool_resources/meshgen/structured_generator/README.md +178 -0
  325. ww3tool_resources/meshgen/structured_generator/gridgen/LICENSE +674 -0
  326. ww3tool_resources/meshgen/structured_generator/gridgen/README.md +23 -0
  327. ww3tool_resources/meshgen/structured_generator/gridgen/bin/README +14 -0
  328. ww3tool_resources/meshgen/structured_generator/gridgen/bin/cart2ll_polarstereo.m +58 -0
  329. ww3tool_resources/meshgen/structured_generator/gridgen/bin/clean_mask.m +167 -0
  330. ww3tool_resources/meshgen/structured_generator/gridgen/bin/clear_BS_ATNE_new.m +31 -0
  331. ww3tool_resources/meshgen/structured_generator/gridgen/bin/clear_Caspian_Sea_glob.m +47 -0
  332. ww3tool_resources/meshgen/structured_generator/gridgen/bin/clear_Hudson_Bay.m +27 -0
  333. ww3tool_resources/meshgen/structured_generator/gridgen/bin/clear_glob_30m.m +43 -0
  334. ww3tool_resources/meshgen/structured_generator/gridgen/bin/compute_boundary.m +1043 -0
  335. ww3tool_resources/meshgen/structured_generator/gridgen/bin/compute_boundary_iro.m +861 -0
  336. ww3tool_resources/meshgen/structured_generator/gridgen/bin/compute_boundary_xyz.m +861 -0
  337. ww3tool_resources/meshgen/structured_generator/gridgen/bin/compute_cellcorner.m +250 -0
  338. ww3tool_resources/meshgen/structured_generator/gridgen/bin/create_boundary.m +437 -0
  339. ww3tool_resources/meshgen/structured_generator/gridgen/bin/create_boundary_7M.m +411 -0
  340. ww3tool_resources/meshgen/structured_generator/gridgen/bin/create_boundary_SWPAC.m +410 -0
  341. ww3tool_resources/meshgen/structured_generator/gridgen/bin/create_grid.m +609 -0
  342. ww3tool_resources/meshgen/structured_generator/gridgen/bin/create_grid_curv.m +194 -0
  343. ww3tool_resources/meshgen/structured_generator/gridgen/bin/create_namelist.m +116 -0
  344. ww3tool_resources/meshgen/structured_generator/gridgen/bin/create_obstr.m +1032 -0
  345. ww3tool_resources/meshgen/structured_generator/gridgen/bin/emodnet_to_XYZ.f90 +147 -0
  346. ww3tool_resources/meshgen/structured_generator/gridgen/bin/gebco_to_XYZ.f90 +134 -0
  347. ww3tool_resources/meshgen/structured_generator/gridgen/bin/generate_grid.m +441 -0
  348. ww3tool_resources/meshgen/structured_generator/gridgen/bin/generate_grid_xyz.m +305 -0
  349. ww3tool_resources/meshgen/structured_generator/gridgen/bin/ispolyselfintersect.m +42 -0
  350. ww3tool_resources/meshgen/structured_generator/gridgen/bin/license_namelist.txt +24 -0
  351. ww3tool_resources/meshgen/structured_generator/gridgen/bin/load_grd_emodnet.m +296 -0
  352. ww3tool_resources/meshgen/structured_generator/gridgen/bin/make_bounc.sh +84 -0
  353. ww3tool_resources/meshgen/structured_generator/gridgen/bin/modify_mask.m +195 -0
  354. ww3tool_resources/meshgen/structured_generator/gridgen/bin/mypcolor.m +20 -0
  355. ww3tool_resources/meshgen/structured_generator/gridgen/bin/optional_bound.m +61 -0
  356. ww3tool_resources/meshgen/structured_generator/gridgen/bin/overlaps.m +72 -0
  357. ww3tool_resources/meshgen/structured_generator/gridgen/bin/plot_bot_mask_obst.m +124 -0
  358. ww3tool_resources/meshgen/structured_generator/gridgen/bin/read_bot.m +12 -0
  359. ww3tool_resources/meshgen/structured_generator/gridgen/bin/read_mask.m +40 -0
  360. ww3tool_resources/meshgen/structured_generator/gridgen/bin/read_namelist.m +234 -0
  361. ww3tool_resources/meshgen/structured_generator/gridgen/bin/read_obstr.m +44 -0
  362. ww3tool_resources/meshgen/structured_generator/gridgen/bin/read_ww3meta.m +113 -0
  363. ww3tool_resources/meshgen/structured_generator/gridgen/bin/readme_namelist.m +74 -0
  364. ww3tool_resources/meshgen/structured_generator/gridgen/bin/reconcile_masks.m +103 -0
  365. ww3tool_resources/meshgen/structured_generator/gridgen/bin/remove_lake.m +249 -0
  366. ww3tool_resources/meshgen/structured_generator/gridgen/bin/specific_case/create_grid_Alaska_reg.m +275 -0
  367. ww3tool_resources/meshgen/structured_generator/gridgen/bin/specific_case/create_grid_iro_1k.m +289 -0
  368. ww3tool_resources/meshgen/structured_generator/gridgen/bin/specific_case/maskmod_Alaska_reg.m +88 -0
  369. ww3tool_resources/meshgen/structured_generator/gridgen/bin/split_boundary.m +113 -0
  370. ww3tool_resources/meshgen/structured_generator/gridgen/bin/split_boundary_iro.m +93 -0
  371. ww3tool_resources/meshgen/structured_generator/gridgen/bin/split_boundary_xyz.m +93 -0
  372. ww3tool_resources/meshgen/structured_generator/gridgen/bin/split_dateline.m +51 -0
  373. ww3tool_resources/meshgen/structured_generator/gridgen/bin/split_dateline_360.m +46 -0
  374. ww3tool_resources/meshgen/structured_generator/gridgen/bin/stereographic_lon_lat.m +48 -0
  375. ww3tool_resources/meshgen/structured_generator/gridgen/bin/write_fortran_namelist.m +58 -0
  376. ww3tool_resources/meshgen/structured_generator/gridgen/bin/write_namelist_arr.m +52 -0
  377. ww3tool_resources/meshgen/structured_generator/gridgen/bin/write_namelist_boo.m +29 -0
  378. ww3tool_resources/meshgen/structured_generator/gridgen/bin/write_namelist_flt.m +28 -0
  379. ww3tool_resources/meshgen/structured_generator/gridgen/bin/write_namelist_int.m +28 -0
  380. ww3tool_resources/meshgen/structured_generator/gridgen/bin/write_namelist_str.m +28 -0
  381. ww3tool_resources/meshgen/structured_generator/gridgen/bin/write_namelist_vec.m +119 -0
  382. ww3tool_resources/meshgen/structured_generator/gridgen/bin/write_ww3file.m +47 -0
  383. ww3tool_resources/meshgen/structured_generator/gridgen/bin/write_ww3meta.m +230 -0
  384. ww3tool_resources/meshgen/structured_generator/gridgen/bin/write_ww3obstr.m +53 -0
  385. ww3tool_resources/meshgen/structured_generator/gridgen/create_grid.m +59 -0
  386. ww3tool_resources/meshgen/structured_generator/gridgen/grid.nml +236 -0
  387. ww3tool_resources/meshgen/structured_generator/gridgen/namelist/gridgen.ARC-12KM.nml +235 -0
  388. ww3tool_resources/meshgen/structured_generator/gridgen/namelist/gridgen.BENG-3M.nml +235 -0
  389. ww3tool_resources/meshgen/structured_generator/gridgen/namelist/gridgen.BISCAY-10M.nml +235 -0
  390. ww3tool_resources/meshgen/structured_generator/gridgen/namelist/gridgen.GLOB-20KM.nml +236 -0
  391. ww3tool_resources/meshgen/structured_generator/gridgen/namelist/gridgen.GLOB-30M.nml +235 -0
  392. ww3tool_resources/meshgen/structured_generator/gridgen/namelist/gridgen.GLOB-60M.nml +235 -0
  393. ww3tool_resources/meshgen/structured_generator/gridgen/namelist/gridgen.IROISE-1M.nml +235 -0
  394. ww3tool_resources/meshgen/structured_generator/gridgen/namelist/gridgen.NATL-1D.nml +235 -0
  395. ww3tool_resources/meshgen/structured_generator/gridgen/namelist/gridgen.NATL-60M.nml +235 -0
  396. ww3tool_resources/meshgen/structured_generator/gridgen/namelist/gridgen.NC-3M.nml +235 -0
  397. ww3tool_resources/meshgen/structured_generator/gridgen/namelist/gridgen.NORWAY-3M.nml +235 -0
  398. ww3tool_resources/meshgen/structured_generator/gridgen/namelist/gridgen.ZA-7M.nml +235 -0
  399. ww3tool_resources/meshgen/structured_generator/gridgen/python/compare_bot_glob_30m.py +51 -0
  400. ww3tool_resources/meshgen/structured_generator/gridgen/python/compare_mask_glob_30m.py +152 -0
  401. ww3tool_resources/meshgen/structured_generator/gridgen/python/gridgen_curvilinear_latlon.ipynb +304 -0
  402. ww3tool_resources/meshgen/structured_generator/gridgen/python/gridgen_viewer.ipynb +723 -0
  403. ww3tool_resources/meshgen/structured_generator/gridgen/python/read_bot.py +31 -0
  404. ww3tool_resources/meshgen/structured_generator/gridgen/python/read_mask.py +30 -0
  405. ww3tool_resources/meshgen/structured_generator/gridgen/python/read_slope.py +108 -0
  406. ww3tool_resources/meshgen/structured_generator/gridgen/reference/alaska_10minzone.ascii +73 -0
  407. ww3tool_resources/meshgen/structured_generator/gridgen/reference/nc_ww3_grdwrite.m +186 -0
  408. ww3tool_resources/meshgen/structured_generator/gridgen/reference/stereo_readme +24 -0
  409. ww3tool_resources/meshgen/structured_generator/gridgen/reference/user_polygons.flag +50 -0
  410. ww3tool_resources/meshgen/structured_generator/gridgen/reference/xyz_iro_1k.log +4 -0
  411. ww3tool_resources/meshgen/structured_generator/pygridgen/__init__.py +14 -0
  412. ww3tool_resources/meshgen/structured_generator/pygridgen/create_grid.py +969 -0
  413. ww3tool_resources/meshgen/structured_generator/pygridgen/grid/__init__.py +13 -0
  414. ww3tool_resources/meshgen/structured_generator/pygridgen/grid/clean_mask.py +126 -0
  415. ww3tool_resources/meshgen/structured_generator/pygridgen/grid/compute_boundary.py +887 -0
  416. ww3tool_resources/meshgen/structured_generator/pygridgen/grid/create_obstr.py +1015 -0
  417. ww3tool_resources/meshgen/structured_generator/pygridgen/grid/generate_grid.py +501 -0
  418. ww3tool_resources/meshgen/structured_generator/pygridgen/grid/remove_lake.py +206 -0
  419. ww3tool_resources/meshgen/structured_generator/pygridgen/grid/split_boundary.py +140 -0
  420. ww3tool_resources/meshgen/structured_generator/pygridgen/grid.nml +239 -0
  421. ww3tool_resources/meshgen/structured_generator/pygridgen/io/__init__.py +12 -0
  422. ww3tool_resources/meshgen/structured_generator/pygridgen/io/optional_bound.py +112 -0
  423. ww3tool_resources/meshgen/structured_generator/pygridgen/io/read_namelist.py +125 -0
  424. ww3tool_resources/meshgen/structured_generator/pygridgen/io/write_ww3file.py +57 -0
  425. ww3tool_resources/meshgen/structured_generator/pygridgen/io/write_ww3meta.py +262 -0
  426. ww3tool_resources/meshgen/structured_generator/pygridgen/io/write_ww3obstr.py +62 -0
  427. ww3tool_resources/meshgen/structured_generator/pygridgen/utils/__init__.py +8 -0
  428. ww3tool_resources/meshgen/structured_generator/pygridgen/utils/compute_cellcorner.py +277 -0
  429. ww3tool_resources/meshgen/structured_generator/pygridgen/utils/create_custom_grid.py +245 -0
  430. ww3tool_resources/meshgen/structured_generator/pygridgen/utils/parallel.py +149 -0
  431. ww3tool_resources/meshgen/unstructured_generator/README.md +281 -0
  432. ww3tool_resources/meshgen/unstructured_generator/create_grid.py +1657 -0
  433. ww3tool_resources/meshgen/unstructured_generator/grid.json +58 -0
  434. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/LICENSE.md +12 -0
  435. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/MANIFEST.in +9 -0
  436. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/README.md +90 -0
  437. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/build.py +183 -0
  438. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/example.py +71 -0
  439. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/CMakeLists.txt +4 -0
  440. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/LICENSE.md +12 -0
  441. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/README.md +102 -0
  442. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/bin/marche +0 -0
  443. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/bin/tripod +0 -0
  444. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/example.jig +452 -0
  445. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/geo/airfoil.jig +26 -0
  446. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/geo/airfoil.msh +957 -0
  447. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/geo/bunny.jig +24 -0
  448. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/geo/bunny.msh +32033 -0
  449. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/geo/earth.jig +25 -0
  450. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/geo/earth.msh +16634 -0
  451. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/geo/lakes.jig +26 -0
  452. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/geo/lakes.msh +611 -0
  453. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/geo/parts.jig +26 -0
  454. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/geo/parts.msh +4181 -0
  455. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/img/bunny-TRIA3-1.png +0 -0
  456. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/img/bunny-TRIA3-2.png +0 -0
  457. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/img/bunny-TRIA3-3.png +0 -0
  458. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/img/bunny-TRIA4-3.png +0 -0
  459. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/inc/jigsaw_const.h +109 -0
  460. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/inc/jigsaw_jig_t.h +542 -0
  461. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/inc/jigsaw_msh_t.h +258 -0
  462. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/inc/lib_jigsaw.h +348 -0
  463. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/CMakeLists.txt +201 -0
  464. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/geo_load.hpp +1404 -0
  465. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/hfn_init.hpp +289 -0
  466. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/hfn_load.hpp +2517 -0
  467. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/hfn_save.inc +1064 -0
  468. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/ini_load.hpp +1357 -0
  469. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/jig_load.hpp +1188 -0
  470. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/jig_read.hpp +738 -0
  471. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/jigsaw.cpp +933 -0
  472. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/jigsaw.hpp +2109 -0
  473. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/aabb_tree/aabb_mesh_k.hpp +205 -0
  474. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/aabb_tree/aabb_pred_k.hpp +815 -0
  475. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/aabb_tree/aabb_tree_k.hpp +1177 -0
  476. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/aabb_tree/aabb_type_k.hpp +218 -0
  477. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/aabbtree.hpp +65 -0
  478. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/algorithms/find.hpp +183 -0
  479. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/algorithms/sort.hpp +583 -0
  480. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/algorithms.hpp +62 -0
  481. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/allocators/alloc_base.hpp +157 -0
  482. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/allocators/alloc_item.hpp +587 -0
  483. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/allocators/alloc_pool.hpp +416 -0
  484. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/allocators/alloc_wrap.hpp +197 -0
  485. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/allocators.hpp +65 -0
  486. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/basebase.hpp +157 -0
  487. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/array.hpp +821 -0
  488. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/array_iter.hpp +422 -0
  489. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/arraylist.hpp +509 -0
  490. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/basic_stack.hpp +514 -0
  491. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/block_array.hpp +862 -0
  492. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/block_iter.hpp +441 -0
  493. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/double_list.hpp +1032 -0
  494. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/doubleiter.hpp +383 -0
  495. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/fixed_array.hpp +297 -0
  496. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/hashtable.hpp +579 -0
  497. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/hashtwice.hpp +777 -0
  498. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/iter_base.hpp +185 -0
  499. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/priorityidx.hpp +737 -0
  500. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/prioritymap.hpp +718 -0
  501. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/priorityset.hpp +465 -0
  502. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/single_list.hpp +810 -0
  503. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers/singleiter.hpp +354 -0
  504. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/containers.hpp +85 -0
  505. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/expansion/dd_float.hpp +554 -0
  506. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/expansion/ia_float.hpp +675 -0
  507. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/expansion/mp_basic.hpp +664 -0
  508. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/expansion/mp_float.hpp +1026 -0
  509. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/expansion/mp_utils.hpp +609 -0
  510. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/geom_base/cell_ball_k.hpp +1468 -0
  511. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/geom_base/cell_base_k.hpp +805 -0
  512. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/geom_base/intersect_k.hpp +2481 -0
  513. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/geom_base/vect_base_k.hpp +391 -0
  514. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/geom_reps/geom_base_2.hpp +255 -0
  515. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/geom_reps/geom_base_3.hpp +314 -0
  516. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/geom_reps/geom_mesh_ellipsoid_3.hpp +2301 -0
  517. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/geom_reps/geom_mesh_euclidean_2.hpp +1894 -0
  518. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/geom_reps/geom_mesh_euclidean_3.hpp +2964 -0
  519. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/geometry.hpp +70 -0
  520. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/geompred.hpp +63 -0
  521. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/geomreps.hpp +82 -0
  522. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/hashfunc.hpp +783 -0
  523. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/interpolate/hfun_base_k.hpp +107 -0
  524. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/interpolate/hfun_clip_k.hpp +1350 -0
  525. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/interpolate/hfun_constant_value_k.hpp +113 -0
  526. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/interpolate/hfun_grid_ellipsoid_3.hpp +940 -0
  527. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/interpolate/hfun_grid_euclidean_2.hpp +623 -0
  528. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/interpolate/hfun_grid_euclidean_3.hpp +859 -0
  529. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/interpolate/hfun_mesh_ellipsoid_3.hpp +834 -0
  530. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/interpolate/hfun_mesh_euclidean_2.hpp +770 -0
  531. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/interpolate/hfun_mesh_euclidean_3.hpp +819 -0
  532. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/interpolate.hpp +81 -0
  533. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/_bfs_mesh_2.inc +283 -0
  534. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/_zip_mesh_2.inc +655 -0
  535. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/cost_mesh_2.inc +291 -0
  536. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/flip_mesh_2.inc +523 -0
  537. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_divs_2.inc +461 -0
  538. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_divs_3.inc +57 -0
  539. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_dual_2.inc +391 -0
  540. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_dual_3.inc +51 -0
  541. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_flip_2.inc +454 -0
  542. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_flip_3.inc +298 -0
  543. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_mesh_2.hpp +878 -0
  544. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_mesh_3.hpp +67 -0
  545. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_mesh_euclidean_2.hpp +256 -0
  546. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_mesh_euclidean_3.hpp +381 -0
  547. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_node_1.inc +191 -0
  548. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_node_2.inc +1260 -0
  549. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_node_3.inc +51 -0
  550. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_pred_ellipsoid_3.hpp +344 -0
  551. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_pred_euclidean_2.hpp +298 -0
  552. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_timers.hpp +151 -0
  553. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_zips_2.inc +1036 -0
  554. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/iter_zips_3.inc +52 -0
  555. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/move_mesh_2.inc +1459 -0
  556. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/part_mesh_2.inc +395 -0
  557. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/iter_mesh/sort_mesh_2.inc +367 -0
  558. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/itermesh.hpp +78 -0
  559. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/mathutil.hpp +320 -0
  560. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/mesh_reps/base_complex_k.hpp +3293 -0
  561. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/mesh_reps/hash_complex_k.hpp +770 -0
  562. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/mesh_reps/mesh_complex_1.hpp +432 -0
  563. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/mesh_reps/mesh_complex_2.hpp +693 -0
  564. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/mesh_reps/mesh_complex_3.hpp +1003 -0
  565. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/mesh_reps/mesh_complex_type_k.hpp +1443 -0
  566. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/mesh_reps/tria_complex_1.hpp +432 -0
  567. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/mesh_reps/tria_complex_2.hpp +582 -0
  568. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/mesh_reps/tria_complex_3.hpp +730 -0
  569. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/meshreps.hpp +95 -0
  570. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/mpfloats.hpp +76 -0
  571. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/parameters/iter_params.hpp +262 -0
  572. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/parameters/mesh_params.hpp +498 -0
  573. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/predicate/bisect_k.hpp +970 -0
  574. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/predicate/inball_k.hpp +2585 -0
  575. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/predicate/orient_k.hpp +852 -0
  576. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/predicate/predicate_k.hpp +830 -0
  577. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_base_2.hpp +598 -0
  578. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_base_3.hpp +1085 -0
  579. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_complex_2.hpp +538 -0
  580. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_complex_3.hpp +633 -0
  581. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_cost_delaunay_2.inc +340 -0
  582. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_cost_delaunay_3.inc +606 -0
  583. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_cost_delfront_2.inc +349 -0
  584. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_cost_delfront_3.inc +637 -0
  585. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_create_init_2.inc +527 -0
  586. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_create_init_3.inc +735 -0
  587. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_filt_k.hpp +1026 -0
  588. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_make_2.hpp +976 -0
  589. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_make_3.hpp +1188 -0
  590. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_mesh_2.hpp +1473 -0
  591. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_mesh_3.hpp +1924 -0
  592. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_offh_delfront_2.inc +416 -0
  593. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_offh_delfront_3.inc +648 -0
  594. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_pred_delaunay_2.hpp +273 -0
  595. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_pred_delaunay_3.hpp +343 -0
  596. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_pred_delfront_2.hpp +650 -0
  597. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_pred_delfront_3.hpp +1111 -0
  598. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_refine_ball_2.inc +509 -0
  599. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_refine_ball_3.inc +588 -0
  600. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_refine_base_2.inc +317 -0
  601. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_refine_base_3.inc +341 -0
  602. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_refine_face_2.inc +351 -0
  603. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_refine_face_3.inc +544 -0
  604. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_refine_topo_2.inc +516 -0
  605. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_refine_topo_3.inc +1225 -0
  606. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_sink_delfront_2.inc +232 -0
  607. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_sink_delfront_3.inc +458 -0
  608. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_test_bounds_2.inc +381 -0
  609. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_test_bounds_3.inc +619 -0
  610. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_timers.hpp +138 -0
  611. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_update_face_2.inc +550 -0
  612. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_update_face_3.inc +758 -0
  613. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_update_topo_2.inc +213 -0
  614. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdel_mesh/rdel_update_topo_3.inc +392 -0
  615. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/rdelmesh.hpp +109 -0
  616. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/delaunay_scan_tria.inc +115 -0
  617. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/delaunay_star_void.inc +213 -0
  618. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/delaunay_tri_k.hpp +1008 -0
  619. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/delaunay_tri_pred_2.hpp +303 -0
  620. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/delaunay_tri_pred_3.hpp +329 -0
  621. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/delaunay_tri_pred_4.hpp +367 -0
  622. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/delaunay_tri_type_2.hpp +390 -0
  623. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/delaunay_tri_type_3.hpp +524 -0
  624. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/delaunay_tri_type_4.hpp +537 -0
  625. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/delaunay_walk_mesh.inc +271 -0
  626. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/laguerre_tri_pred_2.hpp +307 -0
  627. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/laguerre_tri_pred_3.hpp +334 -0
  628. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate/laguerre_tri_pred_4.hpp +367 -0
  629. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/tessellate.hpp +76 -0
  630. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/textutil.hpp +253 -0
  631. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/libcpp/useropts.hpp +59 -0
  632. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/liblib/init_jig_t.hpp +174 -0
  633. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/liblib/init_msh_t.hpp +685 -0
  634. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/liblib/load_jig_t.hpp +448 -0
  635. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/liblib/load_msh_t.hpp +672 -0
  636. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/liblib/save_jig_t.hpp +269 -0
  637. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/liblib/save_msh_t.hpp +82 -0
  638. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/marche.hpp +540 -0
  639. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/msh_copy.hpp +536 -0
  640. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/msh_init.hpp +355 -0
  641. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/msh_read.hpp +1463 -0
  642. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/msh_save.hpp +111 -0
  643. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/msh_save.inc +1622 -0
  644. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/netcdf/COPYRIGHT.md +11 -0
  645. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/netcdf/README.md +81 -0
  646. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/netcdf/ncutil.h +517 -0
  647. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/netcdf/netcdf.h +2001 -0
  648. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/offset.hpp +267 -0
  649. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/rdt_save.inc +1418 -0
  650. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/tri_save.inc +1032 -0
  651. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/src/tripod.hpp +946 -0
  652. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/CMakeLists.txt +152 -0
  653. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/README.md +21 -0
  654. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/print.h +149 -0
  655. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2d_a.c +108 -0
  656. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2d_b.c +161 -0
  657. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2d_c.c +172 -0
  658. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2d_d.c +137 -0
  659. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2d_e.c +136 -0
  660. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2d_f.c +129 -0
  661. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2d_g.c +81 -0
  662. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2d_h.c +118 -0
  663. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2d_i.c +121 -0
  664. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2s_a.c +76 -0
  665. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2s_b.c +135 -0
  666. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2s_c.c +128 -0
  667. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2s_e.c +110 -0
  668. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2s_f.c +112 -0
  669. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2s_g.c +104 -0
  670. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2s_h.c +108 -0
  671. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test2s_i.c +117 -0
  672. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test3d_a.c +105 -0
  673. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test3d_b.c +144 -0
  674. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test3d_c.c +161 -0
  675. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test3d_d.c +176 -0
  676. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test3d_e.c +131 -0
  677. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test3d_f.c +123 -0
  678. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test3d_g.c +81 -0
  679. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test3d_h.c +109 -0
  680. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test3d_i.c +116 -0
  681. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/uni/test_all.c +108 -0
  682. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/external/jigsaw/version.txt +255 -0
  683. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/files/airfoil.msh +957 -0
  684. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/files/bunny.msh +32033 -0
  685. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/files/eight.msh +38607 -0
  686. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/files/lakes.msh +611 -0
  687. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/files/piece.msh +1020 -0
  688. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/files/wheel.msh +17734 -0
  689. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/__init__.py +153 -0
  690. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/_bin/marche +0 -0
  691. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/_bin/tripod +0 -0
  692. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/bisect.py +775 -0
  693. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/certify.py +296 -0
  694. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/def_t.py +61 -0
  695. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/jig_l.py +316 -0
  696. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/jig_t.py +352 -0
  697. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/jigsaw.py +633 -0
  698. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/libsaw.py +863 -0
  699. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/loadjig.py +185 -0
  700. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/loadmsh.py +650 -0
  701. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/loadprj.py +58 -0
  702. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/msh_l.py +293 -0
  703. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/msh_t.py +260 -0
  704. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/parse/__init__.py +0 -0
  705. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/parse/loadgeo.py +184 -0
  706. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/parse/saveoff.py +192 -0
  707. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/parse/savevtk.py +394 -0
  708. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/parse/savewav.py +160 -0
  709. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/prj_t.py +11 -0
  710. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/project.py +250 -0
  711. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/savejig.py +225 -0
  712. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/savemsh.py +654 -0
  713. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/saveprj.py +99 -0
  714. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/tools/__init__.py +0 -0
  715. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/tools/mathutils.py +136 -0
  716. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/tools/meshutils.py +162 -0
  717. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/tools/orthoball.py +412 -0
  718. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/tools/predicate.py +354 -0
  719. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/tools/projector.py +156 -0
  720. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/jigsawpy/tools/scorecard.py +684 -0
  721. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/pyproject.toml +36 -0
  722. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/requirements.txt +2 -0
  723. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/setup.cfg +4 -0
  724. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/setup.py +80 -0
  725. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/tests/__init__.py +0 -0
  726. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/tests/case_0_.py +247 -0
  727. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/tests/case_1_.py +182 -0
  728. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/tests/case_2_.py +71 -0
  729. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/tests/case_3_.py +82 -0
  730. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/tests/case_4_.py +65 -0
  731. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/tests/case_5_.py +106 -0
  732. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/tests/case_6_.py +73 -0
  733. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/tests/case_7_.py +51 -0
  734. ww3tool_resources/meshgen/unstructured_generator/jigsaw-python/tests/case_8_.py +47 -0
  735. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/README.md +96 -0
  736. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/ShiftMesh.py +47 -0
  737. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/config.ini +56 -0
  738. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/mesh_workspace/geom.msh +3 -0
  739. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/mesh_workspace/geom_regional.msh +511 -0
  740. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/mesh_workspace/grid.msh +3 -0
  741. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/mesh_workspace/opts.jig +9 -0
  742. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/mesh_workspace/opts.log +97 -0
  743. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/mesh_workspace/opts_regional.jig +7 -0
  744. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/mesh_workspace/opts_regional.log +54 -0
  745. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/ocn_ww3.py +572 -0
  746. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/plot_msh.py +227 -0
  747. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/InterpolateBathymetry/AddBathyToMesh.py +37 -0
  748. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/InterpolateBathymetry/DivideMeshNodes.py +141 -0
  749. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/InterpolateBathymetry/DowloadBathyData.sh +103 -0
  750. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/InterpolateBathymetry/FiniteElementMeshRoutines.py +228 -0
  751. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/InterpolateBathymetry/GaussMarkov.py +134 -0
  752. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/InterpolateBathymetry/InterpolateCRM.partscat.py +371 -0
  753. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/InterpolateBathymetry/KnitOutputBackTogether.py +41 -0
  754. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/InterpolateBathymetry/MakeCommonNetCDFFileFormat.py +437 -0
  755. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/InterpolateBathymetry/README.txt +48 -0
  756. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/InterpolateBathymetry/SmoothSubsampleCMEMS.py +116 -0
  757. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/InterpolateBathymetry/SmoothSubsampleNetCDFFiles.py +135 -0
  758. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/InterpolateBathymetry/meshes/HawaiiTest.msh +1689 -0
  759. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/BuildBoundaryPSLGwGSHHS.m +354 -0
  760. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/BuildBoundaryPSLGwOSM.m +351 -0
  761. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/DownloadShapeFiles.sh +53 -0
  762. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/ExtraPointsOfIntrest.m +117 -0
  763. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/FilterRoutinesNM.py +427 -0
  764. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/LonCon.m +20 -0
  765. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/MakeCoastalBoundariesGSHHS.m +180 -0
  766. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/MakeCoastalBoundariesOSM.m +183 -0
  767. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/MakeDfunGSHHS.m +312 -0
  768. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/MakeDistanceToCoastRWPS.m +219 -0
  769. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/MakeFiguresNWCoastal.m +9 -0
  770. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/MergePslgsOSMxGSHHS.m +65 -0
  771. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/MergePslgsOSMxGSHHS_14N230W.m +77 -0
  772. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/MeshGenScript.NWcoastal.py +248 -0
  773. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/PostProcessGrid_GSHHS.m +275 -0
  774. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/PostProcessGrid_GSHHSxOSM_NewOrleans.m +266 -0
  775. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/PostProcessGrid_NWcoastal.m +151 -0
  776. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/PreProcessCoastline_GSHHS.m +15 -0
  777. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/PreProcessCoastline_NWCoastalMesh.m +19 -0
  778. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/PreProcessCoastline_RWPS_GSHHSxOSM_NewOrleans.m +21 -0
  779. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/RWPSMeshGenScript.GSHHS.py +247 -0
  780. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/RWPSMeshGenScript.GSHHSxOSM.NewOrleans.py +245 -0
  781. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/SetPath.m +97 -0
  782. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/jobcard.matlab.postjigsaw +19 -0
  783. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/jobcard.matlab.prejigsaw +19 -0
  784. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/MeshGenDirectory/jobcard.python.jigsaw +20 -0
  785. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/README.txt +10 -0
  786. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/BoundaryShape2msh.m +57 -0
  787. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/BoundingBox.m +15 -0
  788. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/BoxSmoothTopo.m +51 -0
  789. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/BuildBoundaryPSLGfunction.m +424 -0
  790. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/CombineMesh.m +20 -0
  791. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/ComputeAdjacency.m +8 -0
  792. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/ComputeLengthScale_wgs84.m +32 -0
  793. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/ComputeLengthScale_wgs84_MEL.m +31 -0
  794. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/DistanceToCoast.m +58 -0
  795. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/Ele2Nodes.m +25 -0
  796. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/EleArea.m +22 -0
  797. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/FindOuterBndNoPSLG.m +45 -0
  798. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/FindOuterBndWW3.m +47 -0
  799. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/FindPointsAx.m +14 -0
  800. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/GetMatlabLibs.sh +8 -0
  801. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/HandEditMesh.m +57 -0
  802. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/InterpCoastline.m +40 -0
  803. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/MakeDistanceToCoastData.m +128 -0
  804. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/MergePslgsOSMxGSSHS.m +63 -0
  805. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/RemoveMeshParts.m +90 -0
  806. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/RemoveMissingIslands.m +94 -0
  807. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/RemoveMissingIslandsEle.m +120 -0
  808. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/RemoveMissingIslandsPoint.m +91 -0
  809. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/RemoveSandPoints.m +81 -0
  810. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/RemoveSandPointsWW3.m +73 -0
  811. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/SmoothCoastalBoundaries.m +181 -0
  812. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/SmoothSubSampleCoastlineFast.m +28 -0
  813. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/WriteWW3Mesh.m +81 -0
  814. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/WriteWW3MeshX.m +77 -0
  815. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/detbndy.m +99 -0
  816. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/edges2chains.m +87 -0
  817. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/edges2chainsG.m +18 -0
  818. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/graphics/PlotJigsawGriddedData.m +51 -0
  819. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/graphics/PlotJigsawPSLG.m +40 -0
  820. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/graphics/PlotJigsawUnstMesh.m +76 -0
  821. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/graphics/PlotWW3Mesh.m +77 -0
  822. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/insidepoly.m +15 -0
  823. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/joinpslg.m +74 -0
  824. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/kprint.m +7 -0
  825. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/l.m +8 -0
  826. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/loadmshWW3.m +166 -0
  827. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/patch_global.m +10 -0
  828. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/pslg2geom.m +17 -0
  829. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/remove_dead_nodes.m +29 -0
  830. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/submeshFast.m +32 -0
  831. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/submeshFastEle.m +25 -0
  832. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/subpslgFast.m +35 -0
  833. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/matlab/topo2msh.m +32 -0
  834. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/python/ComputeDistanceToCoast/ComputeDistanceToCoast.py +143 -0
  835. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/python/ComputeDistanceToCoast/ComputeDistanceToCoastConv.py +176 -0
  836. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/python/ComputeDistanceToCoast/FindUSadjacentGSHHSpoints.py +99 -0
  837. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/python/ComputeDistanceToCoast/ReadWriteCoast.py +63 -0
  838. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/python/ComputeDistanceToCoast/SmoothAndInterpCoastline.py +17 -0
  839. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/python/ComputeDistanceToCoast/SmoothAndSubsampleCoastline.py +278 -0
  840. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/regional/python/ComputeDistanceToCoast/SmoothAndSubsampleCoastlineP.py +94 -0
  841. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/spacing.py +188 -0
  842. ww3tool_resources/meshgen/unstructured_generator/unst_msh_gen/window_mask.py +123 -0
  843. ww3tool_resources/params.yml +392 -0
  844. ww3tool_resources/public/6.07_nml/namelists.nml +616 -0
  845. ww3tool_resources/public/6.07_nml/ww3_grid.nml +1390 -0
  846. ww3tool_resources/public/6.07_nml/ww3_multi.nml +347 -0
  847. ww3tool_resources/public/6.07_nml/ww3_ounf.nml +157 -0
  848. ww3tool_resources/public/6.07_nml/ww3_ounp.nml +317 -0
  849. ww3tool_resources/public/6.07_nml/ww3_prnc.nml +151 -0
  850. ww3tool_resources/public/6.07_nml/ww3_shel.nml +629 -0
  851. ww3tool_resources/public/6.07_nml/ww3_strt.inp +100 -0
  852. ww3tool_resources/public/6.07_nml/ww3_trnc.nml +63 -0
  853. ww3tool_resources/public/7.14_nml/namelists.nml +1054 -0
  854. ww3tool_resources/public/7.14_nml/ww3_grid.nml +1390 -0
  855. ww3tool_resources/public/7.14_nml/ww3_multi.nml +345 -0
  856. ww3tool_resources/public/7.14_nml/ww3_ounf.nml +159 -0
  857. ww3tool_resources/public/7.14_nml/ww3_ounp.nml +374 -0
  858. ww3tool_resources/public/7.14_nml/ww3_prnc.nml +153 -0
  859. ww3tool_resources/public/7.14_nml/ww3_shel.nml +692 -0
  860. ww3tool_resources/public/7.14_nml/ww3_strt.inp +100 -0
  861. ww3tool_resources/public/7.14_nml/ww3_trnc.nml +63 -0
  862. ww3tool_resources/public/globe_picker/globe_picker.html +2274 -0
  863. ww3tool_resources/public/globe_picker/polar_tile_map.js +246 -0
  864. ww3tool_resources/public/languages/en_US.json +2680 -0
  865. ww3tool_resources/public/languages/zh_CN.json +2679 -0
  866. ww3tool_resources/public/resource/logo.png +0 -0
  867. ww3tool_resources/public/scripts/local.sh +541 -0
  868. ww3tool_resources/public/scripts/server.sh +651 -0
  869. ww3tool_resources/public/scripts/ww3_ntfy_watch.sh +514 -0
  870. ww3tool_resources/src/requirements.txt +17 -0
desktop/__init__.py ADDED
@@ -0,0 +1,29 @@
1
+ """Desktop application and view-model adapters for the src architecture."""
2
+
3
+ __all__ = [
4
+ "ForcingStepViewModel",
5
+ "PipelineViewModel",
6
+ "PreprocessingWindow",
7
+ "create_window",
8
+ "main",
9
+ ]
10
+
11
+
12
+ def __getattr__(name):
13
+ if name == "ForcingStepViewModel":
14
+ from .view_models.forcing_step import ForcingStepViewModel
15
+
16
+ return ForcingStepViewModel
17
+ if name == "PipelineViewModel":
18
+ from .view_models.pipeline import PipelineViewModel
19
+
20
+ return PipelineViewModel
21
+ if name == "PreprocessingWindow":
22
+ from .windows.preprocessing_window import PreprocessingWindow
23
+
24
+ return PreprocessingWindow
25
+ if name in {"create_window", "main"}:
26
+ from .application import create_window, main
27
+
28
+ return {"create_window": create_window, "main": main}[name]
29
+ raise AttributeError(name)
desktop/_repo_root.py ADDED
@@ -0,0 +1,38 @@
1
+ """仓库根目录解析(desktop 专用)。
2
+
3
+ ``WW3TOOL_ROOT`` 环境变量优先(pip/brew 安装形态下指向含
4
+ meshgen/public/params.yml 的仓库),否则按仓库布局从本文件推导:
5
+ ``<仓库根>/src/desktop/``,向上 2 级即仓库根。
6
+
7
+ [EN] Repo-root resolution for the desktop package: WW3TOOL_ROOT env wins
8
+ (packaged installs); otherwise inferred from the repo layout.
9
+ """
10
+
11
+ import os
12
+ from pathlib import Path
13
+
14
+
15
+ def repo_root() -> Path:
16
+ env_root = os.environ.get("WW3TOOL_ROOT")
17
+ if env_root:
18
+ return Path(env_root).expanduser().resolve()
19
+ # 仓库形态:从本文件向上找到含 params.yml 与 run.py 的仓库根
20
+ # [EN] Repo layout: walk up to the dir holding both params.yml and run.py.
21
+ _d = Path(__file__).resolve().parent
22
+ while True:
23
+ if (_d / "params.yml").is_file() and (_d / "run.py").is_file():
24
+ return _d
25
+ if _d.parent == _d:
26
+ break
27
+ _d = _d.parent
28
+ # 装包形态:site-packages 里的 ww3tool_resources 自带全部运行资源
29
+ # [EN] Packaged install: ww3tool_resources ships the runtime resources.
30
+ try:
31
+ import ww3tool_resources
32
+
33
+ pkg_root = Path(ww3tool_resources.__file__).resolve().parent
34
+ if (pkg_root / "params.yml").is_file():
35
+ return pkg_root
36
+ except Exception:
37
+ pass
38
+ return Path(__file__).resolve().parents[2] # 兜底:原仓库推断
desktop/application.py ADDED
@@ -0,0 +1,63 @@
1
+ """Desktop startup for the workflow-backed application."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+ from typing import Any
7
+
8
+
9
+ def _select_initial_work_directory(window: Any) -> bool:
10
+ """Prompt for a work directory on startup. Returns False if the user cancels."""
11
+ from .windows.work_folder_dialog import WorkFolderDialog
12
+
13
+ dialog = WorkFolderDialog(parent=window, is_startup=True)
14
+ if dialog.exec() != dialog.DialogCode.Accepted or not dialog.selected_folder:
15
+ return False
16
+ if hasattr(window, "set_work_directory"):
17
+ window.set_work_directory(dialog.selected_folder)
18
+ return True
19
+
20
+
21
+ def create_window():
22
+ from .windows.preprocessing_window import create_preprocessing_window
23
+
24
+ return create_preprocessing_window()
25
+
26
+
27
+ def main(argv: list[str] | None = None) -> int:
28
+ # [EN] Must set AA_ShareOpenGLContexts before QApplication for QWebEngineView.
29
+ import PyQt6.QtCore
30
+ PyQt6.QtCore.QCoreApplication.setAttribute(
31
+ PyQt6.QtCore.Qt.ApplicationAttribute.AA_ShareOpenGLContexts
32
+ )
33
+
34
+ try:
35
+ from PyQt6.QtWidgets import QApplication
36
+ except ImportError as exc:
37
+ raise SystemExit(
38
+ "无法启动桌面界面:请先安装 PyQt6 依赖 "
39
+ "(python3 -m pip install -r src/requirements.txt)"
40
+ ) from exc
41
+
42
+ # [EN] Validate root params.yml paths at startup (same as CLI/shell).
43
+ # Incompatible or non-existent paths are auto-corrected before any config is loaded.
44
+ try:
45
+ from workflows.infrastructure.runtime_config import sanitize_root_params_paths
46
+ sanitize_root_params_paths()
47
+ except Exception:
48
+ pass
49
+
50
+ arguments = [sys.argv[0], *(argv if argv is not None else sys.argv[1:])]
51
+ app = QApplication(arguments)
52
+ from .branding import load_logo_icon, apply_window_logo
53
+
54
+ icon = load_logo_icon()
55
+ if icon is not None:
56
+ app.setWindowIcon(icon)
57
+
58
+ window = create_window()
59
+ apply_window_logo(window)
60
+ window.show()
61
+ if not _select_initial_work_directory(window):
62
+ return 0
63
+ return app.exec()
@@ -0,0 +1,46 @@
1
+ """Run workflow tasks off the UI thread and marshal results back to Qt."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import threading
6
+ import traceback
7
+ import uuid
8
+ from typing import Callable
9
+
10
+ from PyQt6 import QtCore
11
+
12
+
13
+ class _BackgroundRunnerBridge(QtCore.QObject):
14
+ finished = QtCore.pyqtSignal(str, object)
15
+
16
+
17
+ class BackgroundRunner:
18
+ """Runs callables on daemon threads and delivers results on the UI thread."""
19
+
20
+ def __init__(self, parent: QtCore.QObject | None = None) -> None:
21
+ self._bridge = _BackgroundRunnerBridge(parent)
22
+ self._bridge.finished.connect(self._dispatch, QtCore.Qt.ConnectionType.QueuedConnection)
23
+ self._callbacks: dict[str, Callable[[object], None]] = {}
24
+
25
+ def run(self, task: Callable[[], object], on_done: Callable[[object], None]) -> str:
26
+ token = uuid.uuid4().hex
27
+ self._callbacks[token] = on_done
28
+
29
+ def _worker() -> None:
30
+ try:
31
+ result = task()
32
+ except Exception as exc:
33
+ traceback.print_exc()
34
+ result = {"success": False, "error": str(exc)}
35
+ self._bridge.finished.emit(token, result)
36
+
37
+ threading.Thread(target=_worker, daemon=True).start()
38
+ return token
39
+
40
+ def _dispatch(self, token: str, result: object) -> None:
41
+ callback = self._callbacks.pop(token, None)
42
+ if callback is not None:
43
+ try:
44
+ callback(result)
45
+ except Exception:
46
+ traceback.print_exc()
desktop/branding.py ADDED
@@ -0,0 +1,30 @@
1
+ """Application branding assets (window / title bar icon)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pathlib import Path
6
+ from typing import Any
7
+
8
+ from PyQt6.QtGui import QIcon
9
+
10
+ from ._repo_root import repo_root
11
+
12
+ LOGO_PATH = repo_root() / "public" / "resource" / "logo.png"
13
+
14
+
15
+ def load_logo_icon() -> QIcon | None:
16
+ if not LOGO_PATH.is_file():
17
+ return None
18
+ icon = QIcon(str(LOGO_PATH))
19
+ return icon if not icon.isNull() else None
20
+
21
+
22
+ def apply_window_logo(window: Any) -> None:
23
+ """Set app logo on the window and FluentTitleBar icon label."""
24
+ icon = load_logo_icon()
25
+ if icon is None:
26
+ return
27
+ window.setWindowIcon(icon)
28
+ title_bar = getattr(window, "titleBar", None)
29
+ if title_bar is not None and hasattr(title_bar, "setIcon"):
30
+ title_bar.setIcon(icon)
@@ -0,0 +1,11 @@
1
+ """Reusable desktop presentation components."""
2
+
3
+ from .combo_box import left_align_combo_text
4
+ from .image_gallery_drawer import ImageGalleryDrawer, ImageGalleryHost, ImageGalleryPanel
5
+
6
+ __all__ = [
7
+ "left_align_combo_text",
8
+ "ImageGalleryDrawer",
9
+ "ImageGalleryHost",
10
+ "ImageGalleryPanel",
11
+ ]
@@ -0,0 +1,252 @@
1
+ """Reusable inline map preview for editable geographic bounds."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import math
7
+ from pathlib import Path
8
+
9
+ from PyQt6.QtCore import pyqtSignal, QRectF, QTimer, QUrl, QUrlQuery
10
+ from PyQt6.QtGui import QColor, QPainterPath, QRegion
11
+ from PyQt6.QtWebEngineCore import QWebEngineSettings
12
+ from PyQt6.QtWidgets import QSizePolicy
13
+
14
+ from .._repo_root import repo_root
15
+ from .globe_picker_dialog import MapWebEngineView, current_map_language, current_map_type
16
+
17
+
18
+ class BoundsMapPreview(MapWebEngineView):
19
+ """Show a blue outline for four bound fields without map editing controls."""
20
+
21
+ expand_requested = pyqtSignal()
22
+
23
+ def __init__(self, parent=None) -> None:
24
+ super().__init__(parent)
25
+ self._page_loaded = False
26
+ self._regions: list[dict[str, object]] = []
27
+ self._field_regions: list[dict[str, object]] = []
28
+ self._field_connections: list[tuple[object, object]] = []
29
+ self._applying_web_move = False
30
+ self._move_poll_in_flight = False
31
+ self._update_timer = QTimer(self)
32
+ self._update_timer.setSingleShot(True)
33
+ self._update_timer.setInterval(180)
34
+ self._update_timer.timeout.connect(self._update_from_bound_fields)
35
+ self._move_poll_timer = QTimer(self)
36
+ self._move_poll_timer.setInterval(120)
37
+ self._move_poll_timer.timeout.connect(self._poll_preview_move)
38
+
39
+ self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)
40
+ self.setFixedHeight(210)
41
+ self.setZoomFactor(1.0)
42
+ page = self.page()
43
+ page.setBackgroundColor(QColor("#ffffff"))
44
+ settings = page.settings()
45
+ settings.setAttribute(QWebEngineSettings.WebAttribute.LocalContentCanAccessRemoteUrls, True)
46
+ settings.setAttribute(QWebEngineSettings.WebAttribute.WebGLEnabled, True)
47
+ page.loadFinished.connect(self._on_page_loaded)
48
+
49
+ html_path = repo_root() / "public" / "globe_picker" / "globe_picker.html"
50
+ url = QUrl.fromLocalFile(str(html_path.resolve()))
51
+ query = QUrlQuery()
52
+ query.addQueryItem("mode", "preview")
53
+ query.addQueryItem("lang", current_map_language())
54
+ query.addQueryItem("mapType", current_map_type())
55
+ url.setQuery(query)
56
+ self.load(url)
57
+
58
+ def bind_fields(
59
+ self, *, west, east, south, north, color: str = "#1677d2", label: str = ""
60
+ ) -> None:
61
+ self._clear_field_bindings()
62
+ self.add_bound_fields(
63
+ west=west, east=east, south=south, north=north, color=color, label=label
64
+ )
65
+
66
+ def add_bound_fields(
67
+ self, *, west, east, south, north, color: str = "#1677d2", label: str = ""
68
+ ) -> None:
69
+ fields = (west, east, south, north)
70
+ self._field_regions.append({"fields": fields, "color": color, "label": label})
71
+ for field in fields:
72
+ slot = lambda *_: self._schedule_field_update()
73
+ field.textChanged.connect(slot)
74
+ self._field_connections.append((field, slot))
75
+ self._update_timer.start()
76
+
77
+ def replace_bound_fields(self, bindings: list[dict[str, object]]) -> None:
78
+ """Replace all live field bindings, for example after nested levels change."""
79
+ self._clear_field_bindings()
80
+ for binding in bindings:
81
+ self.add_bound_fields(**binding)
82
+ if not bindings:
83
+ self.clear_bounds()
84
+ # 立即同步 regions,确保 regions() 返回最新数据
85
+ self._update_from_bound_fields()
86
+
87
+ def _clear_field_bindings(self) -> None:
88
+ self._update_timer.stop()
89
+ for field, slot in self._field_connections:
90
+ try:
91
+ field.textChanged.disconnect(slot)
92
+ except (RuntimeError, TypeError):
93
+ pass
94
+ self._field_connections.clear()
95
+ self._field_regions.clear()
96
+
97
+ def set_bounds(self, west: float, east: float, south: float, north: float) -> None:
98
+ self.set_regions([{"west": west, "east": east, "south": south, "north": north}])
99
+
100
+ def set_regions(self, regions: list[dict[str, object]]) -> None:
101
+ self._regions = [dict(region) for region in regions]
102
+ self._sync_regions()
103
+
104
+ def clear_bounds(self) -> None:
105
+ self.set_regions([])
106
+
107
+ def refresh(self) -> None:
108
+ self._update_timer.stop()
109
+ self._update_from_bound_fields()
110
+
111
+ def regions(self) -> list[dict[str, object]]:
112
+ return [dict(region) for region in self._regions]
113
+
114
+ def reload_map_type(self) -> None:
115
+ url = self.url()
116
+ query = QUrlQuery(url)
117
+ query.removeAllQueryItems("mapType")
118
+ query.addQueryItem("mapType", current_map_type())
119
+ url.setQuery(query)
120
+ self._page_loaded = False
121
+ self.load(url)
122
+
123
+ def resizeEvent(self, event) -> None:
124
+ super().resizeEvent(event)
125
+ path = QPainterPath()
126
+ path.addRoundedRect(QRectF(self.rect()), 8.0, 8.0)
127
+ self.setMask(QRegion(path.toFillPolygon().toPolygon()))
128
+
129
+ def showEvent(self, event) -> None:
130
+ super().showEvent(event)
131
+ if self._page_loaded:
132
+ self._move_poll_timer.start()
133
+ self._restore_host_frameless()
134
+
135
+ def hideEvent(self, event) -> None:
136
+ self._move_poll_timer.stop()
137
+ super().hideEvent(event)
138
+
139
+ def _on_page_loaded(self, ok: bool) -> None:
140
+ self._page_loaded = ok
141
+ if ok:
142
+ self._sync_regions()
143
+ if self.isVisible():
144
+ self._move_poll_timer.start()
145
+ self._restore_host_frameless()
146
+ QTimer.singleShot(0, self._restore_host_frameless)
147
+ QTimer.singleShot(100, self._restore_host_frameless)
148
+
149
+ def _schedule_field_update(self) -> None:
150
+ if not self._applying_web_move:
151
+ self._update_timer.start()
152
+
153
+ def _poll_preview_move(self) -> None:
154
+ if not self._page_loaded or self._move_poll_in_flight:
155
+ return
156
+ self._move_poll_in_flight = True
157
+ self.page().runJavaScript(
158
+ "(function(){"
159
+ "var r=window.__previewMoveResult||null;"
160
+ "window.__previewMoveResult=null;"
161
+ "var x=window.__expandRequested||false;"
162
+ "window.__expandRequested=false;"
163
+ "if(x)return {_expand:true};"
164
+ "return r;"
165
+ "})()",
166
+ self._on_preview_move,
167
+ )
168
+
169
+ def _on_preview_move(self, result: object) -> None:
170
+ self._move_poll_in_flight = False
171
+ if not isinstance(result, dict):
172
+ return
173
+ if result.get("_expand"):
174
+ QTimer.singleShot(0, self.expand_requested.emit)
175
+ return
176
+ try:
177
+ index = int(result["index"])
178
+ bounds = tuple(float(result[key]) for key in ("west", "east", "south", "north"))
179
+ except (KeyError, TypeError, ValueError):
180
+ return
181
+ if index < 0 or index >= len(self._field_regions):
182
+ return
183
+ west, east, south, north = bounds
184
+ if not all(math.isfinite(value) for value in bounds):
185
+ return
186
+ if south >= north or south < -90 or north > 90 or east <= west or east - west > 360:
187
+ return
188
+
189
+ fields = self._field_regions[index]["fields"]
190
+ self._applying_web_move = True
191
+ try:
192
+ for field, value in zip(fields, bounds):
193
+ field.setText(f"{value:.4f}")
194
+ finally:
195
+ self._applying_web_move = False
196
+
197
+ for region in self._regions:
198
+ if int(region.get("fieldIndex", -1)) == index:
199
+ region.update({"west": west, "east": east, "south": south, "north": north})
200
+ break
201
+
202
+ def _update_from_bound_fields(self) -> None:
203
+ if not self._field_regions:
204
+ return
205
+ regions: list[dict[str, object]] = []
206
+ for field_index, binding in enumerate(self._field_regions):
207
+ fields = binding["fields"]
208
+ try:
209
+ west, east, south, north = (
210
+ float(field.text().strip()) for field in fields
211
+ )
212
+ except ValueError:
213
+ continue
214
+ if not all(math.isfinite(value) for value in (west, east, south, north)):
215
+ continue
216
+ while east <= west:
217
+ east += 360
218
+ if south >= north or south < -90 or north > 90 or east - west > 360:
219
+ continue
220
+ regions.append(
221
+ {
222
+ "west": west,
223
+ "east": east,
224
+ "south": south,
225
+ "north": north,
226
+ "color": binding["color"],
227
+ "label": binding["label"],
228
+ "width": 1.5,
229
+ "fieldIndex": field_index,
230
+ }
231
+ )
232
+ self.set_regions(regions)
233
+
234
+ def _restore_host_frameless(self) -> None:
235
+ host = self.window()
236
+ if host is self:
237
+ return
238
+ update_frameless = getattr(host, "updateFrameless", None)
239
+ if callable(update_frameless):
240
+ update_frameless()
241
+ set_system_buttons = getattr(host, "setSystemTitleBarButtonVisible", None)
242
+ if callable(set_system_buttons):
243
+ set_system_buttons(False)
244
+ title_bar = getattr(host, "titleBar", None)
245
+ if title_bar is not None:
246
+ title_bar.raise_()
247
+
248
+ def _sync_regions(self) -> None:
249
+ if not self._page_loaded:
250
+ return
251
+ payload = json.dumps(self._regions, separators=(",", ":"))
252
+ self.page().runJavaScript(f"window.__setPreviewRegions({payload})")
@@ -0,0 +1,98 @@
1
+ """Presentation helpers shared by desktop combo boxes."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Iterable
6
+
7
+ from PyQt6.QtCore import Qt, QTimer
8
+ from PyQt6.QtWidgets import QWidget
9
+ from qfluentwidgets import ComboBox
10
+
11
+ from workflows.domain.parameter_catalog import canonical_file_split
12
+ from workflows.support.translations import tr
13
+
14
+
15
+ def add_labeled_combo_items(combo: ComboBox, items: Iterable[tuple[str, str]]) -> None:
16
+ """qfluentwidgets ``addItem(text, icon, userData)`` 第二参是 icon,枚举值必须用 ``userData=``。
17
+
18
+ [EN] In qfluentwidgets, ``addItem(text, icon, userData)`` treats the second
19
+ parameter as icon; enum values must be passed with ``userData=``.
20
+ """
21
+ for label, value in items:
22
+ combo.addItem(label, userData=value)
23
+
24
+
25
+ def combo_selected_user_data(combo: ComboBox) -> str:
26
+ """读取当前项 ``userData``;缺失时回退 ``currentText``。
27
+
28
+ [EN] Read the current item's ``userData``; fall back to ``currentText`` when missing.
29
+ """
30
+ data = combo.itemData(combo.currentIndex())
31
+ if data is not None and str(data).strip():
32
+ return str(data).strip()
33
+ return combo.currentText().strip()
34
+
35
+
36
+ def file_split_combo_items() -> list[tuple[str, str]]:
37
+ """``ww3.file_split`` 下拉项:展示文案 + 规范枚举值。
38
+
39
+ [EN] Drop-down items for ``ww3.file_split``: display text + canonical enum value.
40
+ """
41
+ return [
42
+ (tr("file_split_single", "单文件"), "single"),
43
+ (tr("file_split_hour", "小时"), "hour"),
44
+ (tr("file_split_day", "天"), "day"),
45
+ (tr("file_split_month", "月"), "month"),
46
+ (tr("file_split_year", "年"), "year"),
47
+ ]
48
+
49
+
50
+ def current_file_split_from_combo(combo: ComboBox, *, default: str = "year") -> str:
51
+ """从下拉框读出规范的 ``ww3.file_split`` 枚举值。
52
+
53
+ [EN] Read the canonical ``ww3.file_split`` enum value from the combo box.
54
+ """
55
+ return canonical_file_split(combo_selected_user_data(combo), default=default)
56
+
57
+
58
+ def select_file_split_combo(combo: ComboBox, value: object, *, default: str = "year") -> None:
59
+ """按规范值选中 file_split 项;兼容旧值 ``none`` 与误存的展示文案。
60
+
61
+ [EN] Select the file_split item by canonical value; compatible with the legacy
62
+ value ``none`` and mistakenly stored display text.
63
+ """
64
+ selected = canonical_file_split(value, default=default)
65
+ for index in range(combo.count()):
66
+ data = combo.itemData(index)
67
+ if str(data or "").strip().lower() == selected:
68
+ combo.setCurrentIndex(index)
69
+ return
70
+ label_by_value = {item_value: item_label for item_label, item_value in file_split_combo_items()}
71
+ target_label = label_by_value.get(selected)
72
+ if target_label:
73
+ for index in range(combo.count()):
74
+ if combo.itemText(index) == target_label:
75
+ combo.setCurrentIndex(index)
76
+ return
77
+ if combo.count():
78
+ combo.setCurrentIndex(0)
79
+
80
+
81
+ def left_align_combo_text(combo: QWidget) -> None:
82
+ """Keep combo display text aligned with the left-side form fields."""
83
+
84
+ def apply_alignment() -> None:
85
+ line_edit_factory = getattr(combo, "lineEdit", None)
86
+ if callable(line_edit_factory):
87
+ line_edit = line_edit_factory()
88
+ if line_edit is not None:
89
+ line_edit.setAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter)
90
+
91
+ if "text-align: left" not in combo.styleSheet():
92
+ combo.setStyleSheet(
93
+ f"{combo.styleSheet()}\n"
94
+ "QComboBox, ComboBox, EditableComboBox { text-align: left; }\n"
95
+ )
96
+
97
+ apply_alignment()
98
+ QTimer.singleShot(0, apply_alignment)
@@ -0,0 +1,84 @@
1
+ """Progress feedback displayed while forcing files are prepared."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from PyQt6 import QtCore, QtGui, QtWidgets
6
+ from PyQt6.QtCore import Qt
7
+ from qfluentwidgets import MessageBoxBase, themeColor
8
+ from workflows.support.translations import tr
9
+
10
+
11
+ class _RotatingSpinner(QtWidgets.QWidget):
12
+ def __init__(self, parent=None, diameter: int = 52) -> None:
13
+ super().__init__(parent)
14
+ self._angle = 0
15
+ self._thickness = 5
16
+ self.setFixedSize(diameter, diameter)
17
+ self._timer = QtCore.QTimer(self)
18
+ self._timer.setInterval(16)
19
+ self._timer.timeout.connect(self._advance)
20
+ self._timer.start()
21
+
22
+ def _advance(self) -> None:
23
+ self._angle = (self._angle + 12) % 360
24
+ self.update()
25
+
26
+ def paintEvent(self, event) -> None:
27
+ _ = event
28
+ rect = self.rect().adjusted(6, 6, -6, -6)
29
+ painter = QtGui.QPainter(self)
30
+ painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing)
31
+
32
+ track_pen = QtGui.QPen(QtGui.QColor(220, 224, 230), self._thickness)
33
+ track_pen.setCapStyle(Qt.PenCapStyle.RoundCap)
34
+ painter.setPen(track_pen)
35
+ painter.drawArc(rect, 0, 360 * 16)
36
+
37
+ accent = themeColor()
38
+ if not accent or not accent.isValid():
39
+ accent = self.palette().color(QtGui.QPalette.ColorRole.Highlight)
40
+ arc_pen = QtGui.QPen(accent, self._thickness)
41
+ arc_pen.setCapStyle(Qt.PenCapStyle.RoundCap)
42
+ painter.setPen(arc_pen)
43
+ painter.drawArc(rect, int(-self._angle * 16), int(110 * 16))
44
+
45
+
46
+ class ForcingProgressDialog(MessageBoxBase):
47
+ """Legacy-aligned wait dialog for Step 2 file preparation."""
48
+
49
+ def __init__(self, parent, message: str | None = None) -> None:
50
+ super().__init__(parent)
51
+ message = message or tr("please_wait", "请稍候...")
52
+ self.setWindowTitle("")
53
+ self.hideYesButton()
54
+ self.hideCancelButton()
55
+ self.buttonLayout.parent().setVisible(False)
56
+ if hasattr(self, "setClosableOnMaskClicked"):
57
+ self.setClosableOnMaskClicked(True)
58
+
59
+ container = QtWidgets.QWidget(self)
60
+ layout = QtWidgets.QVBoxLayout(container)
61
+ layout.setContentsMargins(24, 16, 24, 16)
62
+ layout.setSpacing(14)
63
+ layout.setAlignment(Qt.AlignmentFlag.AlignCenter)
64
+
65
+ layout.addWidget(_RotatingSpinner(container, diameter=56), alignment=Qt.AlignmentFlag.AlignCenter)
66
+
67
+ title = QtWidgets.QLabel(tr("forcing_progress_title", "正在处理强迫场文件..."))
68
+ title.setAlignment(Qt.AlignmentFlag.AlignCenter)
69
+ title.setStyleSheet("font-size: 18px; font-weight: 600;")
70
+ layout.addWidget(title)
71
+
72
+ self._message_label = QtWidgets.QLabel(message)
73
+ self._message_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
74
+ self._message_label.setWordWrap(True)
75
+ self._message_label.setStyleSheet("font-size: 13px;")
76
+ layout.addWidget(self._message_label)
77
+
78
+ self.viewLayout.addWidget(container, 1)
79
+ self.setMinimumWidth(420)
80
+ self.setMinimumHeight(220)
81
+ self.setWindowModality(QtCore.Qt.WindowModality.WindowModal)
82
+
83
+ def set_message(self, message: str) -> None:
84
+ self._message_label.setText(message)