Hello,

Since I am moving the mesh physically, the current coordinates are of the 
current configuration. I am trying to make a new fe_values object with 
mapping as shown below but I am getting an error 

An error occurred in line <114> of file </home/rajat/Documents/Code-
Libraries/deal/dealii8.3/dealii-8.3.0/source/base/subscriptor.cc> in 
function
    virtual dealii::Subscriptor::~Subscriptor()
The violated condition was: 
    counter == 0
The name and call sequence of the exception was:
    ExcInUse (counter, object_info->name(), infostring)
Additional Information: 
Object of class N6dealii6VectorIdEE is still used by 1 other objects.


(Additional information: <none>)


See the entry in the Frequently Asked Questions of deal.II (linked to from 
http://www.dealii.org/) for a lot more information on what this error means 
and how to fix programs in which it happens.


Stacktrace:
-----------
#0 
 
/home/rajat/Documents/Code-Libraries/deal/dealii8.3/installed-dealii/lib/libdeal_II.g.so.8.3.0:
 
dealii::Subscriptor::~Subscriptor()
#1  ./fdm: dealii::Vector<double>::~Vector()
#2  ./fdm: VelocityEquation<3>::doutput_velocity()
#3  ./fdm: AdiabaticShearBand<3>::Run_QuasiStatic()
#4  ./fdm: AdiabaticShearBand<3>::run()
#5  ./fdm: main
--------------------------------------------------------


The code I use is:

doutput_velocity()
{
    DataOut<dim> data_out;

    data_out.attach_dof_handler (this->dof_handler);
 
    //LA::MPI::Vector displacement_vector is defined in the header file of 
the class.
    displacement_vector.reinit(this->locally_owned_dofs, mpi_communicator);


    displacement_vector = X; // X is reference coordinates.


    displacement_vector -= fdm->x; // negative of displacement, x is 
current coordinates


    MappingQEulerian<dim> eulerian_mapping(2, dof_handler, 
displacement_vector); // mapping to map the mesh to reference configuration


    FEValues<dim> euler_fe_values(eulerian_mapping, this->fe, fdm->
quadrature_formula, update_values | 
                                  update_quadrature_points | 
update_JxW_values);

}

Also, If I comment the last two lines, there is no error. I am not sure 
what is wrong. 

Any suggestions will be appreciated. Thanks.

On Thursday, March 30, 2017 at 1:31:35 PM UTC-4, Jean-Paul Pelteret wrote:
>
> Either that or create an inverse mapping that maps back from the current 
> to the reference configuration. This method could potentially introduce to 
> some numerical error though.
>
> On Thursday, March 30, 2017 at 6:57:12 PM UTC+2, Wolfgang Bangerth wrote:
>>
>>
>> Rajat, 
>>
>> > I am updating my mesh after every time-increment. So, cell->vertex(v) 
>> > contains the current coordinates of the mesh. I know the coordinates of 
>> > the cell (and whole mesh) at t = 0, I wanted 
>> > to know how I can initialize the fe_values object wrt to the 
>> coordinates 
>> > of the cell at t = 0. 
>> > 
>> > If possible, this will enable me to use 
>> > fe_values->get_function_gradients() and fe_values->shape_grad() to get 
>> > the gradients wrt to reference mesh. 
>>
>> You can't. The FEValues classes only consider the mesh as it is right 
>> now, not how it was a while ago. 
>>
>> But you could consider leaving the mesh as it is (i.e., in reference 
>> coordinates) and using MappingQEulerian to describe the displacement. 
>> Then, if you use an FEValues without a mapping, you get everything with 
>> regard to the original (reference) configuration. If you use an FEValues 
>> with the mapping, you get the current configuration. 
>>
>> Best 
>>   W. 
>>
>> -- 
>> ------------------------------------------------------------------------ 
>> Wolfgang Bangerth          email:                 [email protected] 
>> <javascript:> 
>>                             www: http://www.math.colostate.edu/~bangerth/ 
>>
>

-- 
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to