Skip to content
Snippets Groups Projects
Select Git revision
  • a838a6c8bb2dbae6aae55145d22715b94e50b1ae
  • master default protected
  • hierarchical-basis
  • alphashapes
  • bl
  • relaying
  • new_export_boris
  • oras_vs_osm
  • reassign_partitions
  • distributed_fwi
  • rename-classes
  • fix/fortran-api-example-t4
  • robust_partitions
  • reducing_files
  • fix_overlaps
  • 3115-issue-fix
  • 3023-Fillet2D-Update
  • convert_fdivs
  • tmp_jcjc24
  • fixedMeshIF
  • save_edges
  • gmsh_4_14_0
  • gmsh_4_13_1
  • gmsh_4_13_0
  • gmsh_4_12_2
  • gmsh_4_12_1
  • gmsh_4_12_0
  • gmsh_4_11_1
  • gmsh_4_11_0
  • gmsh_4_10_5
  • gmsh_4_10_4
  • gmsh_4_10_3
  • gmsh_4_10_2
  • gmsh_4_10_1
  • gmsh_4_10_0
  • gmsh_4_9_5
  • gmsh_4_9_4
  • gmsh_4_9_3
  • gmsh_4_9_2
  • gmsh_4_9_1
  • gmsh_4_9_0
41 results

GModelIO_P3D.cpp

Blame
  • nodalBasis.cpp 51.39 KiB
    // Gmsh - Copyright (C) 1997-2012 C. Geuzaine, J.-F. Remacle
    //
    // See the LICENSE.txt file for license information. Please report all
    // bugs and problems to <gmsh@geuz.org>.
    
    #include <limits>
    #include "nodalBasis.h"
    #include "BasisFactory.h"
    //#include "pointsGenerators.h"
    
    
    
    static int nbdoftriangle(int order) { return (order + 1) * (order + 2) / 2; }
    
    //KH : caveat : node coordinates are not yet coherent with node numbering associated
    //              to numbering of principal vertices of face !!!!
    
    // uv surface - orientation v0-v2-v1
    
    
    
    static void nodepositionface0(int order, double *u, double *v, double *w)
    {
      int ndofT = nbdoftriangle(order);
      if (order == 0) { u[0] = 0.; v[0] = 0.; w[0] = 0.; return; }
    
      u[0]= 0.;    v[0]= 0.;    w[0] = 0.;
      u[1]= 0.;    v[1]= order; w[1] = 0.;
      u[2]= order; v[2]= 0.;    w[2] = 0.;
    
      // edges
      for (int k = 0; k < (order - 1); k++){
        u[3 + k] = 0.;
        v[3 + k] = k + 1;
        w[3 + k] = 0.;
    
        u[3 + order - 1 + k] = k + 1;
        v[3 + order - 1 + k] = order - 1 - k ;
        w[3 + order - 1 + k] = 0.;
    
        u[3 + 2 * (order - 1) + k] = order - 1 - k;
        v[3 + 2 * (order - 1) + k] = 0.;
        w[3 + 2 * (order - 1) + k] = 0.;
      }
    
      if (order > 2){
        int nbdoftemp = nbdoftriangle(order - 3);
        nodepositionface0(order - 3, &u[3 + 3 * (order - 1)], &v[3 + 3 * (order - 1)],
                          &w[3 + 3* (order - 1)]);
        for (int k = 0; k < nbdoftemp; k++){
          u[3 + k + 3 * (order - 1)] = u[3 + k + 3 * (order - 1)] * (order - 3) + 1.;
          v[3 + k + 3 * (order - 1)] = v[3 + k + 3 * (order - 1)] * (order - 3) + 1.;
          w[3 + k + 3 * (order - 1)] = w[3 + k + 3 * (order - 1)] * (order - 3);
        }
      }
      for (int k = 0; k < ndofT; k++){
        u[k] = u[k] / order;
        v[k] = v[k] / order;
        w[k] = w[k] / order;
      }
    }
    
    
    
    // uw surface - orientation v0-v1-v3
    static void nodepositionface1(int order, double *u, double *v, double *w)
    {
       int ndofT = nbdoftriangle(order);
       if (order == 0) { u[0] = 0.; v[0] = 0.; w[0] = 0.; return; }