コード例 #1
0
bool s_to_r8vec ( std::string s, int n, double rvec[] )
{
  int begin;
  bool error;
  int i;
  int lchar;
  int length;

  begin = 0;
  length = s.length ( );
  error = 0;

  for ( i = 0; i < n; i++ )
  {
    rvec[i] = s_to_r8 ( s.substr(begin,length), &lchar, &error );

    if ( error )
    {
      return error;
    }
    begin = begin + lchar;
    length = length - lchar;
  }

  return error;
}
コード例 #2
0
int s_to_r8vec ( char *s, int n, double rvec[] )

/******************************************************************************/
/*
  Purpose:

    S_TO_R8VEC reads an R8VEC from a string.

  Licensing:

    This code is distributed under the GNU LGPL license. 

  Modified:

    19 February 2001

  Author:

    John Burkardt

  Parameters:

    Input, char *S, the string to be read.

    Input, int N, the number of values expected.

    Output, double RVEC[N], the values read from the string.

    Output, int S_TO_R8VEC, is TRUE (1) if an error occurred and FALSE (0)
    otherwise.
*/
{
  int error;
  int i;
  int lchar;

  error = 0;

  for ( i = 0; i < n; i++ )
  {
    rvec[i] = s_to_r8 ( s, &lchar, &error );

    if ( error )
    {
      return error;
    }

    s = s + lchar;

  }

  return error;
}
コード例 #3
0
ファイル: gmsh_to_fem.c プロジェクト: lavrovd/jburkardt-c
void gmsh_size_read ( char *gmsh_filename, int *node_num, int *node_dim,
                      int *element_num, int *element_order )

/******************************************************************************/
/*
  Purpose:

    GMSH_SIZE_READ reads sizes from a GMSH file.

  Licensing:

    This code is distributed under the GNU LGPL license.

  Modified:

    19 October 2014

  Author:

    John Burkardt

  Parameters:

    Input, character *GMSH_FILENAME, the GMSH filename.

    Output, int *NODE_NUM, the number of nodes.

    Output, int *NODE_DIM, the spatial dimension.

    Output, int *ELEMENT_NUM, the number of elements.

    Output, int *ELEMENT_ORDER, the order of the elements.
*/
{
    char *error;
    int ierror;
    int indx;
    FILE *input;
    int input_stat;
    int k;
    int length;
    int level;
    const double r8_big = 1.0E+30;
    char text[255];
    char* text_pointer;
    double x;
    double x_max;
    double x_min;
    double y;
    double y_max;
    double y_min;
    double z;
    double z_max;
    double z_min;

    *node_num = 0;
    *node_dim = 0;

    x_max = - r8_big;
    x_min = + r8_big;
    y_max = - r8_big;
    y_min = + r8_big;
    z_max = - r8_big;
    z_min = + r8_big;

    input = fopen ( gmsh_filename, "rt" );

    if ( ! input )
    {
        fprintf ( stderr, "\n" );
        fprintf ( stderr, "GMSH_SIZE_READ - Fatal error!\n" );
        fprintf ( stderr, "  Could not open input file \"%s\"\n", gmsh_filename );
        exit ( 1 );
    }

    level = 0;

    for ( ; ; )
    {
        text_pointer = text;
        error = fgets ( text_pointer, 255, input );

        if ( !error )
        {
            break;
        }

        if ( level == 0 )
        {
            if ( s_begin ( text_pointer, "$Nodes" ) )
            {
                level = 1;
            }
        }
        else if ( level == 1 )
        {
            *node_num = s_to_i4 ( text_pointer, &length, &ierror );
            level = 2;
        }
        else if ( level == 2 )
        {
            if ( s_begin ( text_pointer, "$EndNodes" ) )
            {
                break;
            }
            else
            {
                indx = s_to_i4 ( text_pointer, &length, &ierror );
                text_pointer = text_pointer + length;
                x = s_to_r8 ( text_pointer, &length, &ierror );
                x_min = r8_min ( x_min, x );
                x_max = r8_max ( x_max, x );
                text_pointer = text_pointer + length;
                y = s_to_r8 ( text_pointer, &length, &ierror );
                y_min = r8_min ( y_min, y );
                y_max = r8_max ( y_max, y );
                text_pointer = text_pointer + length;
                z = s_to_r8 ( text_pointer, &length, &ierror);
                text_pointer = text_pointer + length;
                z_min = r8_min ( z_min, z );
                z_max = r8_max ( z_max, z );
            }
        }
    }
    /*
      Make a very simple guess as to the dimensionality of the data.
    */
    *node_dim = 3;
    if ( z_max == z_min )
    {
        *node_dim = 2;
        if ( y_max == y_min )
        {
            *node_dim = 1;
        }
    }
    /*
      Now read element information.
    */
    level = 0;

    for ( ; ; )
    {
        text_pointer = text;
        error = fgets ( text_pointer, 255, input );

        if ( !error )
        {
            break;
        }

        if ( level == 0 )
        {
            if ( s_begin ( text_pointer, "$Elements" ) )
            {
                level = 1;
            }
        }
        else if ( level == 1 )
        {
            *element_num = s_to_i4 ( text_pointer, &length, &ierror );
            level = 2;
        }
        else if ( level == 2 )
        {
            if ( s_begin ( text_pointer, "$EndElements" ) )
            {
                break;
            }
            else
            {
                k = 0;
                for ( ; ; )
                {
                    indx = s_to_i4 ( text_pointer, &length, &ierror );
                    text_pointer = text_pointer + length;
                    if ( ierror != 0 )
                    {
                        break;
                    }
                    k = k + 1;
                }
                *element_order = k - 5;
                break;
            }
        }
    }

    fclose ( input );

    return;
}
コード例 #4
0
ファイル: gmsh_to_fem.c プロジェクト: lavrovd/jburkardt-c
void gmsh_data_read ( char *gmsh_filename, int node_dim, int node_num,
                      double node_x[], int element_order, int element_num, int element_node[] )

