igm-model 3.1.2__tar.gz → 3.2.0__tar.gz

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 (617) hide show
  1. igm_model-3.2.0/PKG-INFO +62 -0
  2. igm_model-3.2.0/README.md +20 -0
  3. {igm_model-3.1.2 → igm_model-3.2.0}/igm/__init__.py +1 -0
  4. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cook/infer_params_cook.py +7 -2
  5. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/cost_divfluxfcz.py +4 -4
  6. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/cost_divfluxobs.py +5 -5
  7. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/misfit_thk.py +1 -1
  8. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/misfit_usurf.py +1 -1
  9. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/misfit_velsurf.py +3 -3
  10. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/misfit_vol.py +1 -1
  11. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/regu_arrhenius.py +4 -4
  12. igm_model-3.2.0/igm/assimilations/data_assimilation/cost_terms/regu_slidingco.py +63 -0
  13. igm_model-3.2.0/igm/assimilations/data_assimilation/cost_terms/regu_thk.py +207 -0
  14. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/total_cost.py +23 -20
  15. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/data_assimilation.py +16 -14
  16. igm_model-3.2.0/igm/assimilations/data_assimilation/data_assimilation.yaml +6 -0
  17. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/iceflow_dispatch.py +7 -1
  18. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/optimize/initialize.py +16 -15
  19. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/optimize/update.py +50 -39
  20. igm_model-3.2.0/igm/assimilations/data_assimilation/optimize/update_lbfgs.py +98 -0
  21. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/outputs/output_ncdf.py +16 -16
  22. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/outputs/plots.py +10 -10
  23. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/outputs/prints.py +7 -5
  24. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/utils.py +35 -4
  25. {igm_model-3.1.2/igm/processes/damage → igm_model-3.2.0/igm/assimilations/field_inversion}/__init__.py +1 -1
  26. igm_model-3.2.0/igm/assimilations/field_inversion/context.py +153 -0
  27. igm_model-3.2.0/igm/assimilations/field_inversion/field_inversion.py +135 -0
  28. igm_model-3.2.0/igm/assimilations/field_inversion/field_inversion.yaml +6 -0
  29. igm_model-3.2.0/igm/assimilations/field_inversion/objective.py +127 -0
  30. igm_model-3.2.0/igm/assimilations/field_inversion/outputs/__init__.py +1 -0
  31. igm_model-3.2.0/igm/assimilations/field_inversion/outputs/output_ncdf.py +144 -0
  32. igm_model-3.2.0/igm/assimilations/field_inversion/penalties.py +92 -0
  33. igm_model-3.2.0/igm/assimilations/field_inversion/phase_runner.py +305 -0
  34. igm_model-3.2.0/igm/assimilations/field_inversion/retraining.py +456 -0
  35. igm_model-3.2.0/igm/assimilations/field_inversion/terms.py +173 -0
  36. {igm_model-3.1.2/igm/processes/data_assimilation_SR → igm_model-3.2.0/igm/assimilations/field_inversion}/utils.py +62 -12
  37. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/pretraining/cost_tmp.py +5 -5
  38. igm_model-3.2.0/igm/assimilations/pretraining/history.py +80 -0
  39. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/pretraining/io_tfrecords.py +24 -19
  40. igm_model-3.2.0/igm/assimilations/pretraining/pretraining.py +185 -0
  41. igm_model-3.2.0/igm/assimilations/pretraining/pretraining.yaml +6 -0
  42. igm_model-3.2.0/igm/assimilations/pretraining/trainer.py +406 -0
  43. igm_model-3.2.0/igm/assimilations/pretraining/training_utils.py +156 -0
  44. igm_model-3.2.0/igm/assimilations/time_relaxation/__init__.py +1 -0
  45. igm_model-3.2.0/igm/assimilations/time_relaxation/time_relaxation.py +765 -0
  46. igm_model-3.2.0/igm/assimilations/time_relaxation/time_relaxation.yaml +6 -0
  47. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/__init__.py +3 -1
  48. igm_model-3.2.0/igm/common/aliases/__init__.py +56 -0
  49. igm_model-3.2.0/igm/common/aliases/descriptive.yaml +54 -0
  50. igm_model-3.2.0/igm/common/aliases/pism.yaml +43 -0
  51. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/core/src.py +27 -1
  52. igm_model-3.2.0/igm/common/fields.py +28 -0
  53. igm_model-3.2.0/igm/common/legacy.py +79 -0
  54. igm_model-3.2.0/igm/common/runner/__init__.py +13 -0
  55. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/runner/configuration/utils.py +40 -19
  56. igm_model-3.2.0/igm/common/runner/modules/__init__.py +7 -0
  57. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/runner/modules/loader.py +39 -4
  58. igm_model-3.2.0/igm/common/runner/modules/src.py +216 -0
  59. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/runner/modules/utils.py +4 -2
  60. {igm_model-3.1.2/igm/conf/processes → igm_model-3.2.0/igm/conf/assimilations}/data_assimilation.yaml +8 -5
  61. igm_model-3.2.0/igm/conf/assimilations/field_inversion.yaml +29 -0
  62. igm_model-3.2.0/igm/conf/assimilations/pretraining.yaml +32 -0
  63. igm_model-3.2.0/igm/conf/assimilations/time_relaxation.yaml +87 -0
  64. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/config.yaml +1 -0
  65. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/core.yaml +9 -2
  66. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/inputs/load_ncdf.yaml +3 -0
  67. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/inputs/local.yaml +5 -2
  68. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/live_dashboard.yaml +1 -0
  69. igm_model-3.2.0/igm/conf/processes/arrhenius.yaml +13 -0
  70. igm_model-3.2.0/igm/conf/processes/climate.yaml +77 -0
  71. igm_model-3.2.0/igm/conf/processes/enthalpy.yaml +27 -0
  72. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/iceflow.yaml +54 -35
  73. igm_model-3.2.0/igm/conf/processes/smb.yaml +40 -0
  74. igm_model-3.2.0/igm/conf/processes/subglacial_hydrology.yaml +30 -0
  75. igm_model-3.2.0/igm/conf/processes/thk.yaml +4 -0
  76. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/time.yaml +2 -1
  77. {igm_model-3.1.2/igm/conf_help/processes → igm_model-3.2.0/igm/conf_help/assimilations}/data_assimilation.yaml +55 -7
  78. igm_model-3.2.0/igm/conf_help/assimilations/field_inversion.yaml +87 -0
  79. igm_model-3.2.0/igm/conf_help/assimilations/pretraining.yaml +84 -0
  80. igm_model-3.2.0/igm/conf_help/assimilations/time_relaxation.yaml +47 -0
  81. igm_model-3.2.0/igm/conf_help/core.yaml +103 -0
  82. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/inputs/load_ncdf.yaml +9 -0
  83. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/inputs/local.yaml +9 -0
  84. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/live_dashboard.yaml +4 -0
  85. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/plot2d.yaml +1 -1
  86. igm_model-3.2.0/igm/conf_help/processes/arrhenius.yaml +32 -0
  87. igm_model-3.2.0/igm/conf_help/processes/climate.yaml +152 -0
  88. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/gflex.yaml +1 -1
  89. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/iceflow.yaml +99 -68
  90. igm_model-3.2.0/igm/conf_help/processes/smb.yaml +75 -0
  91. igm_model-3.2.0/igm/conf_help/processes/subglacial_hydrology.yaml +40 -0
  92. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/texture.yaml +3 -3
  93. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/thk.yaml +1 -5
  94. {igm_model-3.1.2 → igm_model-3.2.0}/igm/igm_run.py +52 -21
  95. igm_model-3.2.0/igm/inputs/complete_data.py +65 -0
  96. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/load_ncdf.py +3 -3
  97. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/load_tif.py +1 -1
  98. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/local.py +20 -3
  99. {igm_model-3.1.2 → igm_model-3.2.0}/igm/instructed_oggm.py +10 -0
  100. {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/live_dashboard.py +13 -9
  101. {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/local.py +49 -35
  102. {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/plot2d.py +2 -2
  103. {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/write_ncdf.py +24 -10
  104. {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/write_tif.py +4 -4
  105. {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/write_vtp.py +1 -1
  106. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/__init__.py +9 -1
  107. igm_model-3.2.0/igm/processes/arrhenius/__init__.py +1 -0
  108. igm_model-3.2.0/igm/processes/arrhenius/arrhenius.py +156 -0
  109. igm_model-3.2.0/igm/processes/arrhenius/arrhenius.yaml +6 -0
  110. igm_model-3.2.0/igm/processes/avalanche/__init__.py +1 -0
  111. igm_model-3.2.0/igm/processes/avalanche/avalanche.yaml +6 -0
  112. igm_model-3.2.0/igm/processes/clim_glacialindex/clim_glacialindex.py +47 -0
  113. igm_model-3.2.0/igm/processes/clim_glacialindex/clim_glacialindex.yaml +6 -0
  114. igm_model-3.2.0/igm/processes/clim_oggm/clim_oggm.py +48 -0
  115. igm_model-3.2.0/igm/processes/clim_oggm/clim_oggm.yaml +6 -0
  116. igm_model-3.2.0/igm/processes/clim_station/clim_station.py +44 -0
  117. igm_model-3.2.0/igm/processes/clim_station/clim_station.yaml +5 -0
  118. igm_model-3.2.0/igm/processes/climate/__init__.py +1 -0
  119. igm_model-3.2.0/igm/processes/climate/climate.py +23 -0
  120. igm_model-3.2.0/igm/processes/climate/climate.yaml +6 -0
  121. igm_model-3.2.0/igm/processes/climate/glacialindex/__init__.py +1 -0
  122. igm_model-3.1.2/igm/processes/clim_glacialindex/clim_glacialindex.py → igm_model-3.2.0/igm/processes/climate/glacialindex/glacialindex.py +72 -64
  123. igm_model-3.2.0/igm/processes/climate/oggm/__init__.py +1 -0
  124. igm_model-3.1.2/igm/processes/clim_oggm/clim_oggm.py → igm_model-3.2.0/igm/processes/climate/oggm/oggm.py +29 -26
  125. igm_model-3.2.0/igm/processes/climate/simple/__init__.py +1 -0
  126. igm_model-3.2.0/igm/processes/climate/simple/simple.py +91 -0
  127. igm_model-3.2.0/igm/processes/climate/station/__init__.py +1 -0
  128. igm_model-3.1.2/igm/processes/clim_station/clim_station.py → igm_model-3.2.0/igm/processes/climate/station/station.py +23 -19
  129. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/__init__.py +2 -0
  130. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/dissipation/utils.py +57 -6
  131. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/enthalpy.py +23 -34
  132. igm_model-3.2.0/igm/processes/enthalpy/enthalpy.yaml +7 -0
  133. igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/__init__.py +1 -0
  134. igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/assembly.py +82 -0
  135. igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/bc.py +68 -0
  136. igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/diffusivity.py +40 -0
  137. igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/melt.py +81 -0
  138. igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/solver.py +55 -0
  139. igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/velocity.py +31 -0
  140. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/utils/checks.py +4 -2
  141. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/utils/fields.py +15 -37
  142. igm_model-3.2.0/igm/processes/flow_accumulation/flow_accumulation.yaml +6 -0
  143. igm_model-3.2.0/igm/processes/gflex/gflex.yaml +6 -0
  144. igm_model-3.2.0/igm/processes/glerosion/glerosion.yaml +6 -0
  145. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulated.py +2 -2
  146. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulator.py +32 -8
  147. igm_model-3.2.0/igm/processes/iceflow/emulate/utils/architectures/__init__.py +11 -0
  148. igm_model-3.2.0/igm/processes/iceflow/emulate/utils/architectures/cnns.py +384 -0
  149. igm_model-3.2.0/igm/processes/iceflow/emulate/utils/architectures/dahunet.py +391 -0
  150. igm_model-3.2.0/igm/processes/iceflow/emulate/utils/architectures/mlps.py +103 -0
  151. igm_model-3.2.0/igm/processes/iceflow/emulate/utils/architectures/nos.py +403 -0
  152. igm_model-3.2.0/igm/processes/iceflow/emulate/utils/architectures/utils.py +29 -0
  153. igm_model-3.2.0/igm/processes/iceflow/emulate/utils/artifacts.py +267 -0
  154. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/utils/normalizations.py +0 -96
  155. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/components/floating.py +24 -10
  156. igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/__init__.py +25 -0
  157. igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/laws/__init__.py +4 -0
  158. igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/laws/_power_law.py +106 -0
  159. igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/laws/budd.py +110 -0
  160. igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/laws/mohr_coulomb.py +183 -0
  161. igm_model-3.1.2/igm/processes/iceflow/energy/components/sliding/laws/coulomb.py → igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/laws/regu_coulomb.py +28 -27
  162. igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/laws/weertman.py +101 -0
  163. igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/sliding.py +85 -0
  164. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/components/viscosity.py +2 -2
  165. igm_model-3.2.0/igm/processes/iceflow/energy/utils.py +88 -0
  166. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/horizontal/horizontal_q1.py +9 -1
  167. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/iceflow.py +33 -2
  168. igm_model-3.2.0/igm/processes/iceflow/iceflow.yaml +6 -0
  169. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/solve/solve.py +1 -1
  170. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/solve/solver.py +8 -2
  171. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/evaluator/evaluator.py +1 -1
  172. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/__init__.py +2 -0
  173. igm_model-3.2.0/igm/processes/iceflow/unified/halt/criteria/log_burst_patience.py +94 -0
  174. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/halt.py +7 -2
  175. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/__init__.py +0 -2
  176. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/data_assimilation.py +133 -106
  177. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/interfaces/__init__.py +0 -2
  178. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/interfaces/data_assimilation.py +15 -31
  179. igm_model-3.2.0/igm/processes/iceflow/unified/mappings/interfaces/network.py +126 -0
  180. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/network.py +3 -1
  181. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/__init__.py +2 -0
  182. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/adam.py +1 -1
  183. igm_model-3.2.0/igm/processes/iceflow/unified/optimizers/adam_DA.py +146 -0
  184. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/cg_newton.py +1 -5
  185. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/__init__.py +2 -0
  186. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/adam.py +3 -6
  187. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/cg.py +3 -3
  188. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/lbfgs.py +1 -1
  189. igm_model-3.2.0/igm/processes/iceflow/unified/optimizers/interfaces/spg.py +126 -0
  190. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/lbfgs.py +24 -9
  191. igm_model-3.2.0/igm/processes/iceflow/unified/optimizers/lbfgs_DA.py +585 -0
  192. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/lbfgs_bounds.py +32 -27
  193. igm_model-3.2.0/igm/processes/iceflow/unified/optimizers/line_searches/hager_zhang.py +790 -0
  194. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/newton.py +1 -7
  195. igm_model-3.2.0/igm/processes/iceflow/unified/optimizers/spectral_projected_gradient.py +588 -0
  196. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/trust_region.py +1 -5
  197. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/solver/solver.py +9 -1
  198. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/unified.py +2 -2
  199. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/utils/data_preprocessing.py +19 -11
  200. igm_model-3.2.0/igm/processes/iceflow/utils/fields.py +46 -0
  201. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/vertical_molho.py +1 -1
  202. igm_model-3.2.0/igm/processes/iceflow/vertical_velocity/__init__.py +1 -0
  203. igm_model-3.1.2/igm/processes/vert_flow/vert_flow.py → igm_model-3.2.0/igm/processes/iceflow/vertical_velocity/vertical_velocity.py +11 -13
  204. igm_model-3.1.2/igm/processes/vert_flow/vert_flow_v1.py → igm_model-3.2.0/igm/processes/iceflow/vertical_velocity/vertical_velocity_v1.py +5 -3
  205. igm_model-3.1.2/igm/processes/vert_flow/vert_flow_v2.py → igm_model-3.2.0/igm/processes/iceflow/vertical_velocity/vertical_velocity_v2.py +2 -2
  206. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/particles.py +17 -12
  207. igm_model-3.2.0/igm/processes/particles/particles.yaml +6 -0
  208. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/read_output/read_output.py +1 -1
  209. igm_model-3.2.0/igm/processes/read_output/read_output.yaml +6 -0
  210. igm_model-3.2.0/igm/processes/rockflow/rockflow.yaml +6 -0
  211. igm_model-3.2.0/igm/processes/smb/__init__.py +1 -0
  212. igm_model-3.2.0/igm/processes/smb/accpdd/__init__.py +1 -0
  213. igm_model-3.1.2/igm/processes/smb_accpdd/smb_accpdd.py → igm_model-3.2.0/igm/processes/smb/accpdd/accpdd.py +30 -19
  214. igm_model-3.2.0/igm/processes/smb/accpdd/accpdd.yaml +1 -0
  215. igm_model-3.2.0/igm/processes/smb/oggm/__init__.py +1 -0
  216. igm_model-3.1.2/igm/processes/smb_oggm/smb_oggm.py → igm_model-3.2.0/igm/processes/smb/oggm/oggm.py +10 -7
  217. igm_model-3.2.0/igm/processes/smb/oggm/oggm.yaml +1 -0
  218. igm_model-3.2.0/igm/processes/smb/simple/__init__.py +1 -0
  219. igm_model-3.1.2/igm/processes/smb_simple/smb_simple.py → igm_model-3.2.0/igm/processes/smb/simple/simple.py +11 -9
  220. igm_model-3.2.0/igm/processes/smb/simple/simple.yaml +1 -0
  221. igm_model-3.2.0/igm/processes/smb/smb.py +30 -0
  222. igm_model-3.2.0/igm/processes/smb/smb.yaml +6 -0
  223. igm_model-3.2.0/igm/processes/smb_accpdd/smb_accpdd.py +50 -0
  224. igm_model-3.2.0/igm/processes/smb_accpdd/smb_accpdd.yaml +6 -0
  225. igm_model-3.2.0/igm/processes/smb_oggm/smb_oggm.py +44 -0
  226. igm_model-3.2.0/igm/processes/smb_oggm/smb_oggm.yaml +6 -0
  227. igm_model-3.2.0/igm/processes/smb_simple/smb_simple.py +43 -0
  228. igm_model-3.2.0/igm/processes/smb_simple/smb_simple.yaml +6 -0
  229. igm_model-3.2.0/igm/processes/subglacial_hydrology/__init__.py +1 -0
  230. igm_model-3.2.0/igm/processes/subglacial_hydrology/subglacial_hydrology.py +97 -0
  231. igm_model-3.2.0/igm/processes/subglacial_hydrology/subglacial_hydrology.yaml +7 -0
  232. igm_model-3.2.0/igm/processes/subglacial_hydrology/till_storage.py +98 -0
  233. igm_model-3.2.0/igm/processes/texture/pix2pixhd_model_assets/layer_functions/__init__.py +0 -0
  234. igm_model-3.2.0/igm/processes/texture/texture.yaml +6 -0
  235. igm_model-3.2.0/igm/processes/thk/__init__.py +1 -0
  236. igm_model-3.2.0/igm/processes/thk/thk.py +73 -0
  237. igm_model-3.2.0/igm/processes/thk/thk.yaml +6 -0
  238. igm_model-3.2.0/igm/processes/thk/utils.py +22 -0
  239. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/time/time.py +38 -8
  240. igm_model-3.2.0/igm/processes/time/time.yaml +6 -0
  241. igm_model-3.2.0/igm_model.egg-info/PKG-INFO +62 -0
  242. {igm_model-3.1.2 → igm_model-3.2.0}/igm_model.egg-info/SOURCES.txt +143 -69
  243. {igm_model-3.1.2 → igm_model-3.2.0}/igm_model.egg-info/requires.txt +5 -5
  244. {igm_model-3.1.2 → igm_model-3.2.0}/setup.py +7 -7
  245. igm_model-3.1.2/PKG-INFO +0 -54
  246. igm_model-3.1.2/README.md +0 -12
  247. igm_model-3.1.2/igm/common/runner/__init__.py +0 -8
  248. igm_model-3.1.2/igm/common/runner/modules/__init__.py +0 -1
  249. igm_model-3.1.2/igm/common/runner/modules/src.py +0 -66
  250. igm_model-3.1.2/igm/conf/processes/damage.yaml +0 -9
  251. igm_model-3.1.2/igm/conf/processes/data_assimilation_SR.yaml +0 -13
  252. igm_model-3.1.2/igm/conf/processes/enthalpy.yaml +0 -54
  253. igm_model-3.1.2/igm/conf/processes/pretraining.yaml +0 -9
  254. igm_model-3.1.2/igm/conf/processes/stress.yaml +0 -2
  255. igm_model-3.1.2/igm/conf/processes/thk.yaml +0 -5
  256. igm_model-3.1.2/igm/conf/processes/vert_flow.yaml +0 -3
  257. igm_model-3.1.2/igm/conf_help/core.yaml +0 -78
  258. igm_model-3.1.2/igm/conf_help/processes/damage.yaml +0 -32
  259. igm_model-3.1.2/igm/conf_help/processes/pretraining.yaml +0 -17
  260. igm_model-3.1.2/igm/conf_help/processes/vert_flow.yaml +0 -8
  261. igm_model-3.1.2/igm/inputs/complete_data.py +0 -38
  262. igm_model-3.1.2/igm/processes/avalanche/__init__.py +0 -5
  263. igm_model-3.1.2/igm/processes/damage/damage.py +0 -86
  264. igm_model-3.1.2/igm/processes/data_assimilation/cost_terms/regu_slidingco.py +0 -53
  265. igm_model-3.1.2/igm/processes/data_assimilation/cost_terms/regu_thk.py +0 -163
  266. igm_model-3.1.2/igm/processes/data_assimilation/optimize/update_lbfgs.py +0 -92
  267. igm_model-3.1.2/igm/processes/data_assimilation_SR/__init__.py +0 -5
  268. igm_model-3.1.2/igm/processes/data_assimilation_SR/context.py +0 -131
  269. igm_model-3.1.2/igm/processes/data_assimilation_SR/data_assimilation_SR.py +0 -135
  270. igm_model-3.1.2/igm/processes/data_assimilation_SR/objective.py +0 -110
  271. igm_model-3.1.2/igm/processes/data_assimilation_SR/penalties.py +0 -89
  272. igm_model-3.1.2/igm/processes/data_assimilation_SR/terms.py +0 -149
  273. igm_model-3.1.2/igm/processes/enthalpy/arrhenius/__init__.py +0 -1
  274. igm_model-3.1.2/igm/processes/enthalpy/arrhenius/arrhenius.py +0 -44
  275. igm_model-3.1.2/igm/processes/enthalpy/arrhenius/utils.py +0 -94
  276. igm_model-3.1.2/igm/processes/iceflow/emulate/utils/architectures/__init__.py +0 -18
  277. igm_model-3.1.2/igm/processes/iceflow/emulate/utils/architectures/cnns.py +0 -587
  278. igm_model-3.1.2/igm/processes/iceflow/emulate/utils/architectures/mlps.py +0 -162
  279. igm_model-3.1.2/igm/processes/iceflow/emulate/utils/architectures/nicenet.py +0 -300
  280. igm_model-3.1.2/igm/processes/iceflow/emulate/utils/architectures/nos.py +0 -705
  281. igm_model-3.1.2/igm/processes/iceflow/emulate/utils/architectures/utils.py +0 -320
  282. igm_model-3.1.2/igm/processes/iceflow/emulate/utils/artifacts.py +0 -235
  283. igm_model-3.1.2/igm/processes/iceflow/emulate/utils/artifacts_schema_v2.py +0 -73
  284. igm_model-3.1.2/igm/processes/iceflow/emulate/utils/artifacts_schema_v3.py +0 -312
  285. igm_model-3.1.2/igm/processes/iceflow/energy/components/sliding/__init__.py +0 -14
  286. igm_model-3.1.2/igm/processes/iceflow/energy/components/sliding/laws/__init__.py +0 -3
  287. igm_model-3.1.2/igm/processes/iceflow/energy/components/sliding/laws/budd.py +0 -188
  288. igm_model-3.1.2/igm/processes/iceflow/energy/components/sliding/laws/weertman.py +0 -165
  289. igm_model-3.1.2/igm/processes/iceflow/energy/components/sliding/sliding.py +0 -36
  290. igm_model-3.1.2/igm/processes/iceflow/energy/utils.py +0 -47
  291. igm_model-3.1.2/igm/processes/iceflow/unified/mappings/combined_data_assimilation.py +0 -448
  292. igm_model-3.1.2/igm/processes/iceflow/unified/mappings/interfaces/combined_data_assimilation.py +0 -123
  293. igm_model-3.1.2/igm/processes/iceflow/unified/mappings/interfaces/network.py +0 -83
  294. igm_model-3.1.2/igm/processes/iceflow/unified/optimizers/adam_DA.py +0 -91
  295. igm_model-3.1.2/igm/processes/iceflow/unified/optimizers/lbfgs_DA.py +0 -279
  296. igm_model-3.1.2/igm/processes/iceflow/unified/optimizers/line_searches/hager_zhang.py +0 -37
  297. igm_model-3.1.2/igm/processes/iceflow/utils/fields.py +0 -33
  298. igm_model-3.1.2/igm/processes/pretraining/history.py +0 -71
  299. igm_model-3.1.2/igm/processes/pretraining/pretraining.py +0 -648
  300. igm_model-3.1.2/igm/processes/stress/__init__.py +0 -5
  301. igm_model-3.1.2/igm/processes/stress/stress.py +0 -254
  302. igm_model-3.1.2/igm/processes/thk/__init__.py +0 -5
  303. igm_model-3.1.2/igm/processes/thk/thk.py +0 -58
  304. igm_model-3.1.2/igm/processes/vert_flow/__init__.py +0 -5
  305. igm_model-3.1.2/igm_model.egg-info/PKG-INFO +0 -54
  306. {igm_model-3.1.2 → igm_model-3.2.0}/LICENSE +0 -0
  307. {igm_model-3.1.2 → igm_model-3.2.0}/MANIFEST.in +0 -0
  308. {igm_model-3.1.2/igm/conf → igm_model-3.2.0/igm/assimilations}/__init__.py +0 -0
  309. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/__init__.py +0 -0
  310. {igm_model-3.1.2/igm/conf_help → igm_model-3.2.0/igm/assimilations/data_assimilation/cook}/__init__.py +0 -0
  311. {igm_model-3.1.2/igm/processes/data_assimilation/cook → igm_model-3.2.0/igm/assimilations/data_assimilation/cost_terms}/__init__.py +0 -0
  312. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/cost_vol.py +0 -0
  313. {igm_model-3.1.2/igm/processes/data_assimilation/cost_terms → igm_model-3.2.0/igm/assimilations/data_assimilation/optimize}/__init__.py +0 -0
  314. {igm_model-3.1.2/igm/processes/data_assimilation/optimize → igm_model-3.2.0/igm/assimilations/data_assimilation/outputs}/__init__.py +0 -0
  315. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/outputs/write_vtp.py +0 -0
  316. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/pretraining/__init__.py +0 -0
  317. {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/pretraining/plots.py +0 -0
  318. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/core/__init__.py +0 -0
  319. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/optuna/__init__.py +0 -0
  320. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/optuna/config.py +0 -0
  321. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/optuna/core.py +0 -0
  322. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/optuna/register.py +0 -0
  323. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/optuna/sweeper.py +0 -0
  324. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/runner/configuration/__init__.py +0 -0
  325. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/runner/configuration/loader.py +0 -0
  326. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/runner/modules/validator.py +0 -0
  327. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/utilities/__init__.py +0 -0
  328. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/utilities/misc.py +0 -0
  329. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/utilities/printers.py +0 -0
  330. {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/utilities/visualizers.py +0 -0
  331. {igm_model-3.1.2/igm/processes/data_assimilation/outputs → igm_model-3.2.0/igm/conf}/__init__.py +0 -0
  332. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/inputs/load_tif.yaml +0 -0
  333. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/inputs/oggm_shop.yaml +0 -0
  334. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/local.yaml +0 -0
  335. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/plot2d.yaml +0 -0
  336. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/write_ncdf.yaml +0 -0
  337. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/write_tif.yaml +0 -0
  338. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/write_ts.yaml +0 -0
  339. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/write_vtp.yaml +0 -0
  340. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/avalanche.yaml +0 -0
  341. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/clim_glacialindex.yaml +0 -0
  342. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/clim_oggm.yaml +0 -0
  343. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/clim_station.yaml +0 -0
  344. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/flow_accumulation.yaml +0 -0
  345. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/gflex.yaml +0 -0
  346. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/glerosion.yaml +0 -0
  347. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/particles.yaml +0 -0
  348. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/read_output.yaml +0 -0
  349. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/rockflow.yaml +0 -0
  350. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/smb_accpdd.yaml +0 -0
  351. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/smb_oggm.yaml +0 -0
  352. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/smb_simple.yaml +0 -0
  353. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/texture.yaml +0 -0
  354. {igm_model-3.1.2/igm/processes/iceflow/emulate/emulators → igm_model-3.2.0/igm/conf_help}/__init__.py +0 -0
  355. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/header.yaml +0 -0
  356. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/inputs/load_tif.yaml +0 -0
  357. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/inputs/oggm_shop.yaml +0 -0
  358. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/local.yaml +0 -0
  359. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/write_ncdf.yaml +0 -0
  360. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/write_tif.yaml +0 -0
  361. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/write_ts.yaml +0 -0
  362. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/write_vtp.yaml +0 -0
  363. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/avalanche.yaml +0 -0
  364. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/clim_glacialindex.yaml +0 -0
  365. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/clim_oggm.yaml +0 -0
  366. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/clim_station.yaml +0 -0
  367. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/enthalpy.yaml +0 -0
  368. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/flow_accumulation.yaml +0 -0
  369. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/glerosion.yaml +0 -0
  370. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/particles.yaml +0 -0
  371. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/read_output.yaml +0 -0
  372. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/rockflow.yaml +0 -0
  373. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/smb_accpdd.yaml +0 -0
  374. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/smb_oggm.yaml +0 -0
  375. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/smb_simple.yaml +0 -0
  376. {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/time.yaml +0 -0
  377. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/__init__.py +0 -0
  378. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/include_icemask.py +0 -0
  379. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/__init__.py +0 -0
  380. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/arrange_data.py +0 -0
  381. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/make_input_file.py +0 -0
  382. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/masks_subentities.py +0 -0
  383. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/oggm_shop.py +0 -0
  384. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/oggm_util.py +0 -0
  385. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/open_gridded_data.py +0 -0
  386. {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/read_glathida.py +0 -0
  387. {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/__init__.py +0 -0
  388. {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/write_ts.py +0 -0
  389. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/avalanche/avalanche.py +0 -0
  390. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/clim_glacialindex/__init__.py +0 -0
  391. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/clim_oggm/__init__.py +0 -0
  392. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/clim_station/__init__.py +0 -0
  393. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/dissipation/__init__.py +0 -0
  394. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/dissipation/dissipation.py +0 -0
  395. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/__init__.py +0 -0
  396. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/drainage/__init__.py +0 -0
  397. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/drainage/drainage.py +0 -0
  398. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/drainage/utils.py +0 -0
  399. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/horizontal/__init__.py +0 -0
  400. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/horizontal/horizontal.py +0 -0
  401. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/horizontal/utils.py +0 -0
  402. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/solver.py +0 -0
  403. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/vertical/__init__.py +0 -0
  404. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/vertical/vertical.py +0 -0
  405. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/surface/__init__.py +0 -0
  406. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/surface/surface.py +0 -0
  407. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/surface/utils.py +0 -0
  408. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/temperature/__init__.py +0 -0
  409. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/temperature/temperature.py +0 -0
  410. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/temperature/utils.py +0 -0
  411. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/utils/__init__.py +0 -0
  412. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/flow_accumulation/__init__.py +0 -0
  413. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/flow_accumulation/flow_accumulation.py +0 -0
  414. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/gflex/__init__.py +0 -0
  415. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/gflex/gflex.py +0 -0
  416. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/glerosion/__init__.py +0 -0
  417. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/glerosion/glerosion.py +0 -0
  418. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/__init__.py +0 -0
  419. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/diagnostic/__init__.py +0 -0
  420. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/diagnostic/diagnostic.py +0 -0
  421. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/__init__.py +0 -0
  422. {igm_model-3.1.2/igm/processes/texture/pix2pixhd_model_assets → igm_model-3.2.0/igm/processes/iceflow/emulate/emulators}/__init__.py +0 -0
  423. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/f15_cfsflow_GJ_22_a/100/fieldin.dat +0 -0
  424. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/f15_cfsflow_GJ_22_a/100/fieldout.dat +0 -0
  425. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/f15_cfsflow_GJ_22_a/100/model.h5 +0 -0
  426. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/f15_cfsflow_GJ_22_a/200/fieldin.dat +0 -0
  427. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/f15_cfsflow_GJ_22_a/200/fieldout.dat +0 -0
  428. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/f15_cfsflow_GJ_22_a/200/model.h5 +0 -0
  429. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/f15_cfsflow_GJ_22_a/50/fieldin.dat +0 -0
  430. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/f15_cfsflow_GJ_22_a/50/fieldout.dat +0 -0
  431. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/f15_cfsflow_GJ_22_a/50/model.h5 +0 -0
  432. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_16_3_1_a/fieldin.dat +0 -0
  433. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_16_3_1_a/fieldout.dat +0 -0
  434. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_16_3_1_a/model.h5 +0 -0
  435. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_32_2_0_a/fieldin.dat +0 -0
  436. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_32_2_0_a/fieldout.dat +0 -0
  437. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_32_2_0_a/model.h5 +0 -0
  438. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_32_2_1_a/fieldin.dat +0 -0
  439. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_32_2_1_a/fieldout.dat +0 -0
  440. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_32_2_1_a/model.h5 +0 -0
  441. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_32_3_0_a/fieldin.dat +0 -0
  442. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_32_3_0_a/fieldout.dat +0 -0
  443. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_32_3_0_a/model.h5 +0 -0
  444. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_32_3_1_a/fieldin.dat +0 -0
  445. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_32_3_1_a/fieldout.dat +0 -0
  446. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_16_32_3_1_a/model.h5 +0 -0
  447. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_8_16_2_1_a/fieldin.dat +0 -0
  448. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_8_16_2_1_a/fieldout.dat +0 -0
  449. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_8_16_2_1_a/model.h5 +0 -0
  450. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_8_16_3_1_a/fieldin.dat +0 -0
  451. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_8_16_3_1_a/fieldout.dat +0 -0
  452. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_8_16_3_1_a/model.h5 +0 -0
  453. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_8_32_2_0_a/fieldin.dat +0 -0
  454. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_8_32_2_0_a/fieldout.dat +0 -0
  455. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_8_32_2_0_a/model.h5 +0 -0
  456. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_8_32_2_1_a/fieldin.dat +0 -0
  457. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_8_32_2_1_a/fieldout.dat +0 -0
  458. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_cnn_8_32_2_1_a/model.h5 +0 -0
  459. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_unet_16_32_2_1_a/fieldin.dat +0 -0
  460. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_unet_16_32_2_1_a/fieldout.dat +0 -0
  461. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_10_4_unet_16_32_2_1_a/model.h5 +0 -0
  462. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_30_4_cnn_12_32_3_1_a/fieldin.dat +0 -0
  463. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_30_4_cnn_12_32_3_1_a/fieldout.dat +0 -0
  464. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_30_4_cnn_12_32_3_1_a/model.h5 +0 -0
  465. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulators/pinnbp_5_4_cnn_16_32_2_1_e/model.h5 +0 -0
  466. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/utils/__init__.py +0 -0
  467. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/utils/misc.py +0 -0
  468. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/utils/networks.py +0 -0
  469. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/__init__.py +0 -0
  470. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/components/__init__.py +0 -0
  471. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/components/energy.py +0 -0
  472. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/components/gravity.py +0 -0
  473. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/energy.py +0 -0
  474. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/horizontal/__init__.py +0 -0
  475. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/horizontal/horizontal.py +0 -0
  476. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/horizontal/horizontal_central.py +0 -0
  477. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/horizontal/horizontal_mac.py +0 -0
  478. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/horizontal/horizontal_p1.py +0 -0
  479. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/solve/__init__.py +0 -0
  480. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/solve/evaluator.py +0 -0
  481. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/__init__.py +0 -0
  482. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/__init__.py +0 -0
  483. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/bc.py +0 -0
  484. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/dirichlet.py +0 -0
  485. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/frozen_bed.py +0 -0
  486. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/__init__.py +0 -0
  487. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/dirichlet.py +0 -0
  488. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/frozen_bed.py +0 -0
  489. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/interface.py +0 -0
  490. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/no_inflow.py +0 -0
  491. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/periodic_ns.py +0 -0
  492. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/periodic_we.py +0 -0
  493. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/no_inflow.py +0 -0
  494. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/periodic_ns.py +0 -0
  495. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/periodic_we.py +0 -0
  496. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/utils.py +0 -0
  497. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/evaluator/__init__.py +0 -0
  498. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/__init__.py +0 -0
  499. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/abs_tol.py +0 -0
  500. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/criterion.py +0 -0
  501. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/inf.py +0 -0
  502. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/nan.py +0 -0
  503. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/patience.py +0 -0
  504. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/rel_tol.py +0 -0
  505. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/threshold.py +0 -0
  506. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/debug_state.py +0 -0
  507. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/interface_halt.py +0 -0
  508. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/__init__.py +0 -0
  509. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/cost.py +0 -0
  510. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/grad_theta_norm.py +0 -0
  511. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/grad_u_norm.py +0 -0
  512. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/metric.py +0 -0
  513. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/theta.py +0 -0
  514. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/u.py +0 -0
  515. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/step_state.py +0 -0
  516. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/identity.py +0 -0
  517. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/interfaces/identity.py +0 -0
  518. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/interfaces/interface.py +0 -0
  519. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/mapping.py +0 -0
  520. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/normalizer.py +0 -0
  521. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/transforms.py +0 -0
  522. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/utils.py +0 -0
  523. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/cg.py +0 -0
  524. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/da_progress_optimizer.py +0 -0
  525. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/cg_newton.py +0 -0
  526. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/interface.py +0 -0
  527. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/muon.py +0 -0
  528. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/newton.py +0 -0
  529. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/sequential.py +0 -0
  530. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/soap.py +0 -0
  531. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/trust_region.py +0 -0
  532. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/line_searches/__init__.py +0 -0
  533. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/line_searches/armijo.py +0 -0
  534. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/line_searches/line_search.py +0 -0
  535. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/line_searches/wolfe.py +0 -0
  536. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/muon.py +0 -0
  537. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/optimizer.py +0 -0
  538. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/progress_optimizer.py +0 -0
  539. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/sequential.py +0 -0
  540. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/soap.py +0 -0
  541. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/utils/__init__.py +0 -0
  542. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/utils/synthetic_costs.py +0 -0
  543. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/solver/__init__.py +0 -0
  544. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/utils.py +0 -0
  545. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/utils/__init__.py +0 -0
  546. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/utils/velocities.py +0 -0
  547. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/utils/vertical_discretization.py +0 -0
  548. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/__init__.py +0 -0
  549. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/enthalpy.py +0 -0
  550. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/utils.py +0 -0
  551. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/utils_lagrange.py +0 -0
  552. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/utils_legendre.py +0 -0
  553. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/utils_molho.py +0 -0
  554. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/vertical.py +0 -0
  555. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/vertical_lagrange.py +0 -0
  556. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/vertical_legendre.py +0 -0
  557. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/vertical_ssa.py +0 -0
  558. /igm_model-3.1.2/igm/processes/vert_flow/vert_flow_legendre.py → /igm_model-3.2.0/igm/processes/iceflow/vertical_velocity/vertical_velocity_legendre.py +0 -0
  559. /igm_model-3.1.2/igm/processes/vert_flow/vert_flow_v3.py → /igm_model-3.2.0/igm/processes/iceflow/vertical_velocity/vertical_velocity_v3.py +0 -0
  560. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/__init__.py +0 -0
  561. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/remove_particles.py +0 -0
  562. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/seeding_particles.py +0 -0
  563. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/update_particles.py +0 -0
  564. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/utils.py +0 -0
  565. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/utils_cuda.py +0 -0
  566. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/utils_cupy.py +0 -0
  567. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/utils_interp.py +0 -0
  568. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/utils_tf.py +0 -0
  569. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/write_particle_cudf.py +0 -0
  570. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/write_particle_numpy.py +0 -0
  571. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/read_output/__init__.py +0 -0
  572. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/rockflow/__init__.py +0 -0
  573. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/rockflow/rockflow.py +0 -0
  574. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/smb_accpdd/__init__.py +0 -0
  575. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/smb_oggm/__init__.py +0 -0
  576. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/smb_simple/__init__.py +0 -0
  577. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/__init__.py +0 -0
  578. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/constants.py +0 -0
  579. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/emulator.py +0 -0
  580. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/exporter.py +0 -0
  581. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/image_data.py +0 -0
  582. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/normalizer.py +0 -0
  583. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd.py +0 -0
  584. {igm_model-3.1.2/igm/processes/texture/pix2pixhd_model_assets/layer_functions → igm_model-3.2.0/igm/processes/texture/pix2pixhd_model_assets}/__init__.py +0 -0
  585. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd_model_assets/generator.py +0 -0
  586. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd_model_assets/layer_functions/bilinear_upsampling.py +0 -0
  587. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd_model_assets/layer_functions/reflection_pad2d.py +0 -0
  588. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd_model_assets/layer_functions/resnet_block.py +0 -0
  589. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd_model_assets/layer_functions/tanh.py +0 -0
  590. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd_model_assets/loading.py +0 -0
  591. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/preparer.py +0 -0
  592. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/texture.py +0 -0
  593. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/utils.py +0 -0
  594. {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/time/__init__.py +0 -0
  595. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/__init__.py +0 -0
  596. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/grad/__init__.py +0 -0
  597. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/grad/compute_divflux.py +0 -0
  598. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/grad/compute_divflux_slope_limiter.py +0 -0
  599. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/grad/compute_upwind_gradient_tf.py +0 -0
  600. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/grad/grad.py +0 -0
  601. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/grad/strain_rate.py +0 -0
  602. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/__init__.py +0 -0
  603. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/gaussian_filter_tf.py +0 -0
  604. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/getmag.py +0 -0
  605. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/getmag3d.py +0 -0
  606. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/interp1d_tf.py +0 -0
  607. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/interpolate_bilinear_tf.py +0 -0
  608. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/norms.py +0 -0
  609. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/precision.py +0 -0
  610. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/optuna_hooks.py +0 -0
  611. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/profiling.py +0 -0
  612. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/stag/__init__.py +0 -0
  613. {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/stag/stag.py +0 -0
  614. {igm_model-3.1.2 → igm_model-3.2.0}/igm_model.egg-info/dependency_links.txt +0 -0
  615. {igm_model-3.1.2 → igm_model-3.2.0}/igm_model.egg-info/entry_points.txt +0 -0
  616. {igm_model-3.1.2 → igm_model-3.2.0}/igm_model.egg-info/top_level.txt +0 -0
  617. {igm_model-3.1.2 → igm_model-3.2.0}/setup.cfg +0 -0
@@ -0,0 +1,62 @@
1
+ Metadata-Version: 2.4
2
+ Name: igm-model
3
+ Version: 3.2.0
4
+ Summary: IGM - a glacier evolution model
5
+ Home-page: https://igm-model.org/
6
+ Author: IGM authors
7
+ Author-email: guillaume.jouvet@unil.ch
8
+ License: gpl-3.0
9
+ Description-Content-Type: text/markdown
10
+ License-File: LICENSE
11
+ Requires-Dist: tensorflow[and-cuda]==2.17.0
12
+ Requires-Dist: matplotlib
13
+ Requires-Dist: scipy
14
+ Requires-Dist: netCDF4>=1.6.5
15
+ Requires-Dist: xarray
16
+ Requires-Dist: rasterio
17
+ Requires-Dist: pyproj
18
+ Requires-Dist: geopandas
19
+ Requires-Dist: oggm
20
+ Requires-Dist: salem
21
+ Requires-Dist: pyyaml
22
+ Requires-Dist: importlib_resources
23
+ Requires-Dist: tqdm
24
+ Requires-Dist: hydra-core
25
+ Requires-Dist: omegaconf
26
+ Requires-Dist: nvtx
27
+ Requires-Dist: typeguard
28
+ Requires-Dist: rich
29
+ Requires-Dist: optuna>=3.0
30
+ Provides-Extra: dev
31
+ Requires-Dist: pytest; extra == "dev"
32
+ Dynamic: author
33
+ Dynamic: author-email
34
+ Dynamic: description
35
+ Dynamic: description-content-type
36
+ Dynamic: home-page
37
+ Dynamic: license
38
+ Dynamic: license-file
39
+ Dynamic: provides-extra
40
+ Dynamic: requires-dist
41
+ Dynamic: summary
42
+
43
+ <div align="center">
44
+
45
+ <h1>The Instructed Glacier Model (IGM)</h1>
46
+
47
+ <img src="logo/logo_igm.svg" width="40%" alt="IGM logo">
48
+
49
+ [![CI](https://github.com/instructed-glacier-model/igm/actions/workflows/ci.yml/badge.svg)](https://github.com/instructed-glacier-model/igm/actions/workflows/ci.yml)
50
+ [![PyPI version](https://img.shields.io/pypi/v/igm-model.svg)](https://pypi.org/project/igm-model/)
51
+ [![Python](https://img.shields.io/badge/python-3.9%20|%203.10-blue)](https://pypi.org/project/igm-model/)
52
+ [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
53
+ [![Documentation](https://img.shields.io/badge/docs-igm--model.org-blue)](https://igm-model.org)
54
+
55
+ </div>
56
+
57
+ IGM is an accessible, differentiable, modular, and GPU-accelerated ice flow model.
58
+
59
+ **Full documentation → [igm-model.org](https://igm-model.org)**
60
+
61
+ ---
62
+ Looking for version 2 or earlier? See the [legacy wiki](https://github.com/jouvetg/igm/wiki).
@@ -0,0 +1,20 @@
1
+ <div align="center">
2
+
3
+ <h1>The Instructed Glacier Model (IGM)</h1>
4
+
5
+ <img src="logo/logo_igm.svg" width="40%" alt="IGM logo">
6
+
7
+ [![CI](https://github.com/instructed-glacier-model/igm/actions/workflows/ci.yml/badge.svg)](https://github.com/instructed-glacier-model/igm/actions/workflows/ci.yml)
8
+ [![PyPI version](https://img.shields.io/pypi/v/igm-model.svg)](https://pypi.org/project/igm-model/)
9
+ [![Python](https://img.shields.io/badge/python-3.9%20|%203.10-blue)](https://pypi.org/project/igm-model/)
10
+ [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
11
+ [![Documentation](https://img.shields.io/badge/docs-igm--model.org-blue)](https://igm-model.org)
12
+
13
+ </div>
14
+
15
+ IGM is an accessible, differentiable, modular, and GPU-accelerated ice flow model.
16
+
17
+ **Full documentation → [igm-model.org](https://igm-model.org)**
18
+
19
+ ---
20
+ Looking for version 2 or earlier? See the [legacy wiki](https://github.com/jouvetg/igm/wiki).
@@ -3,6 +3,7 @@
3
3
  # os.environ.setdefault("TF_CPP_MIN_LOG_LEVEL", "3")
4
4
 
5
5
  from . import processes
6
+ from . import assimilations
6
7
  from . import inputs, outputs
7
8
  from . import common
8
9
  try:
@@ -7,6 +7,11 @@ def infer_params_cook(state, cfg):
7
7
  #This is probably not a good idea, because the values of both parameters do not depend solely on the velocity at that point. But feel free to try! If you do
8
8
  #want to do that, you'll also need to un-comment the code block for smoothing and then converting the smoothed weights back to tensors (you may also want to
9
9
  #visualise the figures!), and set up a state.convexity_weights field to act as the 2D array
10
+ if getattr(state, "da_friction", "slidingco") != "slidingco":
11
+ raise NotImplementedError(
12
+ "cook/infer_params is currently slidingco-only; either use "
13
+ "control_list with 'slidingco' or disable cook.infer_params."
14
+ )
10
15
  import scipy
11
16
 
12
17
  #Get list of G entities in each C/get multi-valued ice mask
@@ -17,7 +22,7 @@ def infer_params_cook(state, cfg):
17
22
  state.convexity_weights = tf.experimental.numpy.copy(state.icemaskobs)
18
23
  state.volumes = tf.experimental.numpy.copy(state.icemaskobs)
19
24
  state.volume_weights = tf.experimental.numpy.copy(state.icemaskobs)
20
- state.volume_weights = tf.where(state.icemaskobs > 0, cfg.processes.data_assimilation.opti_vol_std, 0.0)
25
+ state.volume_weights = tf.where(state.icemaskobs > 0, cfg.assimilations.data_assimilation.opti_vol_std, 0.0)
21
26
 
22
27
 
23
28
  #Get some initial information
@@ -92,7 +97,7 @@ def infer_params_cook(state, cfg):
92
97
  AvgSlope = np.round(tf.reduce_max(state.slopes[state.icemaskobs==i]).numpy(), decimals=1)
93
98
  #print("Average Slope is: ", AvgSlope)
94
99
 
95
- Tidewater = cfg.processes.data_assimilation.opti_tidewater_glacier
100
+ Tidewater = cfg.assimilations.data_assimilation.opti_tidewater_glacier
96
101
 
97
102
  #Do regressions
98
103
  if hasattr(state, "tidewatermask"):
@@ -10,7 +10,7 @@ from igm.utils.grad.compute_divflux import compute_divflux
10
10
  def cost_divfluxfcz(cfg,state,i):
11
11
 
12
12
  divflux = compute_divflux(
13
- state.ubar, state.vbar, state.thk, state.dx, state.dx, method=cfg.processes.data_assimilation.divflux.method
13
+ state.ubar, state.vbar, state.thk, state.dx, state.dx, method=cfg.assimilations.data_assimilation.divflux.method
14
14
  )
15
15
 
16
16
  ACT = state.icemaskobs > 0.5
@@ -28,12 +28,12 @@ def cost_divfluxfcz(cfg,state,i):
28
28
 
29
29
  ACT = state.icemaskobs > 0.5
30
30
  COST_D = 0.5 * tf.reduce_mean(
31
- ((divfluxtar[ACT] - divflux[ACT]) / cfg.processes.data_assimilation.fitting.divfluxobs_std) ** 2
31
+ ((divfluxtar[ACT] - divflux[ACT]) / cfg.assimilations.data_assimilation.fitting.divfluxobs_std) ** 2
32
32
  )
33
33
 
34
- if cfg.processes.data_assimilation.divflux.force_zero_sum:
34
+ if cfg.assimilations.data_assimilation.divflux.force_zero_sum:
35
35
  ACT = state.icemaskobs > 0.5
36
- COST_D += 0.5 * 1000 * tf.reduce_mean(divflux[ACT] / cfg.processes.data_assimilation.fitting.divfluxobs_std) ** 2
36
+ COST_D += 0.5 * 1000 * tf.reduce_mean(divflux[ACT] / cfg.assimilations.data_assimilation.fitting.divfluxobs_std) ** 2
37
37
 
38
38
  return COST_D
39
39
 
@@ -9,21 +9,21 @@ from igm.utils.grad.compute_divflux import compute_divflux
9
9
  def cost_divfluxobs(cfg,state,i):
10
10
 
11
11
  divflux = compute_divflux(
12
- state.ubar, state.vbar, state.thk, state.dx, state.dx, method=cfg.processes.data_assimilation.divflux.method
12
+ state.ubar, state.vbar, state.thk, state.dx, state.dx, method=cfg.assimilations.data_assimilation.divflux.method
13
13
  )
14
14
 
15
15
  divfluxtar = state.divfluxobs
16
16
  ACT = ~tf.math.is_nan(divfluxtar)
17
17
  COST_D = 0.5 * tf.reduce_mean(
18
- ((divfluxtar[ACT] - divflux[ACT]) / cfg.processes.data_assimilation.fitting.divfluxobs_std) ** 2
18
+ ((divfluxtar[ACT] - divflux[ACT]) / cfg.assimilations.data_assimilation.fitting.divfluxobs_std) ** 2
19
19
  )
20
20
 
21
21
  dddx = (divflux[:, 1:] - divflux[:, :-1])/state.dx
22
22
  dddy = (divflux[1:, :] - divflux[:-1, :])/state.dx
23
- COST_D += (cfg.processes.data_assimilation.regularization.divflux) * 0.5 * ( tf.reduce_mean(dddx**2) + tf.reduce_mean(dddy**2) )
23
+ COST_D += (cfg.assimilations.data_assimilation.regularization.divflux) * 0.5 * ( tf.reduce_mean(dddx**2) + tf.reduce_mean(dddy**2) )
24
24
 
25
- if cfg.processes.data_assimilation.divflux.force_zero_sum:
25
+ if cfg.assimilations.data_assimilation.divflux.force_zero_sum:
26
26
  ACT = state.icemaskobs > 0.5
27
- COST_D += 0.5 * 1000 * tf.reduce_mean(divflux[ACT] / cfg.processes.data_assimilation.fitting.divfluxobs_std) ** 2
27
+ COST_D += 0.5 * 1000 * tf.reduce_mean(divflux[ACT] / cfg.assimilations.data_assimilation.fitting.divfluxobs_std) ** 2
28
28
 
29
29
  return COST_D
@@ -11,6 +11,6 @@ def misfit_thk(cfg,state):
11
11
  ACT = ~tf.math.is_nan(state.thkobs)
12
12
 
13
13
  return 0.5 * tf.reduce_mean( state.dens_thkobs[ACT] *
14
- ((state.thkobs[ACT] - state.thk[ACT]) / cfg.processes.data_assimilation.fitting.thkobs_std) ** 2
14
+ ((state.thkobs[ACT] - state.thk[ACT]) / cfg.assimilations.data_assimilation.fitting.thkobs_std) ** 2
15
15
  )
16
16
 
@@ -12,7 +12,7 @@ def misfit_usurf(cfg,state):
12
12
  return 0.5 * tf.reduce_mean(
13
13
  (
14
14
  (state.usurf[ACT] - state.usurfobs[ACT])
15
- / cfg.processes.data_assimilation.fitting.usurfobs_std
15
+ / cfg.assimilations.data_assimilation.fitting.usurfobs_std
16
16
  )
17
17
  ** 2
18
18
  )
@@ -10,15 +10,15 @@ def misfit_velsurf(cfg,state):
10
10
  velsurf = tf.stack([state.uvelsurf, state.vvelsurf], axis=-1)
11
11
  velsurfobs = tf.stack([state.uvelsurfobs, state.vvelsurfobs], axis=-1)
12
12
 
13
- REL = tf.expand_dims( (tf.norm(velsurfobs,axis=-1) >= cfg.processes.data_assimilation.fitting.velsurfobs_thr ) , axis=-1)
13
+ REL = tf.expand_dims( (tf.norm(velsurfobs,axis=-1) >= cfg.assimilations.data_assimilation.fitting.velsurfobs_thr ) , axis=-1)
14
14
 
15
15
  ACT = ~tf.math.is_nan(velsurfobs)
16
16
 
17
17
  cost = 0.5 * tf.reduce_mean(
18
- ( (velsurfobs[ACT & REL] - velsurf[ACT & REL]) / cfg.processes.data_assimilation.fitting.velsurfobs_std )** 2
18
+ ( (velsurfobs[ACT & REL] - velsurf[ACT & REL]) / cfg.assimilations.data_assimilation.fitting.velsurfobs_std )** 2
19
19
  )
20
20
 
21
- if cfg.processes.data_assimilation.fitting.include_low_speed_term:
21
+ if cfg.assimilations.data_assimilation.fitting.include_low_speed_term:
22
22
 
23
23
  # This terms penalize the cost function when the velocity is low
24
24
  # Reference : Inversion of basal friction in Antarctica using exact and incompleteadjoints of a higher-order model
@@ -11,4 +11,4 @@ def misfit_vol(cfg,state):
11
11
 
12
12
  volmod = tf.reduce_sum(state.thk)
13
13
 
14
- return 0.5 * ( ( voltar - volmod ) / (voltar * cfg.processes.data_assimilation.fitting.volobsprop_std ) )** 2
14
+ return 0.5 * ( ( voltar - volmod ) / (voltar * cfg.assimilations.data_assimilation.fitting.volobsprop_std ) )** 2
@@ -12,16 +12,16 @@ def regu_arrhenius(cfg,state):
12
12
  dadx = (state.arrhenius[:, 1:] - state.arrhenius[:, :-1])/state.dx
13
13
  dady = (state.arrhenius[1:, :] - state.arrhenius[:-1, :])/state.dx
14
14
 
15
- if cfg.processes.data_assimilation.optimization.sole_mask:
15
+ if cfg.assimilations.data_assimilation.optimization.sole_mask:
16
16
  dadx = tf.where( (state.icemaskobs[:, 1:] == 1) & (state.icemaskobs[:, :-1] == 1) , dadx, 0.0)
17
17
  dady = tf.where( (state.icemaskobs[1:, :] == 1) & (state.icemaskobs[:-1, :] == 1) , dady, 0.0)
18
18
 
19
- if cfg.processes.data_assimilation.optimization.fix_opti_normalization_issue:
20
- REGU_S = (cfg.processes.data_assimilation.regularization.arrhenius) * 0.5 * (
19
+ if cfg.assimilations.data_assimilation.optimization.fix_opti_normalization_issue:
20
+ REGU_S = (cfg.assimilations.data_assimilation.regularization.arrhenius) * 0.5 * (
21
21
  tf.math.reduce_mean(dadx**2) + tf.math.reduce_mean(dady**2)
22
22
  )
23
23
  else:
24
- REGU_S = (cfg.processes.data_assimilation.regularization.arrhenius) * (
24
+ REGU_S = (cfg.assimilations.data_assimilation.regularization.arrhenius) * (
25
25
  tf.nn.l2_loss(dadx) + tf.nn.l2_loss(dady)
26
26
  )
27
27
 
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env python3
2
+
3
+ # Copyright (C) 2021-2025 IGM authors
4
+ # Published under the GNU GPL (Version 3), check at the LICENSE file
5
+
6
+ import tensorflow as tf
7
+ import numpy as np
8
+
9
+
10
+ def regu_slidingco(cfg, state):
11
+ """Regularization on the friction control (slidingco or tau_ref).
12
+
13
+ The control name is resolved at DA init (see resolve_friction_name in
14
+ data_assimilation/utils.py) and stashed on state.da_friction.
15
+ The matching weight is read from
16
+ cfg.assimilations.data_assimilation.regularization[<control_name>].
17
+ """
18
+ fric = state.da_friction
19
+ field = getattr(state, fric)
20
+ weight = cfg.assimilations.data_assimilation.regularization[fric]
21
+
22
+ dadx = (field[:, 1:] - field[:, :-1]) / state.dx
23
+ dady = (field[1:, :] - field[:-1, :]) / state.dx
24
+
25
+ if cfg.assimilations.data_assimilation.optimization.sole_mask:
26
+ dadx = tf.where((state.icemaskobs[:, 1:] == 1) & (state.icemaskobs[:, :-1] == 1), dadx, 0.0)
27
+ dady = tf.where((state.icemaskobs[1:, :] == 1) & (state.icemaskobs[:-1, :] == 1), dady, 0.0)
28
+
29
+ if cfg.assimilations.data_assimilation.regularization.smooth_anisotropy_factor_sl == 1:
30
+ if cfg.assimilations.data_assimilation.optimization.fix_opti_normalization_issue:
31
+ REGU_S = weight * 0.5 * (
32
+ tf.math.reduce_mean(dadx**2) + tf.math.reduce_mean(dady**2)
33
+ )
34
+ else:
35
+ REGU_S = weight * (
36
+ tf.nn.l2_loss(dadx) + tf.nn.l2_loss(dady)
37
+ )
38
+ else:
39
+ dadx = (field[:, 1:] - field[:, :-1]) / state.dx
40
+ dadx = (dadx[1:, :] + dadx[:-1, :]) / 2.0
41
+ dady = (field[1:, :] - field[:-1, :]) / state.dx
42
+ dady = (dady[:, 1:] + dady[:, :-1]) / 2.0
43
+
44
+ if cfg.assimilations.data_assimilation.optimization.sole_mask:
45
+ MASK = (state.icemaskobs[1:, 1:] > 0.5) & (state.icemaskobs[1:, :-1] > 0.5) & (state.icemaskobs[:-1, 1:] > 0.5) & (state.icemaskobs[:-1, :-1] > 0.5)
46
+ dadx = tf.where(MASK, dadx, 0.0)
47
+ dady = tf.where(MASK, dady, 0.0)
48
+
49
+ if cfg.assimilations.data_assimilation.optimization.fix_opti_normalization_issue:
50
+ REGU_S = weight * 0.5 * (
51
+ (1.0 / np.sqrt(cfg.assimilations.data_assimilation.regularization.smooth_anisotropy_factor_sl))
52
+ * tf.math.reduce_mean((dadx * state.flowdirx + dady * state.flowdiry)**2)
53
+ + np.sqrt(cfg.assimilations.data_assimilation.regularization.smooth_anisotropy_factor_sl)
54
+ * tf.math.reduce_mean((dadx * state.flowdiry - dady * state.flowdirx)**2)
55
+ )
56
+ else:
57
+ REGU_S = weight * (
58
+ (1.0 / np.sqrt(cfg.assimilations.data_assimilation.regularization.smooth_anisotropy_factor_sl))
59
+ * tf.nn.l2_loss((dadx * state.flowdirx + dady * state.flowdiry))
60
+ + np.sqrt(cfg.assimilations.data_assimilation.regularization.smooth_anisotropy_factor_sl)
61
+ * tf.nn.l2_loss((dadx * state.flowdiry - dady * state.flowdirx)))
62
+
63
+ return REGU_S
@@ -0,0 +1,207 @@
1
+ #!/usr/bin/env python3
2
+
3
+ # Copyright (C) 2021-2025 IGM authors
4
+ # Published under the GNU GPL (Version 3), check at the LICENSE file
5
+
6
+ import numpy as np
7
+ import tensorflow as tf
8
+ from igm.assimilations.data_assimilation.utils import ave4
9
+
10
+ def regu_thk(cfg,state):
11
+ if cfg.assimilations.data_assimilation.regularization.thk_version == 1:
12
+ return regu_thk_v1(cfg,state)
13
+ elif cfg.assimilations.data_assimilation.regularization.thk_version == 2:
14
+ return regu_thk_v2(cfg,state)
15
+
16
+ #######################################
17
+
18
+ def regu_thk_v1(cfg,state):
19
+
20
+ areaicemask = tf.reduce_sum(tf.where(state.icemask>0.5,1.0,0.0))*state.dx**2
21
+
22
+ # here we had factor 8*np.pi*0.04, which is equal to 1
23
+ if cfg.assimilations.data_assimilation.cook.infer_params:
24
+ gamma = tf.zeros_like(state.thk)
25
+ gamma = state.convexity_weights * areaicemask**(cfg.assimilations.data_assimilation.regularization.convexity_power-2.0)
26
+ else:
27
+ gamma = cfg.assimilations.data_assimilation.regularization.convexity_weight * areaicemask**(cfg.assimilations.data_assimilation.regularization.convexity_power-2.0)
28
+
29
+ if cfg.assimilations.data_assimilation.regularization.to_regularize == 'topg':
30
+ field = state.usurf - state.thk
31
+ elif cfg.assimilations.data_assimilation.regularization.to_regularize == 'thk':
32
+ field = state.thk
33
+
34
+ if cfg.assimilations.data_assimilation.regularization.smooth_anisotropy_factor == 1:
35
+ dbdx = (field[:, 1:] - field[:, :-1])/state.dx
36
+ dbdy = (field[1:, :] - field[:-1, :])/state.dx
37
+
38
+ if cfg.assimilations.data_assimilation.optimization.sole_mask:
39
+ dbdx = tf.where( (state.icemaskobs[:, 1:] > 0.5) & (state.icemaskobs[:, :-1] > 0.5) , dbdx, 0.0)
40
+ dbdy = tf.where( (state.icemaskobs[1:, :] > 0.5) & (state.icemaskobs[:-1, :] > 0.5) , dbdy, 0.0)
41
+
42
+ if cfg.assimilations.data_assimilation.optimization.fix_opti_normalization_issue:
43
+ REGU_H = (cfg.assimilations.data_assimilation.regularization.thk) * 0.5 * (
44
+ tf.math.reduce_mean(dbdx**2) + tf.math.reduce_mean(dbdy**2)
45
+ - gamma * tf.math.reduce_mean(state.thk)
46
+ )
47
+ else:
48
+ REGU_H = (cfg.assimilations.data_assimilation.regularization.thk) * (
49
+ tf.nn.l2_loss(dbdx) + tf.nn.l2_loss(dbdy)
50
+ - gamma * tf.math.reduce_sum(state.thk)
51
+ )
52
+ else:
53
+ state.flowdirx = ave4(state.flowdirx)
54
+ state.flowdiry = ave4(state.flowdiry)
55
+
56
+ dbdx = (field[:, 1:] - field[:, :-1])/state.dx
57
+ dbdx = (dbdx[1:, :] + dbdx[:-1, :]) / 2.0
58
+ dbdy = (field[1:, :] - field[:-1, :])/state.dx
59
+ dbdy = (dbdy[:, 1:] + dbdy[:, :-1]) / 2.0
60
+
61
+ if cfg.assimilations.data_assimilation.optimization.sole_mask:
62
+ MASK = (state.icemaskobs[1:, 1:] > 0.5) & (state.icemaskobs[1:, :-1] > 0.5) & (state.icemaskobs[:-1, 1:] > 0.5) & (state.icemaskobs[:-1, :-1] > 0.5)
63
+ dbdx = tf.where( MASK, dbdx, 0.0)
64
+ dbdy = tf.where( MASK, dbdy, 0.0)
65
+
66
+ if cfg.assimilations.data_assimilation.optimization.fix_opti_normalization_issue:
67
+ REGU_H = (cfg.assimilations.data_assimilation.regularization.thk) * 0.5 * (
68
+ (1.0/np.sqrt(cfg.assimilations.data_assimilation.regularization.smooth_anisotropy_factor))
69
+ * tf.math.reduce_mean((dbdx * state.flowdirx + dbdy * state.flowdiry)**2)
70
+ + np.sqrt(cfg.assimilations.data_assimilation.regularization.smooth_anisotropy_factor)
71
+ * tf.math.reduce_mean((dbdx * state.flowdiry - dbdy * state.flowdirx)**2)
72
+ - tf.math.reduce_mean(gamma*state.thk)
73
+ )
74
+ else:
75
+ REGU_H = (cfg.assimilations.data_assimilation.regularization.thk) * (
76
+ (1.0/np.sqrt(cfg.assimilations.data_assimilation.regularization.smooth_anisotropy_factor))
77
+ * tf.nn.l2_loss((dbdx * state.flowdirx + dbdy * state.flowdiry))
78
+ + np.sqrt(cfg.assimilations.data_assimilation.regularization.smooth_anisotropy_factor)
79
+ * tf.nn.l2_loss((dbdx * state.flowdiry - dbdy * state.flowdirx))
80
+ - tf.math.reduce_sum(gamma*state.thk)
81
+ )
82
+
83
+ return REGU_H
84
+
85
+ #######################################
86
+
87
+ def regu_thk_v2(cfg,state):
88
+
89
+ if cfg.assimilations.data_assimilation.regularization.to_regularize == 'topg':
90
+ field = state.usurf - state.thk
91
+ elif cfg.assimilations.data_assimilation.regularization.to_regularize == 'thk':
92
+ field = state.thk
93
+
94
+ # Comupute a rectification factor based on topg to favor
95
+ # deep ice in the ablation (against shallow in the accumulation)
96
+ if cfg.assimilations.data_assimilation.regularization.abl_acc_balance == 1:
97
+ rect = 1
98
+ else:
99
+ ELA = np.percentile(state.usurf[state.usurf > 0], 66.7, method="linear")
100
+ r_acc = cfg.assimilations.data_assimilation.regularization.abl_acc_balance
101
+ r_abl = 1/cfg.assimilations.data_assimilation.regularization.abl_acc_balance
102
+ w_acc = 0.5 * (1.0 + tf.math.tanh((state.usurf - ELA) / 100.0))
103
+ rect = (r_acc * w_acc + r_abl * (1.0 - w_acc))
104
+
105
+ anis_factor = cfg.assimilations.data_assimilation.regularization.smooth_anisotropy_factor
106
+
107
+ # Derivative stencils
108
+ kx, ky, kxx, kyy, kxy = _kernels(state.dx)
109
+
110
+ # 1st derivatives (gradient)
111
+ if cfg.assimilations.data_assimilation.regularization.thk_1st_der_disc_version == "new":
112
+ bx = _conv2(field, kx); by = _conv2(field, ky) # Derivatives of field
113
+ if cfg.assimilations.data_assimilation.optimization.sole_mask:
114
+ bx = tf.where( state.icemaskobs > 0.0, bx, 0.0)
115
+ by = tf.where( state.icemaskobs > 0.0, by, 0.0)
116
+ else: # do as in regu_thk_v1()
117
+ if anis_factor == 1:
118
+ bx = (field[:, 1:] - field[:, :-1])/state.dx
119
+ by = (field[1:, :] - field[:-1, :])/state.dx
120
+ if cfg.assimilations.data_assimilation.optimization.sole_mask:
121
+ bx = tf.where( (state.icemaskobs[:, 1:] > 0.5) & (state.icemaskobs[:, :-1] > 0.5) , bx, 0.0)
122
+ by = tf.where( (state.icemaskobs[1:, :] > 0.5) & (state.icemaskobs[:-1, :] > 0.5) , by, 0.0)
123
+ else:
124
+ bx = (field[:, 1:] - field[:, :-1])/state.dx
125
+ bx = (bx[1:, :] + bx[:-1, :]) / 2.0
126
+ by = (field[1:, :] - field[:-1, :])/state.dx
127
+ by = (by[:, 1:] + by[:, :-1]) / 2.0
128
+ if cfg.assimilations.data_assimilation.optimization.sole_mask:
129
+ MASK = (state.icemaskobs[1:, 1:] > 0.5) & (state.icemaskobs[1:, :-1] > 0.5) & (state.icemaskobs[:-1, 1:] > 0.5) & (state.icemaskobs[:-1, :-1] > 0.5)
130
+ bx = tf.where( MASK, bx, 0.0)
131
+ by = tf.where( MASK, by, 0.0)
132
+
133
+ # 2nd derivatives (Hessian)
134
+ bxx = _conv2(field, kxx); byy = _conv2(field, kyy); bxy = _conv2(field, kxy)
135
+ if cfg.assimilations.data_assimilation.optimization.sole_mask:
136
+ bxx = tf.where( state.icemaskobs > 0.0, bxx, 0.0)
137
+ byy = tf.where( state.icemaskobs > 0.0, byy, 0.0)
138
+ bxy = tf.where( state.icemaskobs > 0.0, bxy, 0.0)
139
+
140
+ alpha_2 = cfg.assimilations.data_assimilation.regularization.thk_2nd_der
141
+ alpha_1 = cfg.assimilations.data_assimilation.regularization.thk_1st_der
142
+ gamma = cfg.assimilations.data_assimilation.regularization.convexity_weight
143
+
144
+ if cfg.assimilations.data_assimilation.optimization.fix_opti_normalization_issue:
145
+ if anis_factor == 1:
146
+ R_1 = 0.5 * (tf.reduce_mean(tf.square(bx)) + tf.reduce_mean(tf.square(by)))
147
+ R_2 = 0.5 * rect * tf.reduce_mean(tf.square(bxx) + 2 * tf.square(bxy) + tf.square(byy))
148
+ else:
149
+ ux, uy = state.flowdirx, state.flowdiry
150
+ if cfg.assimilations.data_assimilation.regularization.thk_1st_der_disc_version == "new":
151
+ ux1, uy1 = ux, uy
152
+ else:
153
+ ux1, uy1 = ave4(ux), ave4(uy) # so that dims match bx and by
154
+
155
+ R_1 = 0.5 * tf.reduce_mean(tf.square(ux1*bx + uy1*by) + anis_factor * tf.square(uy1*bx - ux1*by))
156
+ R_2 = 0.5 * tf.reduce_mean(
157
+ tf.square(ux*ux*bxx + 2*ux*uy*bxy + uy*uy*byy) \
158
+ + 2 * anis_factor * tf.square(ux*uy*bxx + (uy*uy-ux*ux)*bxy + ux*uy*byy) \
159
+ + anis_factor * anis_factor * tf.square(uy*uy*bxx - 2*ux*uy*bxy + ux*ux*byy)
160
+ )
161
+ convexity_term = tf.reduce_mean(state.thk)
162
+
163
+ else:
164
+ if anis_factor == 1:
165
+ R_1 = tf.nn.l2_loss(bx) + tf.nn.l2_loss(by)
166
+ R_2 = tf.nn.l2_loss(bxx) + 2 * tf.nn.l2_loss(bxy) + tf.nn.l2_loss(byy)
167
+ else:
168
+ ux, uy = state.flowdirx, state.flowdiry
169
+ if cfg.assimilations.data_assimilation.regularization.thk_1st_der_disc_version == "new":
170
+ ux1, uy1 = ux, uy
171
+ else:
172
+ ux1, uy1 = ave4(ux), ave4(uy) # so that dims match bx and by
173
+ R_1 = tf.nn.l2_loss(ux1*bx + uy1*by) + anis_factor * tf.nn.l2_loss(uy1*bx - ux1*by)
174
+ R_2 = tf.nn.l2_loss(ux*ux*bxx + 2*ux*uy*bxy + uy*uy*byy) \
175
+ + 2 * anis_factor * tf.nn.l2_loss(ux*uy*bxx + (uy*uy-ux*ux)*bxy + ux*uy*byy) \
176
+ + anis_factor * anis_factor * tf.nn.l2_loss(uy*uy*bxx - 2*ux*uy*bxy + ux*ux*byy)
177
+ convexity_term = tf.reduce_sum(state.thk)
178
+
179
+ R = alpha_1 * R_1 + alpha_2 * R_2 - gamma * convexity_term
180
+ return R
181
+
182
+ def map_range(x,source_min, source_max, target_min, target_max):
183
+ return target_min + (x - source_min) / (source_max - source_min) * (target_max - target_min)
184
+
185
+ def _conv2(x, k):
186
+ """Apply 2D convolution to a 2D tensor."""
187
+ # Convert 2D tensor to 4D for conv2d: [batch, height, width, channels]
188
+ x_4d = tf.expand_dims(tf.expand_dims(x, 0), -1)
189
+
190
+ # Apply padding and convolution
191
+ pad = [[0,0], [1,1], [1,1], [0,0]] # 1 pixel on H and W
192
+ x_pad = tf.pad(x_4d, pad, mode="SYMMETRIC")
193
+ result = tf.nn.conv2d(x_pad, k, strides=1, padding='VALID')
194
+
195
+ # Convert back to 2D
196
+ return tf.squeeze(result, [0, 3])
197
+
198
+ def _kernels(dx: float):
199
+ """3×3 central-difference stencils."""
200
+ kx = tf.constant([[0.,0.,0.],[-1.,0.,1.],[0.,0.,0.]], tf.float32) / (2.0*dx)
201
+ ky = tf.constant([[0.,-1.,0.],[0., 0.,0.],[0., 1.,0.]], tf.float32) / (2.0*dx)
202
+ kxx = tf.constant([[0.,0.,0.],[1.,-2.,1.],[0.,0.,0.]], tf.float32) / (dx*dx)
203
+ kyy = tf.constant([[0.,1.,0.],[0.,-2.,0.],[0.,1.,0.]], tf.float32) / (dx*dx)
204
+ kxy = tf.constant([[ 1., 0.,-1.],[ 0., 0., 0.],[-1., 0., 1.]], tf.float32) / (4.0*dx*dx)
205
+ expand = lambda K: tf.reshape(K, [3,3,1,1])
206
+ return expand(kx), expand(ky), expand(kxx), expand(kyy), expand(kxy)
207
+
@@ -14,62 +14,65 @@ from .regu_arrhenius import regu_arrhenius
14
14
  def total_cost(cfg, state, cost, i):
15
15
 
16
16
  # misfit between surface velocity
17
- if "velsurf" in cfg.processes.data_assimilation.cost_list:
17
+ if "velsurf" in cfg.assimilations.data_assimilation.cost_list:
18
18
  cost["velsurf"] = misfit_velsurf(cfg,state)
19
19
 
20
20
  # misfit between ice thickness profiles
21
- if "thk" in cfg.processes.data_assimilation.cost_list:
21
+ if "thk" in cfg.assimilations.data_assimilation.cost_list:
22
22
  cost["thk"] = misfit_thk(cfg, state)
23
23
 
24
24
  # misfit between divergence of flux
25
- if ("divfluxfcz" in cfg.processes.data_assimilation.cost_list):
25
+ if ("divfluxfcz" in cfg.assimilations.data_assimilation.cost_list):
26
26
  cost["divflux"] = cost_divfluxfcz(cfg, state, i)
27
- elif ("divfluxobs" in cfg.processes.data_assimilation.cost_list):
27
+ elif ("divfluxobs" in cfg.assimilations.data_assimilation.cost_list):
28
28
  cost["divflux"] = cost_divfluxobs(cfg, state, i)
29
29
 
30
30
  # misfit between top ice surfaces
31
- if "usurf" in cfg.processes.data_assimilation.cost_list:
31
+ if "usurf" in cfg.assimilations.data_assimilation.cost_list:
32
32
  cost["usurf"] = misfit_usurf(cfg, state)
33
33
 
34
- if "volume_init" in cfg.processes.data_assimilation.cost_list:
34
+ if "volume_init" in cfg.assimilations.data_assimilation.cost_list:
35
35
  cost["volume"] = misfit_vol(cfg, state)
36
36
 
37
37
  # add penalty terms to force obstacle constraints
38
- if "penalty" in cfg.processes.data_assimilation.optimization.obstacle_constraint:
38
+ if "penalty" in cfg.assimilations.data_assimilation.optimization.obstacle_constraint:
39
39
 
40
40
  # force zero thikness outisde the mask
41
- if "icemask" in cfg.processes.data_assimilation.cost_list:
41
+ if "icemask" in cfg.assimilations.data_assimilation.cost_list:
42
42
  cost["icemask"] = 10**10 * tf.math.reduce_mean( tf.where(state.icemaskobs > 0.5, 0.0, state.thk**2) )
43
43
 
44
44
  # Here one enforces non-negative ice thickness
45
- if "thk" in cfg.processes.data_assimilation.control_list:
45
+ if "thk" in cfg.assimilations.data_assimilation.control_list:
46
46
  cost["thk_positive"] = \
47
47
  10**10 * tf.math.reduce_mean( tf.where(state.thk >= 0, 0.0, state.thk**2) )
48
48
 
49
- # Here one enforces non-negative slidinco
50
- if ("slidingco" in cfg.processes.data_assimilation.control_list) & \
51
- (not cfg.processes.data_assimilation.fitting.log_slidingco):
52
- cost["slidingco_positive"] = \
53
- 10**10 * tf.math.reduce_mean( tf.where(state.slidingco >= 0, 0.0, state.slidingco**2) )
49
+ # Here one enforces non-negative friction control (slidingco or tau_ref)
50
+ fric = state.da_friction
51
+ if (fric in cfg.assimilations.data_assimilation.control_list) & \
52
+ (not cfg.assimilations.data_assimilation.fitting.log_slidingco):
53
+ fric_field = getattr(state, fric)
54
+ cost[f"{fric}_positive"] = \
55
+ 10**10 * tf.math.reduce_mean( tf.where(fric_field >= 0, 0.0, fric_field**2) )
54
56
 
55
57
  # Here one enforces non-negative arrhenius
56
- if ("arrhenius" in cfg.processes.data_assimilation.control_list):
58
+ if ("arrhenius" in cfg.assimilations.data_assimilation.control_list):
57
59
  cost["arrhenius_positive"] = \
58
60
  10**10 * tf.math.reduce_mean( tf.where(state.arrhenius >= 1, 0.0, state.arrhenius**2) )
59
61
 
60
- if cfg.processes.data_assimilation.cook.infer_params:
62
+ if cfg.assimilations.data_assimilation.cook.infer_params:
61
63
  cost["volume"] = cost_vol(cfg, state)
62
64
 
63
65
  # Here one adds a regularization terms for the bed toporgraphy to the cost function
64
- if "thk" in cfg.processes.data_assimilation.control_list:
66
+ if "thk" in cfg.assimilations.data_assimilation.control_list:
65
67
  cost["thk_regu"] = regu_thk(cfg, state)
66
68
 
67
- # Here one adds a regularization terms for slidingco to the cost function
68
- if "slidingco" in cfg.processes.data_assimilation.control_list:
69
+ # Here one adds a regularization terms for the friction control
70
+ # (slidingco or tau_ref) to the cost function
71
+ if state.da_friction in cfg.assimilations.data_assimilation.control_list:
69
72
  cost["slid_regu"] = regu_slidingco(cfg, state)
70
73
 
71
74
  # Here one adds a regularization terms for arrhenius to the cost function
72
- if "arrhenius" in cfg.processes.data_assimilation.control_list:
75
+ if "arrhenius" in cfg.assimilations.data_assimilation.control_list:
73
76
  cost["arrh_regu"] = regu_arrhenius(cfg, state)
74
77
 
75
78
  return tf.reduce_sum(tf.convert_to_tensor(list(cost.values())))