Mesh Groups and GaussPointSets

Moderator: GiD Team

Post Reply
mvscheven
Posts: 16
Joined: Thu Dec 04, 2014 4:26 pm
Location: Stuttgart, Germany

Mesh Groups and GaussPointSets

Post by mvscheven »

Hello,

after using the GiDpost library in our code we experience still some trouble with mesh groups and the definition of Gausspointsets.

The basic question is:
Should the Gausspointset definition be inside the mesh group or outside? Or somewhere else??

Here is a small example explaining the problems we experience with both possibilities:

First the mesh file, the same for both variants:

Code: Select all

Group "Mesh 1"
MESH "TestMsh" dimension 2 ElemType Triangle Nnode 3
# color 0 0.99 0
Coordinates
1 0 0 0
2 0 1 0
3 0 2 0
4 1 0 0
5 1 1 0
6 1 2 0
7 2 0 0
8 2 1 0
9 2 2 0
End Coordinates
Elements
1 1 5 4 2
2 1 2 5 2
3 2 6 5 2
4 2 3 6 2
5 4 8 7 2
6 4 5 8 2
7 5 9 8 2
8 5 6 9 2
End Elements
End Group
Group "Mesh 2"
MESH "TestMsh" dimension 2 ElemType Quadrilateral Nnode 9
# color 0 0.99 0
Coordinates
1 0 0 0
2 0 1 0
3 0 2 0
4 1 0 0
5 1 1 0
6 1 2 0
7 2 0 0
8 2 1 0
9 2 2 0
End Coordinates
Elements
1 1 7 9 3 4 8 6 2 5 2
End Elements
End Group
VARIANT A: Outside the mesh group:

The corresponding result file:

Code: Select all

GiD Post Results File 1.0
GaussPoints "GPTri" ElemType Triangle "TestMsh"
Number Of Gauss Points: 1
Natural Coordinates: Internal
End GaussPoints
OnGroup "Mesh 1"
Result "Scalar on GP" "Analysis" 1 Scalar OnGaussPoints "GPTri"
Values
1 0.00125126
2 0.563585
3 0.193304
4 0.808741
5 0.585009
6 0.479873
7 0.350291
8 0.895962
End Values
End OnGroup
GaussPoints "GPQuad" ElemType Quadrilateral "TestMsh"
Number Of Gauss Points: 1
Natural Coordinates: Internal
End GaussPoints
OnGroup "Mesh 2"
Result "Scalar on GP" "Analysis" 2 Scalar OnGaussPoints "GPQuad"
Values
1 0.82284
End Values
End OnGroup
Opening this with GiD 12 we get an error message: "Mesh name 'TestMsh' not found for Gauss point 'GPTri'. in line 5 of file ...res"

VARIANT B: Inside the mesh group:

Moving the Gausspointset definition into the group definition the res file looks like:

Code: Select all

GiD Post Results File 1.0
OnGroup "Mesh 1"
GaussPoints "GPTri" ElemType Triangle "TestMsh"
Number Of Gauss Points: 1
Natural Coordinates: Internal
End GaussPoints
Result "Scalar on GP" "Analysis" 1 Scalar OnGaussPoints "GPTri"
Values
1 0.00125126
2 0.563585
3 0.193304
4 0.808741
5 0.585009
6 0.479873
7 0.350291
8 0.895962
End Values
End OnGroup
OnGroup "Mesh 2"
GaussPoints "GPQuad" ElemType Quadrilateral "TestMsh"
Number Of Gauss Points: 1
Natural Coordinates: Internal
End GaussPoints
Result "Scalar on GP" "Analysis" 2 Scalar OnGaussPoints "GPQuad"
Values
1 0.82284
End Values
End OnGroup
Now you can open the result file with GiD and view both results.

But trying to create the file in this order with GiDpost we get an runtime error for the call of "GiD_fBeginGaussPoint":

Code: Select all

