## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# Example

## `mat_metal.cpp`

    MatMetal::MatMetal()
    {
        // Enable GPU implementation of this material model
        gpu_enabled = true;

        // Material configuration
        num_hist          =  6;    // Number of state variables per integration point
        pos_epsp          =  0;    // For prop damage, sensor output
        pos_temp          =  4;    // For prop damage, prop thermal
        pos_texture       = -1;    // For texture, not used by this material model
        pos_damage        =  1;    // For damage, position in the state variable array
        erode_flag        =  2;    // Erosion flag (0=no erosion, 1=element erosion, 2=node splitting)
        pos_erode_flag    = -1;    // Not used, since this material model does not use element erosion
        pos_depsp         =  5;    // For prop damage
        pos_rate          = -1;    // For prop damage
        pos_evol          = -1;    // For prop damage
        pos_damage1       =  1;    // For prop damage
        pos_damage2       =  2;    // For prop damage
        pos_damage_active = -1;    // For prop damage

        // Curve definitions
        curve.emplace_back(6);     // A curve ID is present at position 6 in the material parameter array (cmat)

        // Add the location in the state variable array and the output name for contour plot
        contour.emplace_back(0, "Effective plastic strain");
        contour.emplace_back(1, "Damage");
        contour.emplace_back(4, "Temperature");

        // Stiffness reduction (for GPU only)
        stiff_shear = NO_REDUCTION;
        stiff_bulk  = NO_REDUCTION;
        stiff_xi    = NO_REDUCTION;
        stiff_bfac  = NO_REDUCTION;
    }