getfem-commits
[Top][All Lists]
Advanced

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

[Getfem-commits] r4993 - in /trunk/getfem: interface/tests/python/demo_M


From: Yves . Renard
Subject: [Getfem-commits] r4993 - in /trunk/getfem: interface/tests/python/demo_Mindlin_Reissner_plate.py src/getfem_generic_assembly.cc
Date: Wed, 13 May 2015 19:25:44 -0000

Author: renard
Date: Wed May 13 21:25:43 2015
New Revision: 4993

URL: http://svn.gna.org/viewcvs/getfem?rev=4993&view=rev
Log:
bug fix

Modified:
    trunk/getfem/interface/tests/python/demo_Mindlin_Reissner_plate.py
    trunk/getfem/src/getfem_generic_assembly.cc

Modified: trunk/getfem/interface/tests/python/demo_Mindlin_Reissner_plate.py
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/interface/tests/python/demo_Mindlin_Reissner_plate.py?rev=4993&r1=4992&r2=4993&view=diff
==============================================================================
--- trunk/getfem/interface/tests/python/demo_Mindlin_Reissner_plate.py  
(original)
+++ trunk/getfem/interface/tests/python/demo_Mindlin_Reissner_plate.py  Wed May 
13 21:25:43 2015
@@ -31,11 +31,11 @@
 import os
 
 ## Parameters
-Emodulus = 1           # Young Modulus
+Emodulus = 1.          # Young Modulus
 nu       = 0.5         # Poisson Coefficient
 epsilon  = 0.001       # Plate thickness
-kappa     = 5/6        # Shear correction factor
-f = -5*pow(epsilon,3.) # Prescribed force on the top of the plate
+kappa     = 5./6.      # Shear correction factor
+f = -5.*pow(epsilon,3.) # Prescribed force on the top of the plate
 
 variant = 0            # 0 : not reduced, 1 : with reduced integration,
                        # 2 : MITC reduction
@@ -43,7 +43,7 @@
 K = 1                  # Degree of the finite element method
 dirichlet_version = 1  # 0 = simplification, 1 = with multipliers,
                        # 2 = penalization
-r = 1E8                # Penalization parameter.
+r = 1.E8               # Penalization parameter.
 NX = 80                # Number of element per direction
 
 
