Material model interface

The material model interface is a set of C functions that are used to configure, initialize and run a material model. These functions are implemented in interface.cpp.

Overview of interface functions

Each user material consists of five functions, which are all called by IMPETUS Solver:

  1. mat_user_X_config: Get the configuration parameters required for the material model.
  2. init_mat_user_X: Initializes the material state.
  3. mat_user_X: Evaluates the material response.
  4. init_mat_user_X_gpu: Currently not being used, but reserved for future GPU implementation.
  5. mat_user_X_gpu: Evaluates the material behavior on a GPU device.

Implementing Your Own User Material

  1. Create an instance of your derived MatUser class.
  2. Choose an available slot (e.g., mat_user_1).
  3. Link the the following functions with your material model's corresponding functions:
    • mat_user_X_config
    • init_mat_user_X
    • mat_user_X
    • init_mat_user_X_gpu
    • mat_user_X_gpu

Example Use Case

Suppose you want to link your user material (e.g. MatMetal). You would:

  1. Create an instance of MatMetal class (don't forget the namespace).
  2. Choose slot mat_user_1.
  3. Link each of the functions for this material ID with its corresponding class functions:
static user_metal::MatMetal metal;

void mat_user_1_config(UserMatConfig* config, UserMatProp* properties)
{
    metal.getConfig(config, properties);
}

void init_mat_user_1(UserMatInitCPU data)
{
    metal.runInit(data);
}

void mat_user_1(UserMatCPU data)
{
    metal.runMat(data);
}

void init_mat_user_1_gpu(UserMatHost host, UserMatDevice device, cudaStream_t stream)
{
    metal.runInitGPU(host, device, stream);
}

void mat_user_1_gpu(UserMatHost host, UserMatDevice device, cudaStream_t stream)
{
    metal.runMatGPU(host, device, stream);
}