Assertion failed: CheckState( POST_S0, File ), file M:\NumPro\tools\GiDPost\gidpost2.3_src\source\gidpost.c, line 1263
invalid state 'OnGroup block' should be 'TOP level'
This is the code I used to create these examples (only ASCII format so far):

Code: Select all

#include <stdlib.h>
#include <stdio.h>
#include "gidpost.h"

#define ASCII_FORMAT

typedef struct {
  int id;
  float x, y, z;
} SCoord;

typedef struct {
  int id;
  int n1, n2, n3;
} SElem;

SCoord nodes[9];
SElem elems[8];

void GenMesh()
{
  int i, j, idx;
  SCoord * node;
  SElem * elm1, * elm2;

  idx = 1;
  for ( i = 0; i < 3; i++ ) {
    for ( j = 0; j < 3; j++, idx++ ) {
      node = nodes + idx -1;
      node->id = idx;
      node->x = (float)(i);
      node->y = (float)(j);
      node->z = 0;
    }
  }
  idx = 0;
  for ( i = 0; i < 2; i++ ) {
    for ( j = 0; j < 2; j++, idx+=2 ) {
      elm1 = elems + idx;
      elm2 = elm1 + 1;
      elm1->id = idx+1;
      elm1->n1 = i*3 + j + 1;
      elm1->n3 = i*3 + j + 1 + 3 ;
      elm1->n2 = elm1->n3 + 1;
      elm2->id = idx+2;
      elm2->n1 = elm1->n1;
      elm2->n2 = elm1->n1 + 1;
      elm2->n3 = elm1->n2;
    }
  }
}

float Random()
{
  return rand()/(float)(RAND_MAX);
}

