PISM, A Parallel Ice Sheet Model  stable v2.1-1-g6902d5502 committed by Ed Bueler on 2023-12-20 08:38:27 -0800

◆ update_impl()

void pism::calving::IcebergRemoverFEM::update_impl ( const array::Scalar bc_mask,
array::CellType1 cell_type,
array::Scalar ice_thickness 
)
privatevirtual

Remove "icebergs" using the finite element notion of connectivity: two elements are connected if they share a boundary.

  1. Loop over elements and create a mask that will be used to determine connectivity between elements.
  • an element is a "grounded ice element" if all nodes are icy and are either grounded or belong to the set of Dirichlet nodes
    • an element is "floating ice" if all nodes are icy and at least one node is "floating ice"
    • all other elements are ice-free
  1. Label connected components, identifying "icebergs".

Once "iceberg" elements are labeled we need to remove nodes that belong to icebergs but do not belong to any elements connected to grounded ice.

  1. Create a mask filled with zeros. Loop over elements and add 1 to nodes of all "iceberg" elements. Add -1 to all nodes of "grounded" elements.
  2. Now loop over all nodes and remove nodes with positive mask values.

Reimplemented from pism::calving::IcebergRemover.

Definition at line 67 of file IcebergRemoverFEM.cc.

References pism::fem::Element2::add_contribution(), pism::array::Array2D< T >::array(), pism::ParallelSection::check(), pism::ParallelSection::failed(), pism::petsc::VecArray::get(), pism::array::Array::get_from_proc0(), pism::mask::grounded(), pism::mask::icy(), label_connected_components(), pism::Component::m_grid, pism::calving::IcebergRemover::m_iceberg_mask, m_mask, pism::calving::IcebergRemover::m_mask_p0, pism::MASK_ICE_FREE_OCEAN, n, pism::fem::q1::n_chi, pism::fem::Element2::nodal_values(), pism::array::Array::put_on_proc0(), pism::fem::Element2::reset(), pism::array::Array::set(), pism::array::Array::stencil_width(), and pism::array::Array::update_ghosts().