// ***************************************************************************** // ***************************************************************************** void Euler2D_Mesh::Tag_Boundary_Nodes() { int i, n1, n2, bctype, ibn; List bnode; // Tag the Boundary Nodes Points // Method of Tagging is not robust as boundary connecting points have Tag // which are tagged last. BNTag = (int *) calloc(mesh.nnodes, sizeof (int)); for (i = 0; i < mesh.nnodes; i++) BNTag[i] = -1; for (i = 0; i < mesh.nbedges; i++) { n1 = edge[boundaryEdge[i].edgeNumber].node1; n2 = edge[boundaryEdge[i].edgeNumber].node2; bctype = -1; // BCType 0: 0-999 if ((boundaryEdge[i].bcType >= 0) && (boundaryEdge[i].bcType <= 999)) bctype = 0; // BCType 1: 1000-1999 : Solid Wall if ((boundaryEdge[i].bcType >= 1000) && (boundaryEdge[i].bcType <= 1999)) bctype = 1; // BCType 2: 2000-2999 : Dirchlet Boundary Condition if ((boundaryEdge[i].bcType >= 2000) && (boundaryEdge[i].bcType <= 2999)) bctype = 2; // BCType 2: 3000-3999 : Freestream if ((boundaryEdge[i].bcType >= 3000) && (boundaryEdge[i].bcType <= 3999)) bctype = 3; if (bctype != -1) { BNTag[n1] = bctype; BNTag[n2] = bctype; } } mesh.nbnodes = 0; for (i = 0; i < mesh.nnodes; i++) { if (BNTag[i] != -1) mesh.nbnodes++; } #ifdef VERBOSE info("NBNodes = %d", mesh.nbnodes); #endif boundaryNode = (BOUNDARYNODE *) calloc(mesh.nbnodes, sizeof (BOUNDARYNODE)); ibn = 0; for (i = 0; i < mesh.nbedges; i++) { n1 = edge[boundaryEdge[i].edgeNumber].node1; n2 = edge[boundaryEdge[i].edgeNumber].node2; // BCType 0: 0-999 if ((boundaryEdge[i].bcType >= 0) && (boundaryEdge[i].bcType <= 999)) { if (!bnode.Is_In_List(n1)) { bnode.Add_To_List(n1); boundaryNode[ibn].bcType = BNTag[n1]; boundaryNode[ibn].nodeNumber = n1; boundaryNode[ibn].constant = 0.0; ibn++; } if (!bnode.Is_In_List(n2)) { bnode.Add_To_List(n2); boundaryNode[ibn].bcType = BNTag[n2]; boundaryNode[ibn].nodeNumber = n2; boundaryNode[ibn].constant = 0.0; ibn++; } } // BCType 1: 1000-1999 : Solid Wall if ((boundaryEdge[i].bcType >= 1000) && (boundaryEdge[i].bcType <= 1999)) { if (!bnode.Is_In_List(n1)) { bnode.Add_To_List(n1); boundaryNode[ibn].bcType = BNTag[n1]; boundaryNode[ibn].nodeNumber = n1; boundaryNode[ibn].constant = 0.0; ibn++; } if (!bnode.Is_In_List(n2)) { bnode.Add_To_List(n2); boundaryNode[ibn].bcType = BNTag[n2]; boundaryNode[ibn].nodeNumber = n2; boundaryNode[ibn].constant = 0.0; ibn++; } } // BCType 2: 2000-2999 : Dirchlet Boundary Condition if ((boundaryEdge[i].bcType >= 2000) && (boundaryEdge[i].bcType <= 2999)) { if (BNTag[n1] != 2) { if (!bnode.Is_In_List(n1)) { bnode.Add_To_List(n1); boundaryNode[ibn].bcType = BNTag[n1]; boundaryNode[ibn].nodeNumber = n1; if (boundaryEdge[i].bcType == 2000) { boundaryNode[ibn].constant = node[n1].x; } else { boundaryNode[ibn].constant = boundaryEdge[i].c1; } ibn++; } } if (BNTag[n2] != 2) { if (!bnode.Is_In_List(n2)) { bnode.Add_To_List(n2); boundaryNode[ibn].bcType = BNTag[n2]; boundaryNode[ibn].nodeNumber = n2; if (boundaryEdge[i].bcType == 2000) { boundaryNode[ibn].constant = node[n2].x; } else { boundaryNode[ibn].constant = boundaryEdge[i].c1; } ibn++; } } } // BCType 2: 3000-3999 : Freestream if ((boundaryEdge[i].bcType >= 3000) && (boundaryEdge[i].bcType <= 3999)) { if (!bnode.Is_In_List(n1)) { bnode.Add_To_List(n1); boundaryNode[ibn].bcType = BNTag[n1]; boundaryNode[ibn].nodeNumber = n1; boundaryNode[ibn].constant = 0.0; ibn++; } if (!bnode.Is_In_List(n2)) { bnode.Add_To_List(n2); boundaryNode[ibn].bcType = BNTag[n2]; boundaryNode[ibn].nodeNumber = n2; boundaryNode[ibn].constant = 0.0; ibn++; } } } }