Renard Yves wrote:
>
> Umut Tabak <[email protected]> a écrit :
>
>> Renard Yves wrote:
>>>
>>> Umut Tabak <[email protected]> a écrit :
>>>
>>>> Renard Yves wrote:
>>>>>
>>>>> Dear Umut,
>>>>>
>> Hi again,
>>
>> I tried to apply a sample analysis where I can assemble the fluid 
>> part(scalar) and the structural part(displacement). Now I have a 
>> problem concerning the coupling matrix assembly. I attached the code 
>> and the necessary msh files. Now the questions are(better to answer 
>> these after taking a look at the source file attached. In brief, I 
>> have 3 mesh structures and 3 mesh_fems attached to these mesh 
>> structures and the operations should be clear for you.)
>>
>> + To have this kind of analysis(coupled structural-acoustic), we have 
>> to set the mesh_fem dimensions to 3 and 1 for the structural and 
>> fluid parts respectively, if there is only one mesh_fem definition, 
>> how can I assign different dimensions to different regions of my mesh?
>
> You cannot ! Even if you have only one mesh representing both the 
> structure and the fluid, the best is to have two mesh_fem, each 
> defined only on the corresponding region. This is the easiest for 
> computing the coupling terms but of course it means that the meshes of 
> the structure and the fluid match to each other.
> If you have two separate meshes you can try to compute the coupling 
> term using the object "interpolated fem" which interpolate a fem from 
> a mesh to another (see for instance tests/test_interpolated_fem.cc)
Dear Professor Renard,

That is the question I am still puzzling with, how to assign two 
mesh_fems to different regions of a mesh, I am sorry again but let me 
ask one more, I can iterate over regions as you have suggested, to 
assign pfem definitions, but how to change the dimensions of the these 
regions? As far as, I can understand from your definitions, I can have 
one mesh and different mesh_fem definitions for different regions. I 
could partly accomplish this task by assigning the pfem by iteration but 
I still could not understand how to change the target dimension, Or do I 
have a conceptual misunderstanding on this point? Or there is a trick to 
do this that I am still missing? There is a simple code below to explain 
my purposes.

Best regards,

Umut

A very simple code vhere I think the dimensions also be changed, but you 
are the creator of the library.

// standard headers
#include <iostream>
#include <vector>
#include <string>
#include <cstdlib>
#include <cassert>
#include <stdexcept>
// gmm++ headers, pay attention that this is a template
// library, so that no build is required.
#include <gmm/gmm.h>
#include <gmm/gmm_inoutput.h>
// getFem++ headers
#include <getfem/getfem_import.h>
#include <getfem/dal_bit_vector.h>
#include <getfem/getfem_mesh.h>
#include <getfem/getfem_mesh_fem.h>
#include <getfem/getfem_partial_mesh_fem.h>
#include <getfem/getfem_mesh_im.h>
#include <getfem/getfem_integration.h>
#include <getfem/getfem_assembling.h>
#include <getfem/getfem_modeling.h>
#include <getfem/getfem_regular_meshes.h>
//
typedef getfem::modeling_standard_sparse_matrix sparse_matrix;
//using namespace getfem;
//using namespace gmm;
using namespace std;
//
int main(int argc, char** argv)
{
  try{
    getfem::mesh mshGmsh;
    getfem::import_mesh("gmshv2:./boxSolidCheck.msh", mshGmsh);
    // region 1 is the fluid part of the model mesh definition
    if(mshGmsh.has_region(1))
      cout << "Region 1 is defined" << endl;
    if(mshGmsh.has_region(2))
      cout << "Region 2 is defined" << endl;
    if(mshGmsh.has_region(3))
      cout << "Region 3 is defined" << endl;
    getfem::mesh_region region1(mshGmsh.region(1));
    getfem::mesh_region region2(mshGmsh.region(2));
    getfem::mesh_region region3(mshGmsh.region(3));
    // optional print out for the convexes(elements) of a specific
        // region
        cout << "Number of elements in region 1 is " << 
region1.nb_convex() << endl;
        cout << "Number of elements in region 2 is " << 
region2.nb_convex() << endl;
        cout << "Number of elements in region 3 is " << 
region3.nb_convex() << endl;
    // can also be an array of vectors
   
        if(region1.is_only_convexes())   
          cout << "region 1 only contains convexes" << endl;
        else
          cout << "region 1 is not composed of convexes only" << endl;
    //
        dal::bit_vector elemsInRegion1= region1.index();
        dal::bit_vector elemsInRegion2= region2.index();
        dal::bit_vector elemsInRegion3= region3.index();
    //
        for(getfem::mr_visitor i(region1);!i.finished();++i){
          cout << "Element :" << i.cv() << " in region1." << endl;
        }
        // assign fem definitions to the regions
        getfem::mesh_fem meshFemCore(mshGmsh);
    // region 1, scalar domain, pressure field, dimension 1
        for(getfem::mr_visitor i(region1); !i.finished(); ++i){
            
meshFemCore.set_finite_element(i.cv(),getfem::fem_descriptor("FEM_QK(3, 
1)"));
          // should not dimensions set here??
        }
    // region 2, vectorial domain, displacement field, dimension 3
        for(getfem::mr_visitor i(region2); !i.finished(); ++i){
            
meshFemCore.set_finite_element(i.cv(),getfem::fem_descriptor("FEM_QK(3, 
1)"));
          // should not dimensions set here??
        }

  }
  catch(std::exception &e){
    std::cout << e.what() << std::endl;
  }
  return EXIT_SUCCESS;
}

 




_______________________________________________
Getfem-users mailing list
[email protected]
https://mail.gna.org/listinfo/getfem-users

Reply via email to