@@ -95,78 +95,3 @@
 
 mfu.export_to_vtk('Deflection.vtk', U)
 print ('You can view solutions with for instance:\nmayavi2 -d Deflection.vtk 
-f WarpScalar -m Surface')
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-## Parameters
-PK=3; k = 1.;
-
-## Mesh and MeshFems
-m=Mesh('import','gid',filename);
-mfu=MeshFem(m,1);
-mfu.set_fem(Fem('FEM_PK(2,%d)' % (PK,)));
-mfd=MeshFem(m,1);
-mfd.set_fem(Fem('FEM_PK(2,%d)' % (PK,)));
-mim=MeshIm(m, Integ('IM_TRIANGLE(13)'));
-
-## Boundary selection
-P=m.pts(); # get list of mesh points coordinates
-Psqr=sum(P*P, 0);
-cobj=(Psqr < 1*1+1e-6);
-cout=(Psqr > 10*10-1e-2);
-pidobj=compress(cobj, range(0, m.nbpts()))
-pidout=compress(cout, range(0, m.nbpts()))
-fobj=m.faces_from_pid(pidobj)
-fout=m.faces_from_pid(pidout)
-ROBIN_BOUNDARY = 1
-DIRICHLET_BOUNDARY = 2
-m.set_region(DIRICHLET_BOUNDARY,fobj)
-m.set_region(ROBIN_BOUNDARY,fout)
-
-## Interpolate the exact solution on mfd (assuming it is a Lagrange fem)
-wave_expr = ('cos(%f*y+.2)+complex(0.,1.)*sin(%f*y+.2)' % (k,k));
-Uinc=mfd.eval(wave_expr,globals(),locals());
-
-## Model Bricks
-md = Model('complex')
-md.add_fem_variable('u', mfu)
-md.add_initialized_data('k', [k]);
-md.add_Helmholtz_brick(mim, 'u', 'k');
-md.add_initialized_data('Q', [complex(0.,1.)*k]);
-md.add_Fourier_Robin_brick(mim, 'u', 'Q', ROBIN_BOUNDARY);
-md.add_initialized_fem_data('DirichletData', mfd, Uinc);
-md.add_Dirichlet_condition_with_multipliers(mim, 'u', mfu, DIRICHLET_BOUNDARY,
-                                            'DirichletData');
-#md.add_Dirichlet_condition_with_penalization(mim, 'u', 1e12,
-#                                             DIRICHLET_BOUNDARY,
-#                                             'DirichletData');
-
-## Solving the problem
-md.solve();
-U = md.variable('u');
-
-if (not(make_check)):
-
-    sl=Slice(('none',), mfu, 8)
-    sl.export_to_vtk('wave.vtk', mfu, real(U), 'rWave',
-                     mfu, imag(U), 'iWave')
-
-    print 'You can view the solution with (for instance):'
-    print 'mayavi2 -d wave.vtk -f WarpScalar -m Surface'

Modified: trunk/getfem/src/getfem_generic_assembly.cc
URL: 
http://svn.gna.org/viewcvs/getfem/trunk/getfem/src/getfem_generic_assembly.cc?rev=4993&r1=4992&r2=4993&view=diff
==============================================================================
--- trunk/getfem/src/getfem_generic_assembly.cc (original)
+++ trunk/getfem/src/getfem_generic_assembly.cc Wed May 13 21:25:43 2015
@@ -745,6 +745,32 @@
       break;
     case GA_NODE_CONSTANT: case GA_NODE_ZERO:
       if (pnode1->t.size() != pnode2->t.size()) return false;
+      
+      switch(version) {
+      case 0: case 1:
+        if (pnode1->test_function_type != pnode2->test_function_type)
+          return false;
+        if ((pnode1->test_function_type & 1) &&
+            pnode1->name_test1.compare(pnode2->name_test1) != 0)
+          return false;
+        if ((pnode1->test_function_type & 2) &&
+            pnode1->name_test2.compare(pnode2->name_test2) != 0)
+          return false;
+        break;
+      case 2:
+        if ((pnode1->test_function_type == 1 &&
+             pnode2->test_function_type == 1) ||
+            (pnode1->test_function_type == 2 &&
+             pnode2->test_function_type == 2))
+          return false;
+        if ((pnode1->test_function_type & 1) &&
+            pnode1->name_test1.compare(pnode2->name_test2) != 0)
+          return false;
+        if ((pnode1->test_function_type & 2) &&
+            pnode1->name_test2.compare(pnode2->name_test1) != 0)
+          return false;
+        break;
+      }
       if (pnode1->t.size() != 1 &&
           pnode1->t.sizes().size() != pnode2->t.sizes().size()) return false;
       for (size_type i = 0; i < pnode1->t.sizes().size(); ++i)
@@ -5081,7 +5107,12 @@
 
     switch (pnode->node_type) {
     case GA_NODE_CONSTANT: case GA_NODE_ZERO:
-      c += ga_hash_code(pnode->t); break;
+      c += ga_hash_code(pnode->t);
+      if (pnode->test_function_type & 1)
+        c += 34.731 * ga_hash_code(pnode->name_test1);
+      if (pnode->test_function_type & 2)
+        c += 34.731 * ga_hash_code(pnode->name_test2);
+      break;
 
     case GA_NODE_OP: c += scalar_type(pnode->op_type)*M_E*M_PI*M_PI; break;
     case GA_NODE_X: c += scalar_type(pnode->nbc1) + M_E*M_PI; break;
@@ -8215,10 +8246,11 @@
         // cout << " and "; ga_print_node(*it, cout); cout << endl;
         if (sub_tree_are_equal(pnode, *it, workspace, 1)) {
           // cout << "confirmed no transpose" << endl;
-          if (pnode->t.size() == 1)
+          if (pnode->t.size() == 1) {
             pgai = new ga_instruction_copy_scalar(pnode->t[0], (*it)->t[0]);
-          else
+          } else {
             pgai = new ga_instruction_copy_tensor(pnode->t, (*it)->t);
+          }
           rmi.instructions.push_back(pgai);
           return;
         }




reply via email to

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