mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
merging master into local branch
This commit is contained in:
4
applications/test/directMappedPatch/Make/files
Normal file
4
applications/test/directMappedPatch/Make/files
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
testDirectMappedPatch.C
|
||||
|
||||
EXE = $(FOAM_USER_APPBIN)/testDirectMappedPatch
|
||||
6
applications/test/directMappedPatch/Make/options
Normal file
6
applications/test/directMappedPatch/Make/options
Normal file
@ -0,0 +1,6 @@
|
||||
EXE_INC = \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude
|
||||
|
||||
EXE_LIBS = \
|
||||
-lfiniteVolume
|
||||
127
applications/test/directMappedPatch/testDirectMappedPatch.C
Normal file
127
applications/test/directMappedPatch/testDirectMappedPatch.C
Normal file
@ -0,0 +1,127 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Application
|
||||
testDirectMappedPatch
|
||||
|
||||
Description
|
||||
Test direct mapped b.c. by mapping face centres (mesh.C().boundaryField()).
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
#include "argList.H"
|
||||
#include "fvMesh.H"
|
||||
#include "volFields.H"
|
||||
#include "meshTools.H"
|
||||
#include "Time.H"
|
||||
#include "OFstream.H"
|
||||
#include "volFields.H"
|
||||
#include "directMappedFixedValueFvPatchFields.H"
|
||||
|
||||
using namespace Foam;
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
// Main program:
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
# include "addTimeOptions.H"
|
||||
# include "setRootCase.H"
|
||||
# include "createTime.H"
|
||||
# include "createMesh.H"
|
||||
|
||||
wordList patchFieldTypes
|
||||
(
|
||||
mesh.boundaryMesh().size(),
|
||||
calculatedFvPatchVectorField::typeName
|
||||
);
|
||||
|
||||
forAll(mesh.boundaryMesh(), patchI)
|
||||
{
|
||||
if (isA<directMappedPolyPatch>(mesh.boundaryMesh()[patchI]))
|
||||
{
|
||||
patchFieldTypes[patchI] =
|
||||
directMappedFixedValueFvPatchVectorField::typeName;
|
||||
}
|
||||
}
|
||||
|
||||
Pout<< "patchFieldTypes:" << patchFieldTypes << endl;
|
||||
|
||||
volVectorField cc
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"cc",
|
||||
runTime.timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimensionedVector("zero", dimLength, vector::zero),
|
||||
patchFieldTypes
|
||||
);
|
||||
|
||||
cc.internalField() = mesh.C().internalField();
|
||||
cc.boundaryField().updateCoeffs();
|
||||
|
||||
forAll(cc.boundaryField(), patchI)
|
||||
{
|
||||
if
|
||||
(
|
||||
isA<directMappedFixedValueFvPatchVectorField>
|
||||
(
|
||||
cc.boundaryField()[patchI]
|
||||
)
|
||||
)
|
||||
{
|
||||
Pout<< "Detected a directMapped patch:" << patchI << endl;
|
||||
|
||||
OFstream str(mesh.boundaryMesh()[patchI].name() + ".obj");
|
||||
Pout<< "Writing mapped values to " << str.name() << endl;
|
||||
|
||||
label vertI = 0;
|
||||
const fvPatchVectorField& fvp = cc.boundaryField()[patchI];
|
||||
|
||||
forAll(fvp, i)
|
||||
{
|
||||
meshTools::writeOBJ(str, fvp.patch().Cf()[i]);
|
||||
vertI++;
|
||||
meshTools::writeOBJ(str, fvp[i]);
|
||||
vertI++;
|
||||
str << "l " << vertI-1 << ' ' << vertI << nl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Info<< "End\n" << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
4
applications/test/extendedStencil/Make/files
Normal file
4
applications/test/extendedStencil/Make/files
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
testExtendedStencil.C
|
||||
|
||||
EXE = $(FOAM_USER_APPBIN)/testExtendedStencil
|
||||
6
applications/test/extendedStencil/Make/options
Normal file
6
applications/test/extendedStencil/Make/options
Normal file
@ -0,0 +1,6 @@
|
||||
EXE_INC = \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude
|
||||
|
||||
EXE_LIBS = \
|
||||
-lfiniteVolume
|
||||
499
applications/test/extendedStencil/testExtendedStencil.C
Normal file
499
applications/test/extendedStencil/testExtendedStencil.C
Normal file
@ -0,0 +1,499 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Application
|
||||
testExtendedStencil
|
||||
|
||||
Description
|
||||
Test app for determining extended stencil.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "argList.H"
|
||||
#include "fvMesh.H"
|
||||
#include "volFields.H"
|
||||
#include "Time.H"
|
||||
#include "mapDistribute.H"
|
||||
#include "OFstream.H"
|
||||
#include "meshTools.H"
|
||||
//#include "FECCellToFaceStencil.H"
|
||||
//#include "CFCCellToFaceStencil.H"
|
||||
//#include "CPCCellToFaceStencil.H"
|
||||
//#include "CECCellToFaceStencil.H"
|
||||
//#include "extendedCentredCellToFaceStencil.H"
|
||||
//#include "extendedUpwindCellToFaceStencil.H"
|
||||
|
||||
//#include "centredCFCCellToFaceStencilObject.H"
|
||||
//#include "centredFECCellToFaceStencilObject.H"
|
||||
//#include "centredCPCCellToFaceStencilObject.H"
|
||||
//#include "centredCECCellToFaceStencilObject.H"
|
||||
|
||||
//#include "upwindFECCellToFaceStencilObject.H"
|
||||
//#include "upwindCPCCellToFaceStencilObject.H"
|
||||
//#include "upwindCECCellToFaceStencilObject.H"
|
||||
|
||||
//#include "upwindCFCCellToFaceStencilObject.H"
|
||||
#include "centredCFCFaceToCellStencilObject.H"
|
||||
|
||||
using namespace Foam;
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
void writeStencilOBJ
|
||||
(
|
||||
const fileName& fName,
|
||||
const point& fc,
|
||||
const List<point>& stencilCc
|
||||
)
|
||||
{
|
||||
OFstream str(fName);
|
||||
label vertI = 0;
|
||||
|
||||
meshTools::writeOBJ(str, fc);
|
||||
vertI++;
|
||||
|
||||
forAll(stencilCc, i)
|
||||
{
|
||||
meshTools::writeOBJ(str, stencilCc[i]);
|
||||
vertI++;
|
||||
str << "l 1 " << vertI << nl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Stats
|
||||
void writeStencilStats(const labelListList& stencil)
|
||||
{
|
||||
label sumSize = 0;
|
||||
label nSum = 0;
|
||||
label minSize = labelMax;
|
||||
label maxSize = labelMin;
|
||||
|
||||
forAll(stencil, i)
|
||||
{
|
||||
const labelList& sCells = stencil[i];
|
||||
|
||||
if (sCells.size() > 0)
|
||||
{
|
||||
sumSize += sCells.size();
|
||||
nSum++;
|
||||
minSize = min(minSize, sCells.size());
|
||||
maxSize = max(maxSize, sCells.size());
|
||||
}
|
||||
}
|
||||
reduce(sumSize, sumOp<label>());
|
||||
reduce(nSum, sumOp<label>());
|
||||
sumSize /= nSum;
|
||||
|
||||
reduce(minSize, minOp<label>());
|
||||
reduce(maxSize, maxOp<label>());
|
||||
|
||||
Info<< "Stencil size :" << nl
|
||||
<< " average : " << sumSize << nl
|
||||
<< " min : " << minSize << nl
|
||||
<< " max : " << maxSize << nl
|
||||
<< endl;
|
||||
}
|
||||
|
||||
|
||||
// Main program:
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
# include "addTimeOptions.H"
|
||||
# include "setRootCase.H"
|
||||
# include "createTime.H"
|
||||
|
||||
// Get times list
|
||||
instantList Times = runTime.times();
|
||||
# include "checkTimeOptions.H"
|
||||
runTime.setTime(Times[startTime], startTime);
|
||||
# include "createMesh.H"
|
||||
|
||||
// Force calculation of extended edge addressing
|
||||
const labelListList& edgeFaces = mesh.edgeFaces();
|
||||
const labelListList& edgeCells = mesh.edgeCells();
|
||||
const labelListList& pointCells = mesh.pointCells();
|
||||
Info<< "dummy:" << edgeFaces.size() + edgeCells.size() + pointCells.size()
|
||||
<< endl;
|
||||
|
||||
|
||||
// Centred, semi-extended stencil (edge cells only)
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
// {
|
||||
// //const FECCellToFaceStencil cfcStencil(mesh);
|
||||
// //const extendedCentredCellToFaceStencil addressing
|
||||
// //(
|
||||
// // cfcStencil
|
||||
// //);
|
||||
// const extendedCentredStencil& addressing =
|
||||
// centredFECCellToFaceStencilObject::New
|
||||
// (
|
||||
// mesh
|
||||
// );
|
||||
//
|
||||
// Info<< "faceEdgeCell:" << endl;
|
||||
// writeStencilStats(addressing.stencil());
|
||||
//
|
||||
// // Collect stencil cell centres
|
||||
// List<List<point> > stencilPoints(mesh.nFaces());
|
||||
// addressing.collectData
|
||||
// (
|
||||
// mesh.C(),
|
||||
// stencilPoints
|
||||
// );
|
||||
//
|
||||
// forAll(stencilPoints, faceI)
|
||||
// {
|
||||
// writeStencilOBJ
|
||||
// (
|
||||
// runTime.path()/"faceEdgeCell" + Foam::name(faceI) + ".obj",
|
||||
// mesh.faceCentres()[faceI],
|
||||
// stencilPoints[faceI]
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
// // Centred, face stencil
|
||||
// // ~~~~~~~~~~~~~~~~~~~~~
|
||||
//
|
||||
// {
|
||||
// const extendedCentredCellToFaceStencil& addressing =
|
||||
// centredCFCCellToFaceStencilObject::New
|
||||
// (
|
||||
// mesh
|
||||
// );
|
||||
//
|
||||
// Info<< "cellFaceCell:" << endl;
|
||||
// writeStencilStats(addressing.stencil());
|
||||
//
|
||||
//
|
||||
// //// Do some interpolation.
|
||||
// //{
|
||||
// // const labelListList& stencil = addressing.stencil();
|
||||
// // List<List<scalar> > stencilWeights(stencil.size());
|
||||
// // forAll(stencil, faceI)
|
||||
// // {
|
||||
// // const labelList& fStencil = stencil[faceI];
|
||||
// //
|
||||
// // if (fStencil.size() > 0)
|
||||
// // {
|
||||
// // // Uniform weights
|
||||
// // stencilWeights[faceI] = scalarList
|
||||
// // (
|
||||
// // fStencil.size(),
|
||||
// // 1.0/fStencil.size()
|
||||
// // );
|
||||
// // }
|
||||
// // }
|
||||
// //
|
||||
// // tmp<surfaceVectorField> tfc
|
||||
// // (
|
||||
// // addressing.weightedSum(mesh.C(), stencilWeights)
|
||||
// // );
|
||||
// //}
|
||||
//
|
||||
//
|
||||
// // Collect stencil cell centres
|
||||
// List<List<point> > stencilPoints(mesh.nFaces());
|
||||
// addressing.collectData
|
||||
// (
|
||||
// mesh.C(),
|
||||
// stencilPoints
|
||||
// );
|
||||
//
|
||||
// forAll(stencilPoints, faceI)
|
||||
// {
|
||||
// if (stencilPoints[faceI].size() >= 15)
|
||||
// {
|
||||
// writeStencilOBJ
|
||||
// (
|
||||
// runTime.path()/"centredFace" + Foam::name(faceI) + ".obj",
|
||||
// mesh.faceCentres()[faceI],
|
||||
// stencilPoints[faceI]
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// // Centred, point stencil
|
||||
// // ~~~~~~~~~~~~~~~~~~~~~~
|
||||
//
|
||||
// {
|
||||
// //const extendedCentredCellToFaceStencil& addressing =
|
||||
// //centredCPCStencilObject::New
|
||||
// //(
|
||||
// // mesh
|
||||
// //);
|
||||
// //
|
||||
// //Info<< "cellPointCell:" << endl;
|
||||
// //writeStencilStats(addressing.stencil());
|
||||
// //
|
||||
// //
|
||||
// //// Collect stencil cell centres
|
||||
// //List<List<point> > stencilPoints(mesh.nFaces());
|
||||
// //addressing.collectData
|
||||
// //(
|
||||
// // mesh.C(),
|
||||
// // stencilPoints
|
||||
// //);
|
||||
// //
|
||||
// //forAll(stencilPoints, faceI)
|
||||
// //{
|
||||
// // writeStencilOBJ
|
||||
// // (
|
||||
// // runTime.path()/"centredPoint" + Foam::name(faceI) + ".obj",
|
||||
// // mesh.faceCentres()[faceI],
|
||||
// // stencilPoints[faceI]
|
||||
// // );
|
||||
// //}
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// // Centred, edge stencil
|
||||
// // ~~~~~~~~~~~~~~~~~~~~~~
|
||||
//
|
||||
// {
|
||||
// //const extendedCentredCellToFaceStencil& addressing =
|
||||
// //centredCECStencilObject::New
|
||||
// //(
|
||||
// // mesh
|
||||
// //);
|
||||
// //
|
||||
// //Info<< "cellEdgeCell:" << endl;
|
||||
// //writeStencilStats(addressing.stencil());
|
||||
// //
|
||||
// //
|
||||
// //// Collect stencil cell centres
|
||||
// //List<List<point> > stencilPoints(mesh.nFaces());
|
||||
// //addressing.collectData
|
||||
// //(
|
||||
// // mesh.C(),
|
||||
// // stencilPoints
|
||||
// //);
|
||||
// //
|
||||
// //forAll(stencilPoints, faceI)
|
||||
// //{
|
||||
// // writeStencilOBJ
|
||||
// // (
|
||||
// // runTime.path()/"centredEdge" + Foam::name(faceI) + ".obj",
|
||||
// // mesh.faceCentres()[faceI],
|
||||
// // stencilPoints[faceI]
|
||||
// // );
|
||||
// //}
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// Upwind, semi-extended stencil
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
//{
|
||||
// const extendedUpwindCellToFaceStencil& addressing =
|
||||
// upwindFECCellToFaceStencilObject::New
|
||||
// (
|
||||
// mesh,
|
||||
// 0.5
|
||||
// );
|
||||
//
|
||||
// Info<< "upwind-faceEdgeCell:" << endl;
|
||||
// writeStencilStats(addressing.ownStencil());
|
||||
//
|
||||
// {
|
||||
// // Collect stencil cell centres
|
||||
// List<List<point> > ownPoints(mesh.nFaces());
|
||||
// addressing.collectData
|
||||
// (
|
||||
// addressing.ownMap(),
|
||||
// addressing.ownStencil(),
|
||||
// mesh.C(),
|
||||
// ownPoints
|
||||
// );
|
||||
//
|
||||
// forAll(ownPoints, faceI)
|
||||
// {
|
||||
// writeStencilOBJ
|
||||
// (
|
||||
// runTime.path()/"ownFEC" + Foam::name(faceI) + ".obj",
|
||||
// mesh.faceCentres()[faceI],
|
||||
// ownPoints[faceI]
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
// {
|
||||
// // Collect stencil cell centres
|
||||
// List<List<point> > neiPoints(mesh.nFaces());
|
||||
// addressing.collectData
|
||||
// (
|
||||
// addressing.neiMap(),
|
||||
// addressing.neiStencil(),
|
||||
// mesh.C(),
|
||||
// neiPoints
|
||||
// );
|
||||
//
|
||||
// forAll(neiPoints, faceI)
|
||||
// {
|
||||
// writeStencilOBJ
|
||||
// (
|
||||
// runTime.path()/"neiFEC" + Foam::name(faceI) + ".obj",
|
||||
// mesh.faceCentres()[faceI],
|
||||
// neiPoints[faceI]
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
|
||||
// Upwind, extended stencil
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
//{
|
||||
// const extendedUpwindCellToFaceStencil& addressing =
|
||||
// upwindCFCCellToFaceStencilObject::New
|
||||
// (
|
||||
// mesh,
|
||||
// 0.5
|
||||
// );
|
||||
//
|
||||
// Info<< "upwind-cellFaceCell:" << endl;
|
||||
// writeStencilStats(addressing.ownStencil());
|
||||
//
|
||||
// {
|
||||
// // Collect stencil cell centres
|
||||
// List<List<point> > ownPoints(mesh.nFaces());
|
||||
// addressing.collectData
|
||||
// (
|
||||
// addressing.ownMap(),
|
||||
// addressing.ownStencil(),
|
||||
// mesh.C(),
|
||||
// ownPoints
|
||||
// );
|
||||
//
|
||||
// forAll(ownPoints, faceI)
|
||||
// {
|
||||
// writeStencilOBJ
|
||||
// (
|
||||
// runTime.path()/"ownCFC" + Foam::name(faceI) + ".obj",
|
||||
// mesh.faceCentres()[faceI],
|
||||
// ownPoints[faceI]
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
// {
|
||||
// // Collect stencil cell centres
|
||||
// List<List<point> > neiPoints(mesh.nFaces());
|
||||
// addressing.collectData
|
||||
// (
|
||||
// addressing.neiMap(),
|
||||
// addressing.neiStencil(),
|
||||
// mesh.C(),
|
||||
// neiPoints
|
||||
// );
|
||||
//
|
||||
// forAll(neiPoints, faceI)
|
||||
// {
|
||||
// writeStencilOBJ
|
||||
// (
|
||||
// runTime.path()/"neiCFC" + Foam::name(faceI) + ".obj",
|
||||
// mesh.faceCentres()[faceI],
|
||||
// neiPoints[faceI]
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
|
||||
//---- CELL CENTRED STENCIL -----
|
||||
|
||||
// Centred, cell stencil
|
||||
// ~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
{
|
||||
const extendedCentredFaceToCellStencil& addressing =
|
||||
centredCFCFaceToCellStencilObject::New
|
||||
(
|
||||
mesh
|
||||
);
|
||||
|
||||
Info<< "cellFaceCell:" << endl;
|
||||
writeStencilStats(addressing.stencil());
|
||||
|
||||
// Collect stencil face centres
|
||||
List<List<point> > stencilPoints(mesh.nCells());
|
||||
addressing.collectData
|
||||
(
|
||||
mesh.Cf(),
|
||||
stencilPoints
|
||||
);
|
||||
|
||||
forAll(stencilPoints, cellI)
|
||||
{
|
||||
writeStencilOBJ
|
||||
(
|
||||
runTime.path()/"centredCell" + Foam::name(cellI) + ".obj",
|
||||
mesh.cellCentres()[cellI],
|
||||
stencilPoints[cellI]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//XXXXXX
|
||||
// // Evaluate
|
||||
// List<List<scalar> > stencilData(faceStencils.size());
|
||||
// collectStencilData
|
||||
// (
|
||||
// distMap,
|
||||
// faceStencils,
|
||||
// vf,
|
||||
// stencilData
|
||||
// );
|
||||
// for(label faci = 0; faci < mesh.nInternalFaces(); faci++)
|
||||
// {
|
||||
// const scalarList& stData = stencilData[faceI];
|
||||
// const scalarList& stWeight = fit[faceI];
|
||||
//
|
||||
// forAll(stData, i)
|
||||
// {
|
||||
// sf[faceI] += stWeight[i]*stData[i];
|
||||
// }
|
||||
// }
|
||||
// See finiteVolume/lnInclude/leastSquaresGrad.C
|
||||
//XXXXXX
|
||||
|
||||
Pout<< "End\n" << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user