# Accessing additional named outputs in postprocessors

**URL:** https://community.geodynamics.org/t/accessing-additional-named-outputs-in-postprocessors/2283
**Category:** ASPECT
**Tags:** postprocess
**Created:** [February 23, 2022, 4:09pm UTC](https://community.geodynamics.org/t/accessing-additional-named-outputs-in-postprocessors/2283 "2022-02-23T16:09:12Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![Agi](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/agi/32/617_2.png) [@Agi](https://community.geodynamics.org/u/Agi)
#### Post date: [February 23, 2022, 4:09pm UTC](https://community.geodynamics.org/t/accessing-additional-named-outputs-in-postprocessors/2283/1 "2022-02-23T16:09:12Z")

</div>

Hi,

I am trying to create a postprocessor, similar to the shear\_stress / stress postprocessors, where I would like to calculate the so-called “anisotropic stress”, for which I would need to access the additional named outputs from the material models. I couldn’t find any examples of using additional outputs in postprocessors. Does anyone have some tips on how to access it? I guess it should look something like this:  
for (unsigned int i = 0; i \< Tensor\<4,dim\>::n\_independent\_components ; ++i)  
stress\_strain\_directors[Tensor\<4,dim\>::unrolled\_to\_component\_indices(i)] = additional\_named\_outputs[q][I],  
except that additional\_named\_outputs is not correct.

Thanks!

---

<div class="post-metadata">

### Author: ![jdannberg](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/jdannberg/32/26_2.png) [@jdannberg](https://community.geodynamics.org/u/jdannberg)
#### Post date: [February 23, 2022, 4:46pm UTC](https://community.geodynamics.org/t/accessing-additional-named-outputs-in-postprocessors/2283/2 "2022-02-23T16:46:16Z")

</div>

Hi Agi,

You could have a look at the [seismic\_anomalies](https://github.com/geodynamics/aspect/blob/main/source/postprocess/visualization/seismic_anomalies.cc) postprocessor. It uses the SeismicAdditionalOutputs. (So it’s slightly different from the NamedAdditionalOutputs, but the general way of how to access the outputs should be the same). You have to make sure that

(1) The additional outputs are created for your material model outputs object before the material model is evaluated

```auto
out.additional_outputs.push_back(
                      std::make_unique<MaterialModel::SeismicAdditionalOutputs<dim>> (n_q_points));

```

(2) In a second step, you can then get a pointer to the additional output object and use it

```auto
MaterialModel::SeismicAdditionalOutputs<dim> *seismic_outputs
                      = out.template get_additional_output<MaterialModel::SeismicAdditionalOutputs<dim>>();
const double Vs = seismic_outputs->vs[0];

```

Hope that helps!  
Juliane

---

<div class="post-metadata">

### Author: ![Agi](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/agi/32/617_2.png) [@Agi](https://community.geodynamics.org/u/Agi)
#### Post date: [February 24, 2022, 4:47pm UTC](https://community.geodynamics.org/t/accessing-additional-named-outputs-in-postprocessors/2283/3 "2022-02-24T16:47:38Z")

</div>

Hi Juliane,

Thanks for the help! IAfter some struggles, I tried adding this step by step; when I only copied the line:  
out.additional\_outputs.push\_back(  
std::make\_unique\<MaterialModel::SeismicAdditionalOutputs\> (n\_quadrature\_points));  
I had no problem compiling. But then when I change this to:  
out.additional\_outputs.push\_back(  
std\_cxx14::make\_unique\<MaterialModel::NamedAdditionalMaterialOutputs\> (n\_quadrature\_points));  
I get the following error:  
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk/usr/include/c++/v1/memory:2755:32: error: no matching constructor for initialization of ‘aspect::MaterialModel::NamedAdditionalMaterialOutputs\<3\>’  
return unique\_ptr\<\_Tp\>(new \_Tp(\_VSTD::forward\<\_Args\>(\_\_args)…));  
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
/Applications/aspect/source/postprocess/visualization/aniso\_stress.cc:60:34: note: in instantiation of function template specialization ‘std::\_\_1::make\_unique\<aspect::MaterialModel::NamedAdditionalMaterialOutputs\<3\>, const unsigned int &\>’ requested here  
std\_cxx14::make\_unique\<MaterialModel::NamedAdditionalMaterialOutputs\> (n\_quadrature\_points));  
^  
/Applications/aspect/include/aspect/material\_model/interface.h:837:11: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from ‘const unsigned int’ to ‘const aspect::MaterialModel::NamedAdditionalMaterialOutputs\<3\>’ for 1st argument  
class NamedAdditionalMaterialOutputs : public AdditionalMaterialOutputs  
^  
/Applications/aspect/include/aspect/material\_model/interface.h:848:9: note: candidate constructor not viable: no known conversion from ‘const unsigned int’ to ‘const std::vectorstd::string’ (aka ‘const vector\<basic\_string\>’) for 1st argument  
NamedAdditionalMaterialOutputs(const std::vectorstd::string &output\_names);  
^  
/Applications/aspect/include/aspect/material\_model/interface.h:860:9: note: candidate constructor not viable: requires 2 arguments, but 1 was provided  
NamedAdditionalMaterialOutputs(const std::vectorstd::string &output\_names,  
^  
2 errors generated.

Is this because the NamedAdditionalMaterialOutputs contain the names of the outputs?

Thanks,  
Ági

---

<div class="post-metadata">

### Author: ![jdannberg](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/jdannberg/32/26_2.png) [@jdannberg](https://community.geodynamics.org/u/jdannberg)
#### Post date: [February 24, 2022, 5:56pm UTC](https://community.geodynamics.org/t/accessing-additional-named-outputs-in-postprocessors/2283/4 "2022-02-24T17:56:18Z")

</div>

Hi Ági,

I think what you want to do here is not create a general NamedAdditionalMaterialOutputs object, but an instance of your specific NamedAdditionalMaterialOutputs. Did you already make that? There are several examples in other material models: DislocationViscosityOutputs in grain\_size.cc, PlasticAdditionalOutputs in rheology/visco\_plastic.cc. Once you’ve made that, you can then create an instance of that specific class (for example, shear\_heating.cc uses the DislocationViscosityOutputs):

```auto
const MaterialModel::DislocationViscosityOutputs<dim> *disl_viscosities_out =
        material_model_outputs.template get_additional_output<MaterialModel::DislocationViscosityOutputs<dim>>();

```

Best,  
Juliane

---

<div class="post-metadata">

### Author: ![Agi](https://yyz2.discourse-cdn.com/flex036/user_avatar/community.geodynamics.org/agi/32/617_2.png) [@Agi](https://community.geodynamics.org/u/Agi)
#### Post date: [March 1, 2022, 10:35am UTC](https://community.geodynamics.org/t/accessing-additional-named-outputs-in-postprocessors/2283/5 "2022-03-01T10:35:43Z")

</div>

Ah, this makes a lot of sense. I actually use this within the anisotropic viscosity material model for the assemblers.  
It works now! Thanks Juliane 🙂
