[aspect-devel] The output of nonadiabatic_temperature

Nan Zhang Nan.Zhang at colorado.edu
Fri Oct 14 20:53:39 PDT 2016


Hi Juliane,

Yes, you are correct. I should use  this->get_geometry_model().depth(eva
luation_points[q]);

But, my problem is the same. The compiling report that the
get_geometry_model().depth() uses Point<dim> not vector<Point<dim> >.  My
understanding is the evaluation_points[q] is for the quadrature point.
While the this->get_geometry_model().depth()  should use kind of position
data type, which I don't know!?

Nan

On Sat, Oct 15, 2016 at 1:34 AM, Juliane Dannberg <dannberg at gfz-potsdam.de>
wrote:

> Hi Nan,
>
> I admit that I haven't looked over all of your code in detail, but one
> point I saw is that you have to use this->get_geometry_model() and not
> this->get_geometry().
> Hope that helps!
>
> Best,
> Juliane
>
> On 10/14/2016 05:11 AM, Nan Zhang wrote:
>
> Hi all,
>
> In order to output the excess temperature, I changed
> the nonadiabatic_temperature.cc like:
> ************************************************************
> ********************************
> ...
> template <int dim>
>       void
>       NonadiabaticTemperature<dim>::
>       compute_derived_quantities_vector (const std::vector<Vector<double>
> >              &uh,
>                                          const std::vector<std::vector<Tensor<1,dim>
> > > &,
>                                          const std::vector<std::vector<Tensor<2,dim>
> > > &,
>                                          const std::vector<Point<dim> > &,
>                                          const std::vector<Point<dim> >
>                &evaluation_points,
>                                          std::vector<Vector<double> >
>                &computed_quantities) const
>       {
>         const unsigned int n_quadrature_points = uh.size();
>         Assert (computed_quantities.size() == n_quadrature_points,
>  ExcInternalError());
>         Assert (computed_quantities[0].size() == 1,
> ExcInternalError());
>         Assert (uh[0].size() == this->introspection().n_components,
>     ExcInternalError());
>
>         for (unsigned int q=0; q<n_quadrature_points; ++q)
>           {
>             const double temperature = uh[q][this->introspection().
> component_indices.temperature];
>
>             //computed_quantities[q](0) = temperature -
> this->get_adiabatic_conditions().temperature(evaluation_points[q]);
>             double depth = this->get_geometry().depth(evaluation_points[q]);
> //position???
>             const unsigned int idx = static_cast<unsigned
> int>((ave_temp.size()-1) * depth / this->get_geometry_model().
> maximal_depth());
>             double delta_temperature = temperature-ave_temp[idx];
>             computed_quantities[q](0) = delta_temperature;
>           }
>       }
>
> ...
> ************************************************************
> **************************
>
> A major problem is the data structure for the this->get_geometry().depth(?).
> The cell type evaluation_points[q] does not work. From the library
> definition, this->get_geometry().depth(?) needs a position type array
> inside. How to give such an array to get the depth information. I update
> the ave_temp array outside of this subroutine with 50 layers.
>
> Bests,
> Nan
>
> On Wed, Oct 12, 2016 at 1:50 AM, Juliane Dannberg <dannberg at gfz-potsdam.de
> > wrote:
>
>> Hi Nan,
>>
>> I haven't found a good way to plot the depth average files in Paraview,
>> and as far as I know we also don't have a visualization postprocessor that
>> does exactly what you want to do (if anyone has a good idea please speak
>> up!)
>> When I used the "depth average" postprocessor I always used pyplot for
>> visualization, so if you already have all of your output as .csv you could
>> write a python script to make your plot.
>>
>> If you want to use Paraview, you would probably have to write your own
>> postprocessor in Aspect that outputs exactly what you want (and we would be
>> happy to see a pull request for that!).
>> Alternatively, you could write your own adiabatic conditions plugin that
>> computes the average temperature for each depth and updates it every time
>> step and uses that as adiabatic temperature (and then you could use the
>> "nonadiabatic temperature" postprocessor). That second option is more of a
>> hack, and would only work if you don't need the adiabatic temperature for
>> anything else in your model, because in this case your adiabatic conditions
>> would contain something that's not really an adiabatic profile any more,
>> but it would probably be easier to implement.
>>
>> Best,
>> Juliane
>>
>> On 10/11/2016 11:05 AM, Nan Zhang wrote:
>>
>> Hi Juliane,
>>
>> Thanks for your suggestion. What I really want is the excess temperature,
>> the T subtracted from the average temperature on depth. I have done the
>> post-processing with the .csv format, because Paraview converts the .vtu
>> file to .csv file.
>>
>> My problem is the csv file is not good for paraview plotting anymore.  Paraview
>> plots csv file with table to point. There is no any smooth/grid between
>> points. The visualization is very bad. Have you guys done any conversion
>> from csv back to vtu before??
>>
>> Cheers,
>> Nan
>>
>> On Wed, Oct 12, 2016 at 12:53 AM, Juliane Dannberg <
>> dannberg at gfz-potsdam.de> wrote:
>>
>>> Hi Nan,
>>>
>>> there are different options for outputting the temperature difference
>>> between plume and background mantle, and which one you want to use depends
>>> on what exactly you want to know:
>>>
>>> If you use the "nonadiabatic temperature", you will get the excess
>>> temperature of the plume with respect to an adiabatic mantle temperature
>>> profile. If you are worried your adiabat will change over time, there is an
>>> update() function in the interface of the adiabatic conditions, so in
>>> principle you could use an existing model for the adiabatic conditions and
>>> implement this function, and then your adiabatic profile would be updated
>>> every time step.
>>>
>>> Alternatively, if you want to compare the plume temperature to the
>>> current average mantle temperature at a given depth, you can use Aspect's
>>> "depth average" postprocessor. It computes depth averaged quantities
>>> (including the temperature) and writes them into a separate output file.
>>>
>>> Best,
>>> Juliane
>>>
>>> On 10/11/2016 04:23 AM, Nan Zhang wrote:
>>>
>>> Hi all,
>>>
>>> I am doing a compressible model and try to plot the plume structure. The
>>> plume is defined by the high temperature difference from current
>>> average temperature at every depth. I see ASPECT has an output "
>>> nonadiabatic_temperature". I wonder if this output serves my purpose?
>>>
>>> What I concerned is if the adiabatic temperature is not exactly the
>>> same as my average temperature at every depth. When I set up my model,
>>> I initialize the adiabatic temperature profile with specific parameters. In
>>> theory, it should be the same as the average temperature at every depth.
>>> But, after billion year calculation, the average temperature at every depth
>>> deviates away from the initial adiabatic temperature profile.
>>>
>>> So, I wonder if there is an output "average_subtracted_temperature" in
>>> ASPECT? If so, it could also serve the plume in the incompressible
>>> convection model.
>>>
>>> Bests,
>>> Nan
>>>
>>>
>>> _______________________________________________
>>> Aspect-devel mailing listAspect-devel at geodynamics.orghttp://lists.geodynamics.org/cgi-bin/mailman/listinfo/aspect-devel
>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.geodynamics.org/pipermail/aspect-devel/attachments/20161015/fc2df5a3/attachment-0001.html>


More information about the Aspect-devel mailing list