|
MOAB: Mesh Oriented datABase
(version 5.4.1)
|
#include <iostream>#include "moab/Core.hpp"#include "moab/Remapping/TempestRemapper.hpp"#include "Internals.hpp"#include "TestRunner.hpp"
Include dependency graph for test_remapping.cpp:Go to the source code of this file.
Defines | |
| #define | IS_BUILDING_MB |
Functions | |
| void | test_tempest_cs_create () |
| void | test_tempest_rll_create () |
| void | test_tempest_ico_create () |
| void | test_tempest_mpas_create () |
| void | test_tempest_overlap_combinations () |
| void | test_tempest_to_moab_convert () |
| int | main (int argc, char **argv) |
Variables | |
| static const double | radius = 1.0 |
| const double | MOAB_PI = 3.1415926535897932384626433832795028841971693993751058209749445923 |
| static const double | surface_area = 4.0 * MOAB_PI * radius * radius |
| static const std::string | outFilenames [5] |
| #define IS_BUILDING_MB |
MOAB, a Mesh-Oriented datABase, is a software component for creating, storing and accessing finite element mesh data.
Copyright 2004 Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains certain rights in this software.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
Definition at line 33 of file test_remapping.cpp.
| int main | ( | int | argc, |
| char ** | argv | ||
| ) |
Definition at line 54 of file test_remapping.cpp.
References REGISTER_TEST, RUN_TESTS, test_tempest_cs_create(), test_tempest_ico_create(), test_tempest_mpas_create(), test_tempest_overlap_combinations(), test_tempest_rll_create(), and test_tempest_to_moab_convert().
{
REGISTER_TEST( test_tempest_cs_create );
REGISTER_TEST( test_tempest_rll_create );
REGISTER_TEST( test_tempest_ico_create );
REGISTER_TEST( test_tempest_mpas_create );
REGISTER_TEST( test_tempest_overlap_combinations );
REGISTER_TEST( test_tempest_to_moab_convert );
#ifdef MOAB_HAVE_MPI
MPI_Init( &argc, &argv );
#endif
int result = RUN_TESTS( argc, argv );
#ifdef MOAB_HAVE_MPI
MPI_Finalize();
#endif
return result;
}
| void test_tempest_cs_create | ( | ) |
Definition at line 73 of file test_remapping.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, moab::error(), ierr, outFilenames, and surface_area.
Referenced by main().
{
NcError error( NcError::verbose_nonfatal );
const int blockSize = 30;
const std::string outFilename = outFilenames[0];
std::cout << "Creating TempestRemap Cubed-Sphere Mesh ...\n";
Mesh tempest_mesh;
int ierr = GenerateCSMesh( tempest_mesh, blockSize, outFilename, "NetCDF4" );
CHECK_EQUAL( ierr, 0 );
// Compute the surface area of CS mesh
const double sphere_area = tempest_mesh.CalculateFaceAreas( false );
CHECK_REAL_EQUAL( sphere_area, surface_area, 1e-10 );
}
| void test_tempest_ico_create | ( | ) |
Definition at line 110 of file test_remapping.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, moab::error(), ierr, outFilenames, and surface_area.
Referenced by main().
{
NcError error( NcError::verbose_nonfatal );
const int blockSize = 30;
const bool computeDual = false;
const std::string outFilename = outFilenames[2];
std::cout << "Creating TempestRemap Icosahedral Mesh ...\n";
Mesh tempest_mesh;
int ierr = GenerateICOMesh( tempest_mesh, blockSize, computeDual, outFilename, "NetCDF4" );
CHECK_EQUAL( ierr, 0 );
// Compute the surface area of ICO mesh
const double sphere_area = tempest_mesh.CalculateFaceAreas( false );
CHECK_REAL_EQUAL( sphere_area, surface_area, 1e-10 );
}
| void test_tempest_mpas_create | ( | ) |
Definition at line 127 of file test_remapping.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, moab::error(), ierr, outFilenames, and surface_area.
Referenced by main().
{
NcError error( NcError::verbose_nonfatal );
const int blockSize = 30;
const bool computeDual = true;
const std::string outFilename = outFilenames[3];
std::cout << "Creating TempestRemap MPAS Mesh (dual of the Icosahedral) ...\n";
Mesh tempest_mesh;
int ierr = GenerateICOMesh( tempest_mesh, blockSize, computeDual, outFilename, "NetCDF4" );
CHECK_EQUAL( ierr, 0 );
// Compute the surface area of MPAS mesh
const double sphere_area = tempest_mesh.CalculateFaceAreas( false );
CHECK_REAL_EQUAL( sphere_area, surface_area, 1e-10 );
}
| void test_tempest_overlap_combinations | ( | ) |
Definition at line 144 of file test_remapping.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, moab::error(), ierr, outFilenames, and surface_area.
Referenced by main().
{
NcError error( NcError::verbose_nonfatal );
const std::string outFilename = outFilenames[4];
Mesh inpMesh( outFilenames[0] );
// verify input mesh area first
const double inpArea = inpMesh.CalculateFaceAreas( false );
CHECK_REAL_EQUAL( inpArea, surface_area, 1e-10 );
for( int isrc = 0; isrc < 4; ++isrc )
{
for( int jsrc = 0; jsrc < 4; ++jsrc )
{
std::cout << "Computing Overlap between " << outFilenames[isrc] << " and " << outFilenames[jsrc]
<< " ...\n";
Mesh tempest_mesh;
int ierr = GenerateOverlapMesh( outFilenames[isrc], outFilenames[jsrc], tempest_mesh, outFilename,
"NetCDF4", "exact", false, false, false, false, false );
CHECK_EQUAL( ierr, 0 );
// verify overlap mesh area
const double ovArea = tempest_mesh.CalculateFaceAreas( false );
CHECK_REAL_EQUAL( ovArea, surface_area, 1e-10 );
}
}
}
| void test_tempest_rll_create | ( | ) |
Definition at line 89 of file test_remapping.cpp.
References CHECK_EQUAL, CHECK_REAL_EQUAL, moab::error(), ierr, outFilenames, and surface_area.
Referenced by main().
{
NcError error( NcError::verbose_nonfatal );
const int blockSize = 30;
const std::string outFilename = outFilenames[1];
std::cout << "Creating TempestRemap Latitude-Longitude Mesh ...\n";
Mesh tempest_mesh;
int ierr =
GenerateRLLMesh( tempest_mesh, blockSize * 2, blockSize, 0.0, 360.0, -90.0, 90.0, false, false, true, "", "",
"", // std::string strInputFile, std::string strInputFileLonName, std::string
// strInputFileLatName,
outFilename, "NetCDF4", // std::string strOutputFile, std::string strOutputFormat
false );
CHECK_EQUAL( ierr, 0 );
// Compute the surface area of RLL mesh
const double sphere_area = tempest_mesh.CalculateFaceAreas( false );
CHECK_REAL_EQUAL( sphere_area, surface_area, 1e-10 );
}
| void test_tempest_to_moab_convert | ( | ) |
Definition at line 171 of file test_remapping.cpp.
References CHECK, moab::ParallelComm::check_all_shared_handles(), CHECK_EQUAL, CHECK_ERR, moab::TempestRemapper::constructEdgeMap, moab::TempestRemapper::ConvertMeshToTempest(), moab::TempestRemapper::ConvertTempestMesh(), moab::TempestRemapper::CS, moab::error(), ErrorCode, moab::TempestRemapper::GetMesh(), moab::TempestRemapper::GetMeshSet(), moab::TempestRemapper::initialize(), moab::TempestRemapper::LoadMesh(), moab::TempestRemapper::meshValidate, MPI_COMM_WORLD, outFilenames, moab::Remapper::SourceMesh, and moab::Remapper::TargetMesh.
Referenced by main().
{
NcError error( NcError::verbose_nonfatal );
// Allocate and create MOAB Remapper object
moab::ErrorCode rval;
moab::Interface* mbCore = new( std::nothrow ) moab::Core;
CHECK( NULL != mbCore );
#ifdef MOAB_HAVE_MPI
moab::ParallelComm* pcomm = new moab::ParallelComm( mbCore, MPI_COMM_WORLD, 0 );
moab::TempestRemapper* remapper = new moab::TempestRemapper( mbCore, pcomm );
#else
moab::TempestRemapper* remapper = new moab::TempestRemapper( mbCore );
#endif
remapper->meshValidate = true;
remapper->constructEdgeMap = true;
remapper->initialize();
#ifdef MOAB_HAVE_MPI
rval = pcomm->check_all_shared_handles();CHECK_ERR( rval );
#endif
rval = remapper->LoadMesh( moab::Remapper::SourceMesh, outFilenames[0], moab::TempestRemapper::CS );CHECK_ERR( rval );
// Load the meshes and validate
rval = remapper->ConvertTempestMesh( moab::Remapper::SourceMesh );CHECK_ERR( rval );
Mesh* srcTempest = remapper->GetMesh( moab::Remapper::SourceMesh );
moab::EntityHandle srcset = remapper->GetMeshSet( moab::Remapper::SourceMesh );
moab::EntityHandle& tgtset = remapper->GetMeshSet( moab::Remapper::TargetMesh );
tgtset = srcset;
// Load the meshes and validate
rval = remapper->ConvertMeshToTempest( moab::Remapper::TargetMesh );CHECK_ERR( rval );
Mesh* tgtTempest = remapper->GetMesh( moab::Remapper::TargetMesh );
const size_t tempest_nodes_src = srcTempest->nodes.size(), tempest_elems_src = srcTempest->faces.size();
const size_t tempest_nodes_tgt = tgtTempest->nodes.size(), tempest_elems_tgt = tgtTempest->faces.size();
CHECK_EQUAL( tempest_nodes_src, tempest_nodes_tgt );
CHECK_EQUAL( tempest_elems_src, tempest_elems_tgt );
delete remapper;
#ifdef MOAB_HAVE_MPI
delete pcomm;
#endif
delete mbCore;
}
| const double MOAB_PI = 3.1415926535897932384626433832795028841971693993751058209749445923 |
Definition at line 42 of file test_remapping.cpp.
const std::string outFilenames[5] [static] |
{ "outTempestCS.g", "outTempestRLL.g", "outTempestICO.g", "outTempestICOD.g",
"outTempestOV.g" }
Definition at line 44 of file test_remapping.cpp.
Referenced by test_tempest_cs_create(), test_tempest_ico_create(), test_tempest_mpas_create(), test_tempest_overlap_combinations(), test_tempest_rll_create(), and test_tempest_to_moab_convert().
const double radius = 1.0 [static] |
Definition at line 41 of file test_remapping.cpp.
const double surface_area = 4.0 * MOAB_PI * radius * radius [static] |
Definition at line 43 of file test_remapping.cpp.
Referenced by test_tempest_cs_create(), test_tempest_ico_create(), test_tempest_mpas_create(), test_tempest_overlap_combinations(), test_tempest_rll_create(), and v_tet_quality().