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.
- igm_model-3.2.0/PKG-INFO +62 -0
- igm_model-3.2.0/README.md +20 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/__init__.py +1 -0
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cook/infer_params_cook.py +7 -2
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/cost_divfluxfcz.py +4 -4
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/cost_divfluxobs.py +5 -5
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/misfit_thk.py +1 -1
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/misfit_usurf.py +1 -1
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/misfit_velsurf.py +3 -3
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/misfit_vol.py +1 -1
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/regu_arrhenius.py +4 -4
- igm_model-3.2.0/igm/assimilations/data_assimilation/cost_terms/regu_slidingco.py +63 -0
- igm_model-3.2.0/igm/assimilations/data_assimilation/cost_terms/regu_thk.py +207 -0
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/total_cost.py +23 -20
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/data_assimilation.py +16 -14
- igm_model-3.2.0/igm/assimilations/data_assimilation/data_assimilation.yaml +6 -0
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/iceflow_dispatch.py +7 -1
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/optimize/initialize.py +16 -15
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/optimize/update.py +50 -39
- igm_model-3.2.0/igm/assimilations/data_assimilation/optimize/update_lbfgs.py +98 -0
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/outputs/output_ncdf.py +16 -16
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/outputs/plots.py +10 -10
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/outputs/prints.py +7 -5
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/utils.py +35 -4
- {igm_model-3.1.2/igm/processes/damage → igm_model-3.2.0/igm/assimilations/field_inversion}/__init__.py +1 -1
- igm_model-3.2.0/igm/assimilations/field_inversion/context.py +153 -0
- igm_model-3.2.0/igm/assimilations/field_inversion/field_inversion.py +135 -0
- igm_model-3.2.0/igm/assimilations/field_inversion/field_inversion.yaml +6 -0
- igm_model-3.2.0/igm/assimilations/field_inversion/objective.py +127 -0
- igm_model-3.2.0/igm/assimilations/field_inversion/outputs/__init__.py +1 -0
- igm_model-3.2.0/igm/assimilations/field_inversion/outputs/output_ncdf.py +144 -0
- igm_model-3.2.0/igm/assimilations/field_inversion/penalties.py +92 -0
- igm_model-3.2.0/igm/assimilations/field_inversion/phase_runner.py +305 -0
- igm_model-3.2.0/igm/assimilations/field_inversion/retraining.py +456 -0
- igm_model-3.2.0/igm/assimilations/field_inversion/terms.py +173 -0
- {igm_model-3.1.2/igm/processes/data_assimilation_SR → igm_model-3.2.0/igm/assimilations/field_inversion}/utils.py +62 -12
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/pretraining/cost_tmp.py +5 -5
- igm_model-3.2.0/igm/assimilations/pretraining/history.py +80 -0
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/pretraining/io_tfrecords.py +24 -19
- igm_model-3.2.0/igm/assimilations/pretraining/pretraining.py +185 -0
- igm_model-3.2.0/igm/assimilations/pretraining/pretraining.yaml +6 -0
- igm_model-3.2.0/igm/assimilations/pretraining/trainer.py +406 -0
- igm_model-3.2.0/igm/assimilations/pretraining/training_utils.py +156 -0
- igm_model-3.2.0/igm/assimilations/time_relaxation/__init__.py +1 -0
- igm_model-3.2.0/igm/assimilations/time_relaxation/time_relaxation.py +765 -0
- igm_model-3.2.0/igm/assimilations/time_relaxation/time_relaxation.yaml +6 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/__init__.py +3 -1
- igm_model-3.2.0/igm/common/aliases/__init__.py +56 -0
- igm_model-3.2.0/igm/common/aliases/descriptive.yaml +54 -0
- igm_model-3.2.0/igm/common/aliases/pism.yaml +43 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/core/src.py +27 -1
- igm_model-3.2.0/igm/common/fields.py +28 -0
- igm_model-3.2.0/igm/common/legacy.py +79 -0
- igm_model-3.2.0/igm/common/runner/__init__.py +13 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/runner/configuration/utils.py +40 -19
- igm_model-3.2.0/igm/common/runner/modules/__init__.py +7 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/runner/modules/loader.py +39 -4
- igm_model-3.2.0/igm/common/runner/modules/src.py +216 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/runner/modules/utils.py +4 -2
- {igm_model-3.1.2/igm/conf/processes → igm_model-3.2.0/igm/conf/assimilations}/data_assimilation.yaml +8 -5
- igm_model-3.2.0/igm/conf/assimilations/field_inversion.yaml +29 -0
- igm_model-3.2.0/igm/conf/assimilations/pretraining.yaml +32 -0
- igm_model-3.2.0/igm/conf/assimilations/time_relaxation.yaml +87 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/config.yaml +1 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/core.yaml +9 -2
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/inputs/load_ncdf.yaml +3 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/inputs/local.yaml +5 -2
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/live_dashboard.yaml +1 -0
- igm_model-3.2.0/igm/conf/processes/arrhenius.yaml +13 -0
- igm_model-3.2.0/igm/conf/processes/climate.yaml +77 -0
- igm_model-3.2.0/igm/conf/processes/enthalpy.yaml +27 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/iceflow.yaml +54 -35
- igm_model-3.2.0/igm/conf/processes/smb.yaml +40 -0
- igm_model-3.2.0/igm/conf/processes/subglacial_hydrology.yaml +30 -0
- igm_model-3.2.0/igm/conf/processes/thk.yaml +4 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/time.yaml +2 -1
- {igm_model-3.1.2/igm/conf_help/processes → igm_model-3.2.0/igm/conf_help/assimilations}/data_assimilation.yaml +55 -7
- igm_model-3.2.0/igm/conf_help/assimilations/field_inversion.yaml +87 -0
- igm_model-3.2.0/igm/conf_help/assimilations/pretraining.yaml +84 -0
- igm_model-3.2.0/igm/conf_help/assimilations/time_relaxation.yaml +47 -0
- igm_model-3.2.0/igm/conf_help/core.yaml +103 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/inputs/load_ncdf.yaml +9 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/inputs/local.yaml +9 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/live_dashboard.yaml +4 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/plot2d.yaml +1 -1
- igm_model-3.2.0/igm/conf_help/processes/arrhenius.yaml +32 -0
- igm_model-3.2.0/igm/conf_help/processes/climate.yaml +152 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/gflex.yaml +1 -1
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/iceflow.yaml +99 -68
- igm_model-3.2.0/igm/conf_help/processes/smb.yaml +75 -0
- igm_model-3.2.0/igm/conf_help/processes/subglacial_hydrology.yaml +40 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/texture.yaml +3 -3
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/thk.yaml +1 -5
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/igm_run.py +52 -21
- igm_model-3.2.0/igm/inputs/complete_data.py +65 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/load_ncdf.py +3 -3
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/load_tif.py +1 -1
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/local.py +20 -3
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/instructed_oggm.py +10 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/live_dashboard.py +13 -9
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/local.py +49 -35
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/plot2d.py +2 -2
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/write_ncdf.py +24 -10
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/write_tif.py +4 -4
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/write_vtp.py +1 -1
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/__init__.py +9 -1
- igm_model-3.2.0/igm/processes/arrhenius/__init__.py +1 -0
- igm_model-3.2.0/igm/processes/arrhenius/arrhenius.py +156 -0
- igm_model-3.2.0/igm/processes/arrhenius/arrhenius.yaml +6 -0
- igm_model-3.2.0/igm/processes/avalanche/__init__.py +1 -0
- igm_model-3.2.0/igm/processes/avalanche/avalanche.yaml +6 -0
- igm_model-3.2.0/igm/processes/clim_glacialindex/clim_glacialindex.py +47 -0
- igm_model-3.2.0/igm/processes/clim_glacialindex/clim_glacialindex.yaml +6 -0
- igm_model-3.2.0/igm/processes/clim_oggm/clim_oggm.py +48 -0
- igm_model-3.2.0/igm/processes/clim_oggm/clim_oggm.yaml +6 -0
- igm_model-3.2.0/igm/processes/clim_station/clim_station.py +44 -0
- igm_model-3.2.0/igm/processes/clim_station/clim_station.yaml +5 -0
- igm_model-3.2.0/igm/processes/climate/__init__.py +1 -0
- igm_model-3.2.0/igm/processes/climate/climate.py +23 -0
- igm_model-3.2.0/igm/processes/climate/climate.yaml +6 -0
- igm_model-3.2.0/igm/processes/climate/glacialindex/__init__.py +1 -0
- 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
- igm_model-3.2.0/igm/processes/climate/oggm/__init__.py +1 -0
- 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
- igm_model-3.2.0/igm/processes/climate/simple/__init__.py +1 -0
- igm_model-3.2.0/igm/processes/climate/simple/simple.py +91 -0
- igm_model-3.2.0/igm/processes/climate/station/__init__.py +1 -0
- 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
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/__init__.py +2 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/dissipation/utils.py +57 -6
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/enthalpy.py +23 -34
- igm_model-3.2.0/igm/processes/enthalpy/enthalpy.yaml +7 -0
- igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/__init__.py +1 -0
- igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/assembly.py +82 -0
- igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/bc.py +68 -0
- igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/diffusivity.py +40 -0
- igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/melt.py +81 -0
- igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/solver.py +55 -0
- igm_model-3.2.0/igm/processes/enthalpy/solver/vertical/utils/velocity.py +31 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/utils/checks.py +4 -2
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/utils/fields.py +15 -37
- igm_model-3.2.0/igm/processes/flow_accumulation/flow_accumulation.yaml +6 -0
- igm_model-3.2.0/igm/processes/gflex/gflex.yaml +6 -0
- igm_model-3.2.0/igm/processes/glerosion/glerosion.yaml +6 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulated.py +2 -2
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/emulator.py +32 -8
- igm_model-3.2.0/igm/processes/iceflow/emulate/utils/architectures/__init__.py +11 -0
- igm_model-3.2.0/igm/processes/iceflow/emulate/utils/architectures/cnns.py +384 -0
- igm_model-3.2.0/igm/processes/iceflow/emulate/utils/architectures/dahunet.py +391 -0
- igm_model-3.2.0/igm/processes/iceflow/emulate/utils/architectures/mlps.py +103 -0
- igm_model-3.2.0/igm/processes/iceflow/emulate/utils/architectures/nos.py +403 -0
- igm_model-3.2.0/igm/processes/iceflow/emulate/utils/architectures/utils.py +29 -0
- igm_model-3.2.0/igm/processes/iceflow/emulate/utils/artifacts.py +267 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/utils/normalizations.py +0 -96
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/components/floating.py +24 -10
- igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/__init__.py +25 -0
- igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/laws/__init__.py +4 -0
- igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/laws/_power_law.py +106 -0
- igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/laws/budd.py +110 -0
- igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/laws/mohr_coulomb.py +183 -0
- 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
- igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/laws/weertman.py +101 -0
- igm_model-3.2.0/igm/processes/iceflow/energy/components/sliding/sliding.py +85 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/components/viscosity.py +2 -2
- igm_model-3.2.0/igm/processes/iceflow/energy/utils.py +88 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/horizontal/horizontal_q1.py +9 -1
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/iceflow.py +33 -2
- igm_model-3.2.0/igm/processes/iceflow/iceflow.yaml +6 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/solve/solve.py +1 -1
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/solve/solver.py +8 -2
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/evaluator/evaluator.py +1 -1
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/__init__.py +2 -0
- igm_model-3.2.0/igm/processes/iceflow/unified/halt/criteria/log_burst_patience.py +94 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/halt.py +7 -2
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/__init__.py +0 -2
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/data_assimilation.py +133 -106
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/interfaces/__init__.py +0 -2
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/interfaces/data_assimilation.py +15 -31
- igm_model-3.2.0/igm/processes/iceflow/unified/mappings/interfaces/network.py +126 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/network.py +3 -1
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/__init__.py +2 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/adam.py +1 -1
- igm_model-3.2.0/igm/processes/iceflow/unified/optimizers/adam_DA.py +146 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/cg_newton.py +1 -5
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/__init__.py +2 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/adam.py +3 -6
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/cg.py +3 -3
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/lbfgs.py +1 -1
- igm_model-3.2.0/igm/processes/iceflow/unified/optimizers/interfaces/spg.py +126 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/lbfgs.py +24 -9
- igm_model-3.2.0/igm/processes/iceflow/unified/optimizers/lbfgs_DA.py +585 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/lbfgs_bounds.py +32 -27
- igm_model-3.2.0/igm/processes/iceflow/unified/optimizers/line_searches/hager_zhang.py +790 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/newton.py +1 -7
- igm_model-3.2.0/igm/processes/iceflow/unified/optimizers/spectral_projected_gradient.py +588 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/trust_region.py +1 -5
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/solver/solver.py +9 -1
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/unified.py +2 -2
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/utils/data_preprocessing.py +19 -11
- igm_model-3.2.0/igm/processes/iceflow/utils/fields.py +46 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/vertical_molho.py +1 -1
- igm_model-3.2.0/igm/processes/iceflow/vertical_velocity/__init__.py +1 -0
- 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
- 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
- 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
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/particles.py +17 -12
- igm_model-3.2.0/igm/processes/particles/particles.yaml +6 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/read_output/read_output.py +1 -1
- igm_model-3.2.0/igm/processes/read_output/read_output.yaml +6 -0
- igm_model-3.2.0/igm/processes/rockflow/rockflow.yaml +6 -0
- igm_model-3.2.0/igm/processes/smb/__init__.py +1 -0
- igm_model-3.2.0/igm/processes/smb/accpdd/__init__.py +1 -0
- 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
- igm_model-3.2.0/igm/processes/smb/accpdd/accpdd.yaml +1 -0
- igm_model-3.2.0/igm/processes/smb/oggm/__init__.py +1 -0
- 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
- igm_model-3.2.0/igm/processes/smb/oggm/oggm.yaml +1 -0
- igm_model-3.2.0/igm/processes/smb/simple/__init__.py +1 -0
- 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
- igm_model-3.2.0/igm/processes/smb/simple/simple.yaml +1 -0
- igm_model-3.2.0/igm/processes/smb/smb.py +30 -0
- igm_model-3.2.0/igm/processes/smb/smb.yaml +6 -0
- igm_model-3.2.0/igm/processes/smb_accpdd/smb_accpdd.py +50 -0
- igm_model-3.2.0/igm/processes/smb_accpdd/smb_accpdd.yaml +6 -0
- igm_model-3.2.0/igm/processes/smb_oggm/smb_oggm.py +44 -0
- igm_model-3.2.0/igm/processes/smb_oggm/smb_oggm.yaml +6 -0
- igm_model-3.2.0/igm/processes/smb_simple/smb_simple.py +43 -0
- igm_model-3.2.0/igm/processes/smb_simple/smb_simple.yaml +6 -0
- igm_model-3.2.0/igm/processes/subglacial_hydrology/__init__.py +1 -0
- igm_model-3.2.0/igm/processes/subglacial_hydrology/subglacial_hydrology.py +97 -0
- igm_model-3.2.0/igm/processes/subglacial_hydrology/subglacial_hydrology.yaml +7 -0
- igm_model-3.2.0/igm/processes/subglacial_hydrology/till_storage.py +98 -0
- igm_model-3.2.0/igm/processes/texture/pix2pixhd_model_assets/layer_functions/__init__.py +0 -0
- igm_model-3.2.0/igm/processes/texture/texture.yaml +6 -0
- igm_model-3.2.0/igm/processes/thk/__init__.py +1 -0
- igm_model-3.2.0/igm/processes/thk/thk.py +73 -0
- igm_model-3.2.0/igm/processes/thk/thk.yaml +6 -0
- igm_model-3.2.0/igm/processes/thk/utils.py +22 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/time/time.py +38 -8
- igm_model-3.2.0/igm/processes/time/time.yaml +6 -0
- igm_model-3.2.0/igm_model.egg-info/PKG-INFO +62 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm_model.egg-info/SOURCES.txt +143 -69
- {igm_model-3.1.2 → igm_model-3.2.0}/igm_model.egg-info/requires.txt +5 -5
- {igm_model-3.1.2 → igm_model-3.2.0}/setup.py +7 -7
- igm_model-3.1.2/PKG-INFO +0 -54
- igm_model-3.1.2/README.md +0 -12
- igm_model-3.1.2/igm/common/runner/__init__.py +0 -8
- igm_model-3.1.2/igm/common/runner/modules/__init__.py +0 -1
- igm_model-3.1.2/igm/common/runner/modules/src.py +0 -66
- igm_model-3.1.2/igm/conf/processes/damage.yaml +0 -9
- igm_model-3.1.2/igm/conf/processes/data_assimilation_SR.yaml +0 -13
- igm_model-3.1.2/igm/conf/processes/enthalpy.yaml +0 -54
- igm_model-3.1.2/igm/conf/processes/pretraining.yaml +0 -9
- igm_model-3.1.2/igm/conf/processes/stress.yaml +0 -2
- igm_model-3.1.2/igm/conf/processes/thk.yaml +0 -5
- igm_model-3.1.2/igm/conf/processes/vert_flow.yaml +0 -3
- igm_model-3.1.2/igm/conf_help/core.yaml +0 -78
- igm_model-3.1.2/igm/conf_help/processes/damage.yaml +0 -32
- igm_model-3.1.2/igm/conf_help/processes/pretraining.yaml +0 -17
- igm_model-3.1.2/igm/conf_help/processes/vert_flow.yaml +0 -8
- igm_model-3.1.2/igm/inputs/complete_data.py +0 -38
- igm_model-3.1.2/igm/processes/avalanche/__init__.py +0 -5
- igm_model-3.1.2/igm/processes/damage/damage.py +0 -86
- igm_model-3.1.2/igm/processes/data_assimilation/cost_terms/regu_slidingco.py +0 -53
- igm_model-3.1.2/igm/processes/data_assimilation/cost_terms/regu_thk.py +0 -163
- igm_model-3.1.2/igm/processes/data_assimilation/optimize/update_lbfgs.py +0 -92
- igm_model-3.1.2/igm/processes/data_assimilation_SR/__init__.py +0 -5
- igm_model-3.1.2/igm/processes/data_assimilation_SR/context.py +0 -131
- igm_model-3.1.2/igm/processes/data_assimilation_SR/data_assimilation_SR.py +0 -135
- igm_model-3.1.2/igm/processes/data_assimilation_SR/objective.py +0 -110
- igm_model-3.1.2/igm/processes/data_assimilation_SR/penalties.py +0 -89
- igm_model-3.1.2/igm/processes/data_assimilation_SR/terms.py +0 -149
- igm_model-3.1.2/igm/processes/enthalpy/arrhenius/__init__.py +0 -1
- igm_model-3.1.2/igm/processes/enthalpy/arrhenius/arrhenius.py +0 -44
- igm_model-3.1.2/igm/processes/enthalpy/arrhenius/utils.py +0 -94
- igm_model-3.1.2/igm/processes/iceflow/emulate/utils/architectures/__init__.py +0 -18
- igm_model-3.1.2/igm/processes/iceflow/emulate/utils/architectures/cnns.py +0 -587
- igm_model-3.1.2/igm/processes/iceflow/emulate/utils/architectures/mlps.py +0 -162
- igm_model-3.1.2/igm/processes/iceflow/emulate/utils/architectures/nicenet.py +0 -300
- igm_model-3.1.2/igm/processes/iceflow/emulate/utils/architectures/nos.py +0 -705
- igm_model-3.1.2/igm/processes/iceflow/emulate/utils/architectures/utils.py +0 -320
- igm_model-3.1.2/igm/processes/iceflow/emulate/utils/artifacts.py +0 -235
- igm_model-3.1.2/igm/processes/iceflow/emulate/utils/artifacts_schema_v2.py +0 -73
- igm_model-3.1.2/igm/processes/iceflow/emulate/utils/artifacts_schema_v3.py +0 -312
- igm_model-3.1.2/igm/processes/iceflow/energy/components/sliding/__init__.py +0 -14
- igm_model-3.1.2/igm/processes/iceflow/energy/components/sliding/laws/__init__.py +0 -3
- igm_model-3.1.2/igm/processes/iceflow/energy/components/sliding/laws/budd.py +0 -188
- igm_model-3.1.2/igm/processes/iceflow/energy/components/sliding/laws/weertman.py +0 -165
- igm_model-3.1.2/igm/processes/iceflow/energy/components/sliding/sliding.py +0 -36
- igm_model-3.1.2/igm/processes/iceflow/energy/utils.py +0 -47
- igm_model-3.1.2/igm/processes/iceflow/unified/mappings/combined_data_assimilation.py +0 -448
- igm_model-3.1.2/igm/processes/iceflow/unified/mappings/interfaces/combined_data_assimilation.py +0 -123
- igm_model-3.1.2/igm/processes/iceflow/unified/mappings/interfaces/network.py +0 -83
- igm_model-3.1.2/igm/processes/iceflow/unified/optimizers/adam_DA.py +0 -91
- igm_model-3.1.2/igm/processes/iceflow/unified/optimizers/lbfgs_DA.py +0 -279
- igm_model-3.1.2/igm/processes/iceflow/unified/optimizers/line_searches/hager_zhang.py +0 -37
- igm_model-3.1.2/igm/processes/iceflow/utils/fields.py +0 -33
- igm_model-3.1.2/igm/processes/pretraining/history.py +0 -71
- igm_model-3.1.2/igm/processes/pretraining/pretraining.py +0 -648
- igm_model-3.1.2/igm/processes/stress/__init__.py +0 -5
- igm_model-3.1.2/igm/processes/stress/stress.py +0 -254
- igm_model-3.1.2/igm/processes/thk/__init__.py +0 -5
- igm_model-3.1.2/igm/processes/thk/thk.py +0 -58
- igm_model-3.1.2/igm/processes/vert_flow/__init__.py +0 -5
- igm_model-3.1.2/igm_model.egg-info/PKG-INFO +0 -54
- {igm_model-3.1.2 → igm_model-3.2.0}/LICENSE +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/MANIFEST.in +0 -0
- {igm_model-3.1.2/igm/conf → igm_model-3.2.0/igm/assimilations}/__init__.py +0 -0
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/__init__.py +0 -0
- {igm_model-3.1.2/igm/conf_help → igm_model-3.2.0/igm/assimilations/data_assimilation/cook}/__init__.py +0 -0
- {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
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/cost_terms/cost_vol.py +0 -0
- {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
- {igm_model-3.1.2/igm/processes/data_assimilation/optimize → igm_model-3.2.0/igm/assimilations/data_assimilation/outputs}/__init__.py +0 -0
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/data_assimilation/outputs/write_vtp.py +0 -0
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/pretraining/__init__.py +0 -0
- {igm_model-3.1.2/igm/processes → igm_model-3.2.0/igm/assimilations}/pretraining/plots.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/core/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/optuna/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/optuna/config.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/optuna/core.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/optuna/register.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/optuna/sweeper.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/runner/configuration/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/runner/configuration/loader.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/runner/modules/validator.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/utilities/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/utilities/misc.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/utilities/printers.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/common/utilities/visualizers.py +0 -0
- {igm_model-3.1.2/igm/processes/data_assimilation/outputs → igm_model-3.2.0/igm/conf}/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/inputs/load_tif.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/inputs/oggm_shop.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/local.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/plot2d.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/write_ncdf.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/write_tif.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/write_ts.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/outputs/write_vtp.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/avalanche.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/clim_glacialindex.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/clim_oggm.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/clim_station.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/flow_accumulation.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/gflex.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/glerosion.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/particles.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/read_output.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/rockflow.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/smb_accpdd.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/smb_oggm.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/smb_simple.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf/processes/texture.yaml +0 -0
- {igm_model-3.1.2/igm/processes/iceflow/emulate/emulators → igm_model-3.2.0/igm/conf_help}/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/header.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/inputs/load_tif.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/inputs/oggm_shop.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/local.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/write_ncdf.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/write_tif.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/write_ts.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/outputs/write_vtp.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/avalanche.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/clim_glacialindex.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/clim_oggm.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/clim_station.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/enthalpy.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/flow_accumulation.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/glerosion.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/particles.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/read_output.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/rockflow.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/smb_accpdd.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/smb_oggm.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/smb_simple.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/conf_help/processes/time.yaml +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/include_icemask.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/arrange_data.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/make_input_file.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/masks_subentities.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/oggm_shop.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/oggm_util.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/open_gridded_data.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/inputs/oggm_shop/read_glathida.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/outputs/write_ts.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/avalanche/avalanche.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/clim_glacialindex/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/clim_oggm/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/clim_station/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/dissipation/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/dissipation/dissipation.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/drainage/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/drainage/drainage.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/drainage/utils.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/horizontal/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/horizontal/horizontal.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/horizontal/utils.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/solver.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/vertical/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/solver/vertical/vertical.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/surface/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/surface/surface.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/surface/utils.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/temperature/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/temperature/temperature.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/temperature/utils.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/enthalpy/utils/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/flow_accumulation/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/flow_accumulation/flow_accumulation.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/gflex/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/gflex/gflex.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/glerosion/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/glerosion/glerosion.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/diagnostic/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/diagnostic/diagnostic.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/utils/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/utils/misc.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/emulate/utils/networks.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/components/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/components/energy.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/components/gravity.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/energy/energy.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/horizontal/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/horizontal/horizontal.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/horizontal/horizontal_central.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/horizontal/horizontal_mac.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/horizontal/horizontal_p1.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/solve/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/solve/evaluator.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/bc.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/dirichlet.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/frozen_bed.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/dirichlet.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/frozen_bed.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/interface.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/no_inflow.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/periodic_ns.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/interfaces/periodic_we.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/no_inflow.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/periodic_ns.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/periodic_we.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/bcs/utils.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/evaluator/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/abs_tol.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/criterion.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/inf.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/nan.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/patience.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/rel_tol.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/criteria/threshold.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/debug_state.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/interface_halt.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/cost.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/grad_theta_norm.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/grad_u_norm.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/metric.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/theta.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/metrics/u.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/halt/step_state.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/identity.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/interfaces/identity.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/interfaces/interface.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/mapping.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/normalizer.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/transforms.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/mappings/utils.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/cg.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/da_progress_optimizer.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/cg_newton.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/interface.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/muon.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/newton.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/sequential.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/soap.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/interfaces/trust_region.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/line_searches/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/line_searches/armijo.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/line_searches/line_search.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/line_searches/wolfe.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/muon.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/optimizer.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/progress_optimizer.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/sequential.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/soap.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/utils/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/optimizers/utils/synthetic_costs.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/solver/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/unified/utils.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/utils/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/utils/velocities.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/utils/vertical_discretization.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/enthalpy.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/utils.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/utils_lagrange.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/utils_legendre.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/utils_molho.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/vertical.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/vertical_lagrange.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/vertical_legendre.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/iceflow/vertical/vertical_ssa.py +0 -0
- /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
- /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
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/remove_particles.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/seeding_particles.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/update_particles.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/utils.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/utils_cuda.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/utils_cupy.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/utils_interp.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/utils_tf.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/write_particle_cudf.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/particles/write_particle_numpy.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/read_output/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/rockflow/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/rockflow/rockflow.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/smb_accpdd/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/smb_oggm/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/smb_simple/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/constants.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/emulator.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/exporter.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/image_data.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/normalizer.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd.py +0 -0
- {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
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd_model_assets/generator.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd_model_assets/layer_functions/bilinear_upsampling.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd_model_assets/layer_functions/reflection_pad2d.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd_model_assets/layer_functions/resnet_block.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd_model_assets/layer_functions/tanh.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/pix2pixhd_model_assets/loading.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/preparer.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/texture.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/texture/utils.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/processes/time/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/grad/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/grad/compute_divflux.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/grad/compute_divflux_slope_limiter.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/grad/compute_upwind_gradient_tf.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/grad/grad.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/grad/strain_rate.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/gaussian_filter_tf.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/getmag.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/getmag3d.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/interp1d_tf.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/interpolate_bilinear_tf.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/norms.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/math/precision.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/optuna_hooks.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/profiling.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/stag/__init__.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm/utils/stag/stag.py +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm_model.egg-info/dependency_links.txt +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm_model.egg-info/entry_points.txt +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/igm_model.egg-info/top_level.txt +0 -0
- {igm_model-3.1.2 → igm_model-3.2.0}/setup.cfg +0 -0
igm_model-3.2.0/PKG-INFO
ADDED
|
@@ -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
|
+
[](https://github.com/instructed-glacier-model/igm/actions/workflows/ci.yml)
|
|
50
|
+
[](https://pypi.org/project/igm-model/)
|
|
51
|
+
[](https://pypi.org/project/igm-model/)
|
|
52
|
+
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
53
|
+
[](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
|
+
[](https://github.com/instructed-glacier-model/igm/actions/workflows/ci.yml)
|
|
8
|
+
[](https://pypi.org/project/igm-model/)
|
|
9
|
+
[](https://pypi.org/project/igm-model/)
|
|
10
|
+
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
11
|
+
[](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).
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
31
|
+
((divfluxtar[ACT] - divflux[ACT]) / cfg.assimilations.data_assimilation.fitting.divfluxobs_std) ** 2
|
|
32
32
|
)
|
|
33
33
|
|
|
34
|
-
if cfg.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
14
|
+
((state.thkobs[ACT] - state.thk[ACT]) / cfg.assimilations.data_assimilation.fitting.thkobs_std) ** 2
|
|
15
15
|
)
|
|
16
16
|
|
|
@@ -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.
|
|
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.
|
|
18
|
+
( (velsurfobs[ACT & REL] - velsurf[ACT & REL]) / cfg.assimilations.data_assimilation.fitting.velsurfobs_std )** 2
|
|
19
19
|
)
|
|
20
20
|
|
|
21
|
-
if cfg.
|
|
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.
|
|
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.
|
|
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.
|
|
20
|
-
REGU_S = (cfg.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
25
|
+
if ("divfluxfcz" in cfg.assimilations.data_assimilation.cost_list):
|
|
26
26
|
cost["divflux"] = cost_divfluxfcz(cfg, state, i)
|
|
27
|
-
elif ("divfluxobs" in cfg.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
68
|
-
|
|
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.
|
|
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())))
|