/******************************************************************************/
/*
  Purpose:

    GMSH_DATA_READ reads data from a GMSH file.

  Licensing:

    This code is distributed under the GNU LGPL license.

  Modified:

    20 October 2014

  Author:

    John Burkardt

  Parameters:

    Input, character *GMSH_FILENAME, the GMSH filename.

    Input, int NODE_DIM, the spatial dimension.

    Input, int NODE_NUM, the number of nodes.

    Input, double NODE_X[NODE_DIM*NODE_NUM], the node coordinates.

    Input, int ELEMENT_ORDER, the order of the elements.

    Input, int ELEMENT_NUM, the number of elements.

    Input, int ELEMENT_NODE[ELEMENT_ORDER*ELEMENT_NUM],
    the nodes that make up each element.
*/
{
    char *error;
    int i;
    int i4_dummy;
    int ierror;
    int indx;
    FILE *input;
    int input_stat;
    int j;
    int k;
    int length;
    int level;
    const double r8_big = 1.0E+30;
    char text[255];
    char* text_pointer;
    double x;
    double x_max;
    double x_min;
    double y;
    double y_max;
    double y_min;
    double z;
    double z_max;
    double z_min;

    x_max = - r8_big;
    x_min = + r8_big;
    y_max = - r8_big;
    y_min = + r8_big;
    z_max = - r8_big;
    z_min = + r8_big;

    input = fopen ( gmsh_filename, "rt" );

    if ( ! input )
    {
        fprintf ( stderr, "\n" );
        fprintf ( stderr, "GMSH_DATA_READ - Fatal error!\n" );
        fprintf ( stderr, "  Could not open input file \"%s\"\n", gmsh_filename );
        exit ( 1 );
    }

    level = 0;

    for ( ; ; )
    {
        text_pointer = text;
        error = fgets ( text_pointer, 255, input );

        if ( !error )
        {
            break;
        }

        if ( level == 0 )
        {
            if ( s_begin ( text_pointer, "$Nodes" ) )
            {
                level = 1;
                j = 0;
            }
        }
        else if ( level == 1 )
        {
            i4_dummy = s_to_i4 ( text_pointer, &length, &ierror );
            level = 2;
        }
        else if ( level == 2 )
        {
            if ( s_begin ( text_pointer, "$EndNodes" ) )
            {
                break;
            }
            else
            {
                indx = s_to_i4 ( text_pointer, &length, &ierror );
                text_pointer = text_pointer + length;
                for ( i = 0; i < node_dim; i++ )
                {
                    x = s_to_r8 ( text_pointer, &length, &ierror );
                    text_pointer = text_pointer + length;
                    node_x[i+j*node_dim] = x;
                }
                j = j + 1;
            }
        }
    }
    /*
      Now read element information.
    */
    level = 0;

    for ( ; ; )
    {
        text_pointer = text;
        error = fgets ( text_pointer, 255, input );

        if ( !error )
        {
            break;
        }

        if ( level == 0 )
        {
            if ( s_begin ( text_pointer, "$Elements" ) )
            {
                level = 1;
                j = 0;
            }
        }
        else if ( level == 1 )
        {
            i4_dummy = s_to_i4 ( text_pointer, &length, &ierror );
            level = 2;
        }
        else if ( level == 2 )
        {
            if ( s_begin ( text_pointer, "$EndElements" ) )
            {
                break;
            }
            else
            {
                for ( k = 1; k <= 5; k++ )
                {
                    i4_dummy = s_to_i4 ( text_pointer, &length, &ierror );
                    text_pointer = text_pointer + length;
                }
                for ( i = 0; i < element_order; i++ )
                {
                    k = s_to_i4 ( text_pointer, &length, &ierror );
                    text_pointer = text_pointer + length;
                    element_node[i+j*element_order] = k;
                }
                j = j + 1;
            }
        }
    }

    fclose ( input );

    return;
}