getfem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getfem-commits] r4920 - in /trunk/getfem/contrib/bimaterial_crack_test:


From: Yves . Renard
Subject: [Getfem-commits] r4920 - in /trunk/getfem/contrib/bimaterial_crack_test: bimaterial_crack_test.cc bimaterial_crack_test.param
Date: Sun, 29 Mar 2015 19:35:44 -0000

Author: renard
Date: Sun Mar 29 21:35:43 2015
New Revision: 4920

URL: http://svn.gna.org/viewcvs/getfem?rev=4920&view=rev
Log:
eliminate old bricks

Modified:
    trunk/getfem/contrib/bimaterial_crack_test/bimaterial_crack_test.cc
    trunk/getfem/contrib/bimaterial_crack_test/bimaterial_crack_test.param

Modified: trunk/getfem/contrib/bimaterial_crack_test/bimaterial_crack_test.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/contrib/bimaterial_crack_test/bimaterial_crack_test.cc?rev=4920&r1=4919&r2=4920&view=diff
==============================================================================
--- trunk/getfem/contrib/bimaterial_crack_test/bimaterial_crack_test.cc 
(original)
+++ trunk/getfem/contrib/bimaterial_crack_test/bimaterial_crack_test.cc Sun Mar 
29 21:35:43 2015
@@ -55,7 +55,7 @@
 using bgeot::dim_type; 
 using bgeot::base_matrix; /* small dense matrix. */
 
-/* definition of some matrix/vector types. These ones are builtmayavi -d 
crack.vtk -f WarpVector -m BandedSurfaceMap -m Outline
+/* definition of some matrix/vector types. These ones are built
 
  * using the predefined types in Gmm++
  */
@@ -347,7 +347,6 @@
 
   scalar_type residual;       /* max residual for the iterative solvers        
*/
   size_type conv_max;
-  unsigned dir_with_mult;
   
   std::string datafilename;
   bgeot::md_param PARAM;
@@ -495,8 +494,6 @@
   mf_mult.set_qdim(dim_type(N));
 
 
-  dir_with_mult = unsigned(PARAM.int_value("DIRICHLET_VERSINO"));
- 
   /* set the finite element on mf_rhs (same as mf_u is DATA_FEM_TYPE is
      not used in the .param file */
   std::string data_fem_name = PARAM.string_value("DATA_FEM_TYPE");
@@ -618,23 +615,29 @@
       U.resize(mf_u().nb_dof());
       
       conv_to_refine.clear();