int main()
{
  int i;
  SCoord * node;
  SElem * elm;
  int elmi[4];
  int elmi2[10];
  GiD_FILE fdm, fdr;

  GenMesh();

  GiD_PostInit();

#if defined(ASCII_FORMAT)
  fdm = GiD_fOpenPostMeshFile( "test_fd.post.msh", GiD_PostAscii);
  fdr = GiD_fOpenPostResultFile( "test_fd.post.res", GiD_PostAscii);
#else
  fdm = fdr = GiD_fOpenPostResultFile( "test_fd.post.bin", GiD_PostBinary);
#endif



  /* write mesh for first time step */
  GiD_fBeginMeshGroup(fdm, "Mesh 1");

  GiD_fBeginMeshColor(fdm, "TestMsh", GiD_2D, GiD_Triangle, 3, 0, 0.99, 0);
  /* coordinates */
  GiD_fBeginCoordinates(fdm);
  for ( i = 0; i < 9; i++ ) {
    node = nodes + i;
    GiD_fWriteCoordinates(fdm, node->id, node->x, node->y, node->z );
  }
  GiD_fEndCoordinates(fdm);
  /* elements */
  GiD_fBeginElements(fdm);
  for ( i = 0; i < 8; i++ ) {
    elm = elems + i;
    elmi[0] = elm->n1;
    elmi[1] = elm->n2;
    elmi[2] = elm->n3;
    elmi[3] = 2;
    GiD_fWriteElementMat(fdm, elm->id, elmi);
  }
  GiD_fEndElements(fdm);
  GiD_fEndMesh(fdm);

  GiD_fEndMeshGroup(fdm);


  // A: outside group
  //GiD_fBeginGaussPoint(fdr, "GPTri", GiD_Triangle, "TestMsh", 1, 0, 1);
  //GiD_fEndGaussPoint(fdr);

  /* now results for first time step */
  GiD_fBeginOnMeshGroup(fdr, "Mesh 1");

  // B: inside group
  GiD_fBeginGaussPoint(fdr, "GPTri", GiD_Triangle, "TestMsh", 1, 0, 1);
  GiD_fEndGaussPoint(fdr);

   // Result
  GiD_fBeginResult(fdr, "Scalar on GP", "Analysis", 1.0, GiD_Scalar, GiD_OnGaussPoints, "GPTri", NULL, 0, NULL);
  for ( i = 0; i < 8; i++ ) {
    GiD_fWriteScalar(fdr, i+1, Random());
  }
  GiD_fEndResult(fdr);

  GiD_fEndOnMeshGroup(fdr);




  /* write mesh for second time step */
  GiD_fBeginMeshGroup(fdm, "Mesh 2");

  GiD_fBeginMeshColor(fdm, "TestMsh", GiD_2D, GiD_Quadrilateral, 9, 0, 0.99, 0);
  /* coordinates */
  GiD_fBeginCoordinates(fdm);
  for ( i = 0; i < 9; i++ ) {
    node = nodes + i;
    GiD_fWriteCoordinates(fdm, node->id, node->x, node->y, node->z );
  }
  GiD_fEndCoordinates(fdm);
  /* elements */
  GiD_fBeginElements(fdm);

    elmi2[0] = 1;
    elmi2[1] = 7;
    elmi2[2] = 9;
    elmi2[3] = 3;
    elmi2[4] = 4;
    elmi2[5] = 8;
    elmi2[6] = 6;
    elmi2[7] = 2;
    elmi2[8] = 5;
    elmi2[9] = 2;
    GiD_fWriteElementMat(fdm, 1, elmi2);

  GiD_fEndElements(fdm);
  GiD_fEndMesh(fdm);

  GiD_fEndMeshGroup(fdm);


  // A: outside group
  //GiD_fBeginGaussPoint(fdr, "GPQuad", GiD_Quadrilateral, "TestMsh", 1, 0, 1);
  //GiD_fEndGaussPoint(fdr);

  /* now results for second time step */
  GiD_fBeginOnMeshGroup(fdr, "Mesh 2");

  // B: inside group
  GiD_fBeginGaussPoint(fdr, "GPQuad", GiD_Quadrilateral, "TestMsh", 1, 0, 1);
  GiD_fEndGaussPoint(fdr);



  // Result
  GiD_fBeginResult(fdr, "Scalar on GP", "Analysis", 1.0, GiD_Scalar, GiD_OnGaussPoints, "GPQuad", NULL, 0, NULL);
  GiD_fWriteScalar(fdr, 1, Random());
  GiD_fEndResult(fdr);

  GiD_fEndOnMeshGroup(fdr);


  // Close file(s)
#ifdef ASCII_FORMAT
  GiD_fClosePostMeshFile(fdm);
#endif
  GiD_fClosePostResultFile(fdr);

  GiD_PostDone();

  printf("Finished normally!!");
  return 0;
}

Is this a bug in GiD not finding the correct mesh in the group if the Gausspoints are defined outside or a bug in GiDpost requiring the wrong state for GiD_fBeginGaussPoint? Or is there a third variant that will solve both problems?

Thanks a lot for your help.
Malte
User avatar
ronda
Posts: 8
Joined: Mon Oct 13, 2014 9:29 am

Re: Mesh Groups and GaussPointSets

Post by ronda »

Hi, this is a bug in gidpost. The Gauss Poinst should be inside the group. We are working on a fix for that.
User avatar
ronda
Posts: 8
Joined: Mon Oct 13, 2014 9:29 am

Re: Mesh Groups and GaussPointSets

Post by ronda »

Hello Malte, attached you can find the fix to the bug that you reported in this thread. It also include the fix to memory leak.

Note that in your example you have to change the time-step value for the second time-step.

Please, let us know if this solve your issue.

regards,

Jorge
Attachments
gidpost2.3.rar
(612.49 KiB) Downloaded 356 times
mvscheven
Posts: 16
Joined: Thu Dec 04, 2014 4:26 pm
Location: Stuttgart, Germany

Re: Mesh Groups and GaussPointSets

Post by mvscheven »

Hello Jorge,

thank you very much for your quick bug fix.
To me it seems like both issues are resolved now.

Regards
Malte
Post Reply