-      getfem::mdbrick_isotropic_linearized_elasticity<>
-       ELAS(mim, mf_u(), lambda, mu);
+
+      getfem::model model;
+  
+      // Main unknown of the problem.
+      model.add_fem_variable("u", mf_u());
+      plain_vector lambda_(mf_rhs.nb_dof(), lambda);
+      model.add_initialized_fem_data("lambda", mf_rhs, lambda_);
+      plain_vector mu_(mf_rhs.nb_dof(), mu);
+      model.add_initialized_fem_data("mu", mf_rhs, mu_);
+      getfem::add_isotropic_linearized_elasticity_brick
+        (model, mim, "u", "lambda", "mu");
       
       
       if(bimaterial == 1){
-       GMM_ASSERT1(!ELAS.lambda().mf().is_reduced(), "To be adapted");
+       GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted");
        
cout<<"______________________________________________________________________________"<<endl;
        cout<<"CASE OF BIMATERIAL CRACK  with lambda_up = "<<lambda_up<<" and 
lambda_down = "<<lambda_down<<endl;
        
cout<<"______________________________________________________________________________"<<endl;
-       std::vector<double> bi_lambda(ELAS.lambda().mf().nb_dof());
-       std::vector<double> bi_mu(ELAS.lambda().mf().nb_dof());
-       
-       cout << "ELAS.lambda().mf().nb_dof()==="
-            << ELAS.lambda().mf().nb_dof() << endl;
-       
-       for (size_type ite = 0; ite < ELAS.lambda().mf().nb_dof();ite++) {
-         if (ELAS.lambda().mf().point_of_basic_dof(ite)[1] > 0){
+       plain_vector bi_lambda(mf_rhs.nb_dof());
+       plain_vector bi_mu(mf_rhs.nb_dof());
+       
+       for (size_type ite = 0; ite < mf_rhs.nb_dof(); ite++) {
+         if (mf_rhs.point_of_basic_dof(ite)[1] > 0){
            bi_lambda[ite] = lambda_up;
            bi_mu[ite] = mu_up;
          }
@@ -643,88 +646,77 @@
            bi_mu[ite] = mu_down;
          }
        } 
-       //cout<<"bi_lambda.size() = "<<bi_lambda.size()<<endl;
-       // 
cout<<"ELAS.lambda().mf().nb_dof()==="<<ELAS.lambda().mf().nb_dof()<<endl;
-       
-       ELAS.lambda().set(bi_lambda);
-       ELAS.mu().set(bi_mu);
+
+        gmm::copy(bi_lambda, model.set_real_variable("lambda"));
+       gmm::copy(bi_mu, model.set_real_variable("mu"));
       }
       
       
       // Defining the volumic source term.
-      
-      
       plain_vector F(nb_dof_rhs * N);
       getfem::interpolation_function(mf_rhs, F, sol_f);
-      
-      // Volumic source term brick.
-      getfem::mdbrick_source_term<> VOL_F(ELAS, mf_rhs, F);
+      model.add_initialized_fem_data("VolumicData", mf_rhs, F);
+      getfem::add_source_term_brick(model, mim, "u", "VolumicData");
+
       
       // Defining the Neumann condition right hand side.
       
       // Neumann condition brick.
-      
-      getfem::mdbrick_abstract<> *pNEUMANN;
-      
-      gmm::clear(F);
-      for(size_type i = 0; i<F.size(); i=i+2) 
-       {F[i] = F41; F[i+1] = F42;}
-      
-      getfem::mdbrick_source_term<> NEUMANN_down(VOL_F, mf_rhs, 
F,NEUMANN_BOUNDARY_NUM_down);
-      
-      gmm::clear(F);
-      for(size_type i = 0; i<F.size(); i=i+2) 
-       {F[i] = F21; F[i+1] = F22;}
-      
-      getfem::mdbrick_source_term<> NEUMANN_right_up(NEUMANN_down, mf_rhs, 
F,NEUMANN_BOUNDARY_NUM_right);
-      
-      
-      gmm::clear(F);
-      for(size_type i = 0; i<F.size(); i=i+2) 
-       {F[i] = F31; F[i+1] = F32;}
-      
-      getfem::mdbrick_source_term<> NEUMANN_right_down(NEUMANN_right_up, 
mf_rhs, F,NEUMANN_BOUNDARY_NUM_right+1);
-      
-      gmm::clear(F);
-      for(size_type i = 0; i<F.size(); i=i+2) 
-       {F[i] = F11; F[i+1] = F12;}
-      
-      getfem::mdbrick_source_term<> NEUMANN_up(NEUMANN_right_down, mf_rhs, 
F,NEUMANN_BOUNDARY_NUM_up);
-      
-      if (all_dirichlet){
-       cout << "Exact -DIRICHLET- Mode I problem..." << endl;
-       pNEUMANN = & VOL_F;
+
+      if (!all_dirichlet) {
+      
+        gmm::clear(F);
+        for(size_type i = 0; i<F.size(); i=i+2) {F[i] = F41; F[i+1] = F42;}
+        model.add_initialized_fem_data("NeumannData_down", mf_rhs, F);
+        getfem::add_source_term_brick
+          (model, mim, "u", "NeumannData_down", NEUMANN_BOUNDARY_NUM_down);
+      
+        gmm::clear(F);
+        for(size_type i = 0; i<F.size(); i=i+2)  {F[i] = F21; F[i+1] = F22;}
+        model.add_initialized_fem_data("NeumannData_right", mf_rhs, F);
+        getfem::add_source_term_brick
+          (model, mim, "u", "NeumannData_right", NEUMANN_BOUNDARY_NUM_right);
+      
+        gmm::clear(F);
+        for(size_type i = 0; i<F.size(); i=i+2) {F[i] = F31; F[i+1] = F32;}
+        model.add_initialized_fem_data("NeumannData_right_down", mf_rhs, F);
+        getfem::add_source_term_brick
+          (model, mim, "u", "NeumannData_right_down",
+           NEUMANN_BOUNDARY_NUM_right+1);
+      
+        gmm::clear(F);
+        for(size_type i = 0; i<F.size(); i=i+2) {F[i] = F11; F[i+1] = F12;}
+        model.add_initialized_fem_data("NeumannData_up", mf_rhs, F);
+        getfem::add_source_term_brick
+          (model, mim, "u", "NeumannData_up", NEUMANN_BOUNDARY_NUM_up);
       }
-      else 
-       pNEUMANN = & NEUMANN_up; 
-      
-      //toto_solution toto(mf_rhs.linked_mesh()); toto.init();
-      //assert(toto.mf.nb_dof() == 1);
-      
+      
+
       // Dirichlet condition brick.
-      getfem::mdbrick_Dirichlet<> final_model(*pNEUMANN, 
DIRICHLET_BOUNDARY_NUM,
-                                             mf_mult);
-      if(all_dirichlet){
+      if (all_dirichlet) {
 #ifdef VALIDATE_XFEM
-       final_model.rhs().set(exact_sol.mf,exact_sol.U);
+        model.add_initialized_fem_data("DirichletData", exact_sol.mf,
+                                       exact_sol.U);
+        getfem::add_Dirichlet_condition_with_multipliers
+          (model, mim, "u", mf_mult, DIRICHLET_BOUNDARY_NUM, "DirichletData");
+#else
+        getfem::add_Dirichlet_condition_with_multipliers
+          (model, mim, "u", mf_mult, DIRICHLET_BOUNDARY_NUM);
 #endif
       } else {
-#ifdef VALIDATE_XFEM
-       final_model.rhs().set(exact_sol.mf,0);
-#endif
+        getfem::add_Dirichlet_condition_with_multipliers
+          (model, mim, "u", mf_mult, DIRICHLET_BOUNDARY_NUM);
       }
-      
final_model.set_constraints_type(getfem::constraints_type(dir_with_mult));
+ 
       
       // Generic solve.
-      cout << "Total number of variables : " << final_model.nb_dof() << endl;
-      getfem::standard_model_state MS(final_model);
+      cout << "Total number of variables : " << model.nb_dof() << endl;
       gmm::iteration iter(residual, 1, 40000);
-      
-      //getfem::standard_solve(MS, final_model, iter);
-      getfem::standard_solve(MS, final_model, iter, 
getfem::select_linear_solver(final_model, "superlu"));
+      getfem::standard_solve(model, iter);
       
       // Solution extraction
-      gmm::copy(ELAS.get_solution(MS), U);
+      gmm::resize(U, mf_u().nb_dof());
+      gmm::copy(model.real_variable("u"), U);
       iteration = iter.converged();  
       
       // Adapted Refinement (suivant une erreur a posteriori)
@@ -772,7 +764,7 @@
 
   }break;
     
-  case 12:{
+  case 12: {
     int mode_counter = 1;
     plain_vector W12;
     W12.clear();
@@ -814,109 +806,107 @@
        }
 
        conv_to_refine.clear();
-       getfem::mdbrick_isotropic_linearized_elasticity<>
-         ELAS(mim, mf_u(), lambda, mu);
+
+        getfem::model model;
+  
+        // Main unknown of the problem.
+        model.add_fem_variable("u", mf_u());
+        plain_vector lambda_(mf_rhs.nb_dof(), lambda);
+        model.add_initialized_fem_data("lambda", mf_rhs, lambda_);
+        plain_vector mu_(mf_rhs.nb_dof(), mu);
+        model.add_initialized_fem_data("mu", mf_rhs, mu_);
+        getfem::add_isotropic_linearized_elasticity_brick
+          (model, mim, "u", "lambda", "mu");
        
        
        if(bimaterial == 1){
-         
cout<<"______________________________________________________________________________"<<endl;
-         cout<<"CASE OF BIMATERIAL CRACK  with lambda_up = "<<lambda_up<<" and 
lambda_down = "<<lambda_down<<endl;
-         
cout<<"______________________________________________________________________________"<<endl;
-         std::vector<double> bi_lambda(ELAS.lambda().mf().nb_dof());
-         std::vector<double> bi_mu(ELAS.lambda().mf().nb_dof());
-         
-         
cout<<"ELAS.lambda().mf().nb_dof()==="<<ELAS.lambda().mf().nb_dof()<<endl;
-         
-         for (size_type ite = 0; ite < ELAS.lambda().mf().nb_dof();ite++) {
-           if (ELAS.lambda().mf().point_of_basic_dof(ite)[1] > 0){
-             bi_lambda[ite] = lambda_up;
-             bi_mu[ite] = mu_up;
-           }
-           else{
-             bi_lambda[ite] = lambda_down;
-             bi_mu[ite] = mu_down;
-           }
-         } 
-         //cout<<"bi_lambda.size() = "<<bi_lambda.size()<<endl;
-         // 
cout<<"ELAS.lambda().mf().nb_dof()==="<<ELAS.lambda().mf().nb_dof()<<endl;
-         
-         ELAS.lambda().set(bi_lambda);
-         ELAS.mu().set(bi_mu);
-       }
+          GMM_ASSERT1(!mf_rhs.is_reduced(), "To be adapted");
+          
cout<<"______________________________________________________________________________"<<endl;
+          cout<<"CASE OF BIMATERIAL CRACK  with lambda_up = "<<lambda_up<<" 
and lambda_down = "<<lambda_down<<endl;
+          
cout<<"______________________________________________________________________________"<<endl;
+          plain_vector bi_lambda(mf_rhs.nb_dof());
+          plain_vector bi_mu(mf_rhs.nb_dof());
+          
+          for (size_type ite = 0; ite < mf_rhs.nb_dof(); ite++) {
+            if (mf_rhs.point_of_basic_dof(ite)[1] > 0){
+              bi_lambda[ite] = lambda_up;
+              bi_mu[ite] = mu_up;
+            }
+            else{
+              bi_lambda[ite] = lambda_down;
+              bi_mu[ite] = mu_down;
+            }
+          } 
+          
+          gmm::copy(bi_lambda, model.set_real_variable("lambda"));
+          gmm::copy(bi_mu, model.set_real_variable("mu"));
+        }
        
        
        // Defining the volumic source term.
        
-       
-       plain_vector F(nb_dof_rhs * N);
+       // Volumic source term brick.
+        plain_vector F(nb_dof_rhs * N);
        getfem::interpolation_function(mf_rhs, F, sol_f);
-       
-       // Volumic source term brick.
-       getfem::mdbrick_source_term<> VOL_F(ELAS, mf_rhs, F);
+        model.add_initialized_fem_data("VolumicData", mf_rhs, F);
+        getfem::add_source_term_brick(model, mim, "u", "VolumicData");
        
        // Defining the Neumann condition right hand side.
        
        // Neumann condition brick.
        
-       getfem::mdbrick_abstract<> *pNEUMANN;
-       
-       gmm::clear(F);
-       for(size_type i = 0; i<F.size(); i=i+2) 
-         {F[i] = F41; F[i+1] = F42;}
-       
-       getfem::mdbrick_source_term<> NEUMANN_down(VOL_F, mf_rhs, 
F,NEUMANN_BOUNDARY_NUM_down);
-       
-       gmm::clear(F);
-       for(size_type i = 0; i<F.size(); i=i+2) 
-         {F[i] = F21; F[i+1] = F22;}
-       
-       getfem::mdbrick_source_term<> NEUMANN_right_up(NEUMANN_down, mf_rhs, 
F,NEUMANN_BOUNDARY_NUM_right);
-       
-       
-       gmm::clear(F);
-       for(size_type i = 0; i<F.size(); i=i+2) 
-         {F[i] = F31; F[i+1] = F32;}
-       
-       getfem::mdbrick_source_term<> NEUMANN_right_down(NEUMANN_right_up, 
mf_rhs, F,NEUMANN_BOUNDARY_NUM_right+1);
-       
-       gmm::clear(F);
-       for(size_type i = 0; i<F.size(); i=i+2) 
-         {F[i] = F11; F[i+1] = F12;}
-       
-       getfem::mdbrick_source_term<> NEUMANN_up(NEUMANN_right_down, mf_rhs, 
F,NEUMANN_BOUNDARY_NUM_up);
-       
-       if (all_dirichlet)
-         pNEUMANN = & VOL_F; 
-       else 
-         pNEUMANN = & NEUMANN_up; 
-       
-       //toto_solution toto(mf_rhs.linked_mesh()); toto.init();
-       //assert(toto.mf.nb_dof() == 1);
-       
-       // Dirichlet condition brick.
-       getfem::mdbrick_Dirichlet<> final_model(*pNEUMANN, 
DIRICHLET_BOUNDARY_NUM,
-                                               mf_mult);
-       if(all_dirichlet){
+        if (!all_dirichlet) {
+          
+          gmm::clear(F);
+          for(size_type i = 0; i<F.size(); i=i+2) {F[i] = F41; F[i+1] = F42;}
+          model.add_initialized_fem_data("NeumannData_down", mf_rhs, F);
+          getfem::add_source_term_brick
+            (model, mim, "u", "NeumannData_down", NEUMANN_BOUNDARY_NUM_down);
+          
+          gmm::clear(F);
+          for(size_type i = 0; i<F.size(); i=i+2)  {F[i] = F21; F[i+1] = F22;}
+          model.add_initialized_fem_data("NeumannData_right", mf_rhs, F);
+          getfem::add_source_term_brick
+            (model, mim, "u", "NeumannData_right", NEUMANN_BOUNDARY_NUM_right);
+          
+          gmm::clear(F);
+          for(size_type i = 0; i<F.size(); i=i+2) {F[i] = F31; F[i+1] = F32;}
+          model.add_initialized_fem_data("NeumannData_right_down", mf_rhs, F);
+          getfem::add_source_term_brick
+            (model, mim, "u", "NeumannData_right_down",
+             NEUMANN_BOUNDARY_NUM_right+1);
+          
+          gmm::clear(F);
+          for(size_type i = 0; i<F.size(); i=i+2) {F[i] = F11; F[i+1] = F12;}
+          model.add_initialized_fem_data("NeumannData_up", mf_rhs, F);
+          getfem::add_source_term_brick
+            (model, mim, "u", "NeumannData_up", NEUMANN_BOUNDARY_NUM_up);
+        }
+
+        // Dirichlet condition brick.
+        if (all_dirichlet) {
 #ifdef VALIDATE_XFEM
-         final_model.rhs().set(exact_sol.mf,exact_sol.U);
+          model.add_initialized_fem_data("DirichletData", exact_sol.mf,
+                                         exact_sol.U);
+          getfem::add_Dirichlet_condition_with_multipliers
+            (model, mim, "u", mf_mult, DIRICHLET_BOUNDARY_NUM,"DirichletData");
+#else
+          getfem::add_Dirichlet_condition_with_multipliers
+            (model, mim, "u", mf_mult, DIRICHLET_BOUNDARY_NUM);
 #endif
-       } else {
-#ifdef VALIDATE_XFEM
-         final_model.rhs().set(exact_sol.mf,0);
-#endif
-       }
-       
final_model.set_constraints_type(getfem::constraints_type(dir_with_mult));
+        } else {
+          getfem::add_Dirichlet_condition_with_multipliers
+            (model, mim, "u", mf_mult, DIRICHLET_BOUNDARY_NUM);
+        }
        
        // Generic solve.
-       cout << "Total number of variables : " << final_model.nb_dof() << endl;
-       getfem::standard_model_state MS(final_model);
-       gmm::iteration iter(residual, 1, 40000);
-       
-       // getfem::standard_solve(MS, final_model, iter);
-       getfem::standard_solve(MS, final_model, iter, 
getfem::select_linear_solver(final_model, "superlu"));
+        cout << "Total number of variables : " << model.nb_dof() << endl;
+        gmm::iteration iter(residual, 1, 40000);
+        getfem::standard_solve(model, iter);
 
        // Solution extraction
-       gmm::copy(ELAS.get_solution(MS), U);
+        gmm::resize(U, mf_u().nb_dof());
+        gmm::copy(model.real_variable("u"), U);
        iteration = iter.converged();  
        
        // Adapted Refinement (suivant une erreur a posteriori)

Modified: trunk/getfem/contrib/bimaterial_crack_test/bimaterial_crack_test.param
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/contrib/bimaterial_crack_test/bimaterial_crack_test.param?rev=4920&r1=4919&r2=4920&view=diff
==============================================================================
--- trunk/getfem/contrib/bimaterial_crack_test/bimaterial_crack_test.param      
(original)
+++ trunk/getfem/contrib/bimaterial_crack_test/bimaterial_crack_test.param      
Sun Mar 29 21:35:43 2015
@@ -63,7 +63,6 @@
 MIXED_PRESSURE=0;       % Mixed version or not.
 FEM_TYPE_P = 'FEM_PK(3,3)';  % P1 for triangles
 FEM_TYPE_P = 'FEM_PK_DISCONTINUOUS(2,0)';  % Discontinuous P1 for triangles
-DIRICHLET_VERSION = 2;
 
 % DATA_FEM_TYPE must be defined if your main FEM is not Lagrangian
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]