Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#203: NOX: Provide Tpetra version of test_BroydenOp.C #204

Draft
wants to merge 4 commits into
base: NGA-FY23-develop
Choose a base branch
from

Conversation

cwschilly
Copy link
Collaborator

Fixes #203

@cwschilly cwschilly self-assigned this Sep 19, 2023
@cwschilly cwschilly linked an issue Sep 19, 2023 that may be closed by this pull request
@cwschilly cwschilly marked this pull request as draft September 19, 2023 19:46
@cwschilly
Copy link
Collaborator Author

Hello @rppawlo, thank you for your comment on PR #193 . I am also working to create a Tpetra version of test_BroydenOp.C, but it seems that the operator in question only exists within the Epetra namespace (NOX::Epetra::BroydenOperator) and depends on Epetra data types. Is this true?

@github-actions
Copy link

⚡ Code quality check ⚡


🔴 clang-tidy found 64 issues! Click here to see details.

#include <NOX.H>
#include "NOX_TestCompare.H" // Test Suite headers
// #include "NOX_Epetra_DebugTools.H" // CWS: necessary?
// Trilinos headers
#include <Tpetra_Map.hpp>

!Line: 49 - warning: #includes are not sorted properly [llvm-include-order]

#include <Tpetra_Map.hpp>
#include <Tpetra_Core.hpp>
#include <Tpetra_CrsMatrix.hpp>
#include <Tpetra_RowMatrix.hpp>
#include "Teuchos_StandardCatchMacros.hpp"

!Line: 54 - warning: #includes are not sorted properly [llvm-include-order]

int run(int argc, char *argv[]) {
using ST = typename Tpetra::Vector<ScalarType>::scalar_type;
using LO = typename Tpetra::Vector<>::local_ordinal_type;
using GO = typename Tpetra::Vector<>::global_ordinal_type;
using NT = typename Tpetra::Map<>::node_type;

!Line: 63 - warning: declaration must be declared within the '__llvm_libc' namespace [llvmlibc-implementation-in-namespace]

int run(int argc, char *argv[]) {
using ST = typename Tpetra::Vector<ScalarType>::scalar_type;
using LO = typename Tpetra::Vector<>::local_ordinal_type;
using GO = typename Tpetra::Vector<>::global_ordinal_type;
using NT = typename Tpetra::Map<>::node_type;

!Line: 63 - warning: use a trailing return type for this function [modernize-use-trailing-return-type]

int run(int argc, char *argv[]) {
using ST = typename Tpetra::Vector<ScalarType>::scalar_type;
using LO = typename Tpetra::Vector<>::local_ordinal_type;
using GO = typename Tpetra::Vector<>::global_ordinal_type;
using NT = typename Tpetra::Map<>::node_type;

!Line: 63 - warning: do not declare C-style arrays, use std::array<> instead [cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays]

Teuchos::GlobalMPISession session(&argc, &argv, nullptr);
bool success = false;
bool verbose = false;
try {

!Line: 79 - warning: variable 'session' of type 'Teuchos::GlobalMPISession' can be declared 'const' [misc-const-correctness]

const auto Comm = Tpetra::getDefaultComm();
int * testInt = new int[100];
delete [] testInt;
if (argc > 1)

!Line: 86 - warning: 'getDefaultComm' must resolve to a function declared within the '__llvm_libc' namespace [llvmlibc-callee-namespace]

int * testInt = new int[100];
delete [] testInt;
if (argc > 1)
if (argv[1][0]=='-' && argv[1][1]=='v')
verbose = true;

!Line: 88 - warning: initializing non-owner 'int *' with a newly created 'gsl::owner<>' [cppcoreguidelines-owning-memory]

int * testInt = new int[100];
delete [] testInt;
if (argc > 1)
if (argv[1][0]=='-' && argv[1][1]=='v')
verbose = true;

!Line: 88 - warning: 100 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

delete [] testInt;
if (argc > 1)
if (argv[1][0]=='-' && argv[1][1]=='v')
verbose = true;

!Line: 89 - warning: deleting a pointer through a type that is not marked 'gsl::owner<>'; consider using a smart pointer instead [cppcoreguidelines-owning-memory]
!Line: 88 - note: variable declared here

if (argc > 1)
if (argv[1][0]=='-' && argv[1][1]=='v')
verbose = true;
// Get the process ID and the total number of processors
int MyPID = Comm->getRank();

!Line: 91 - warning: statement should be inside braces [google-readability-braces-around-statements,hicpp-braces-around-statements,readability-braces-around-statements]

if (argv[1][0]=='-' && argv[1][1]=='v')
verbose = true;
// Get the process ID and the total number of processors
int MyPID = Comm->getRank();
int NumProc = Comm->getSize();

!Line: 92 - warning: do not use pointer arithmetic [cppcoreguidelines-pro-bounds-pointer-arithmetic]

if (argv[1][0]=='-' && argv[1][1]=='v')
verbose = true;
// Get the process ID and the total number of processors
int MyPID = Comm->getRank();
int NumProc = Comm->getSize();

!Line: 92 - warning: do not use pointer arithmetic [cppcoreguidelines-pro-bounds-pointer-arithmetic]

if (argv[1][0]=='-' && argv[1][1]=='v')
verbose = true;
// Get the process ID and the total number of processors
int MyPID = Comm->getRank();
int NumProc = Comm->getSize();

!Line: 92 - warning: statement should be inside braces [google-readability-braces-around-statements,hicpp-braces-around-statements,readability-braces-around-statements]

Teuchos::ParameterList & noxParams = *(noxParamsPtr.get());
// Set up the printing utilities
// Only print output if the "-v" flag is set on the command line
Teuchos::ParameterList& printParams = noxParams.sublist("Printing");
printParams.set("MyPID", MyPID);

!Line: 101 - warning: variable 'noxParams' of type 'Teuchos::ParameterList &' can be declared 'const' [misc-const-correctness]

Teuchos::ParameterList & noxParams = *(noxParamsPtr.get());
// Set up the printing utilities
// Only print output if the "-v" flag is set on the command line
Teuchos::ParameterList& printParams = noxParams.sublist("Printing");
printParams.set("MyPID", MyPID);

!Line: 101 - warning: redundant get() call on smart pointer [readability-redundant-smartptr-get]

printParams.set("Output Precision", 5);
printParams.set("Output Processor", 0);
if( verbose )
printParams.set("Output Information",
NOX::Utils::OuterIteration +
NOX::Utils::OuterIterationStatusTest +

!Line: 107 - warning: 5 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

if( verbose )
printParams.set("Output Information",
NOX::Utils::OuterIteration +
NOX::Utils::OuterIterationStatusTest +
NOX::Utils::InnerIteration +
NOX::Utils::Parameters +

!Line: 109 - warning: statement should be inside braces [google-readability-braces-around-statements,hicpp-braces-around-statements,readability-braces-around-statements]

else
printParams.set("Output Information", NOX::Utils::Error +
NOX::Utils::TestDetails);
Teuchos::RCP<NOX::Utils> printing = Teuchos::rcp( new NOX::Utils(printParams) );

!Line: 118 - warning: statement should be inside braces [google-readability-braces-around-statements,hicpp-braces-around-statements,readability-braces-around-statements]

if (printing->isPrintType(NOX::Utils::TestDetails))
printing->out() << "Starting tpetra/NOX_Tpetra_BroydenOp.exe" << std::endl;
// Identify processor information
#ifdef HAVE_MPI
if (printing->isPrintType(NOX::Utils::TestDetails))

!Line: 125 - warning: statement should be inside braces [google-readability-braces-around-statements,hicpp-braces-around-statements,readability-braces-around-statements]

if (printing->isPrintType(NOX::Utils::TestDetails))
printing->out() << "Process " << MyPID << " is alive!" << std::endl;
Comm->barrier();
#else
if (printing->isPrintType(NOX::Utils::TestDetails))
printing->out() << "Serial Run" << std::endl;

!Line: 137 - warning: statement should be inside braces [google-readability-braces-around-statements,hicpp-braces-around-statements,readability-braces-around-statements]

int status = 0;
// Create a TestCompare class
NOX::TestCompare tester( printing->out(), *printing);
ST abstol = 1.e-4;
ST reltol = 1.e-4 ;

!Line: 145 - warning: variable 'status' of type 'int' can be declared 'const' [misc-const-correctness]

ST abstol = 1.e-4;
ST reltol = 1.e-4 ;
// Test NOX::Epetra::BroydenOperator
int numGlobalElems = 3 * NumProc;
RCP<tmap_t> broydenRowMap = rcp( new tmap_t(numGlobalElems, 0, Comm) );

!Line: 149 - warning: variable 'abstol' is not initialized [cppcoreguidelines-init-variables]

ST reltol = 1.e-4 ;
// Test NOX::Epetra::BroydenOperator
int numGlobalElems = 3 * NumProc;
RCP<tmap_t> broydenRowMap = rcp( new tmap_t(numGlobalElems, 0, Comm) );
RCP<tvector_t> broydenWorkVec = rcp ( new tvector_t(broydenRowMap));

!Line: 150 - warning: variable 'reltol' is not initialized [cppcoreguidelines-init-variables]

int numGlobalElems = 3 * NumProc;
RCP<tmap_t> broydenRowMap = rcp( new tmap_t(numGlobalElems, 0, Comm) );
RCP<tvector_t> broydenWorkVec = rcp ( new tvector_t(broydenRowMap));
RCP<tcrsgraph_t> broydenWorkGraph = rcp ( new tcrsgraph_t(broydenRowMap, 0) );
const std::vector<GO> globalIndices(3);

!Line: 153 - warning: variable 'numGlobalElems' of type 'int' can be declared 'const' [misc-const-correctness]

RCP<tmap_t> broydenRowMap = rcp( new tmap_t(numGlobalElems, 0, Comm) );
RCP<tvector_t> broydenWorkVec = rcp ( new tvector_t(broydenRowMap));
RCP<tcrsgraph_t> broydenWorkGraph = rcp ( new tcrsgraph_t(broydenRowMap, 0) );
const std::vector<GO> globalIndices(3);
for( int lcol = 0; lcol < 3; ++lcol )

!Line: 154 - warning: variable 'broydenRowMap' is not initialized [cppcoreguidelines-init-variables]

RCP<tvector_t> broydenWorkVec = rcp ( new tvector_t(broydenRowMap));
RCP<tcrsgraph_t> broydenWorkGraph = rcp ( new tcrsgraph_t(broydenRowMap, 0) );
const std::vector<GO> globalIndices(3);
for( int lcol = 0; lcol < 3; ++lcol )
globalIndices[lcol] = 3 * MyPID + lcol;

!Line: 155 - warning: variable 'broydenWorkVec' is not initialized [cppcoreguidelines-init-variables]

RCP<tcrsgraph_t> broydenWorkGraph = rcp ( new tcrsgraph_t(broydenRowMap, 0) );
const std::vector<GO> globalIndices(3);
for( int lcol = 0; lcol < 3; ++lcol )
globalIndices[lcol] = 3 * MyPID + lcol;

!Line: 156 - warning: variable 'broydenWorkGraph' is not initialized [cppcoreguidelines-init-variables]

const std::vector<GO> globalIndices(3);
for( int lcol = 0; lcol < 3; ++lcol )
globalIndices[lcol] = 3 * MyPID + lcol;
const std::vector<GO> myGlobalIndices(2);

!Line: 158 - warning: variable 'globalIndices' is not initialized [cppcoreguidelines-init-variables]

for( int lcol = 0; lcol < 3; ++lcol )
globalIndices[lcol] = 3 * MyPID + lcol;
const std::vector<GO> myGlobalIndices(2);
// Row 1 structure

!Line: 159 - warning: kernel performance could be improved by unrolling this loop with a '#pragma unroll' directive [altera-unroll-loops]

for( int lcol = 0; lcol < 3; ++lcol )
globalIndices[lcol] = 3 * MyPID + lcol;
const std::vector<GO> myGlobalIndices(2);
// Row 1 structure

!Line: 159 - warning: statement should be inside braces [google-readability-braces-around-statements,hicpp-braces-around-statements,readability-braces-around-statements]

const std::vector<GO> myGlobalIndices(2);
// Row 1 structure
myGlobalIndices[0] = globalIndices[0];
myGlobalIndices[1] = globalIndices[2];
broydenWorkGraph->insertGlobalIndices( globalIndices[0], 2, myGlobalIndices[0] );

!Line: 162 - warning: variable 'myGlobalIndices' is not initialized [cppcoreguidelines-init-variables]

Teuchos::RCP<tcrsmatrix_t> broydenWorkMatrix =
Teuchos::rcp( new tcrsmatrix_t( broydenWorkGraph ) );
// Create an identity matrix
broydenWorkVec.putScalar(1.0);
broydenWorkMatrix->replaceDiagonalValues(broydenWorkVec);

!Line: 179 - warning: variable 'broydenWorkMatrix' is not initialized [cppcoreguidelines-init-variables]

broydenWorkVec[2] = 2.0;
broydenOp.setStepVector( broydenWorkVec );
broydenWorkVec[0] = 2.0;
broydenWorkVec[1] = 1.0;
broydenWorkVec[2] = 3.0;

!Line: 190 - warning: 2.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

broydenWorkVec[0] = 2.0;
broydenWorkVec[1] = 1.0;
broydenWorkVec[2] = 3.0;
broydenOp.setYieldVector( broydenWorkVec );
broydenOp.computeSparseBroydenUpdate();

!Line: 193 - warning: 2.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

broydenWorkVec[2] = 3.0;
broydenOp.setYieldVector( broydenWorkVec );
broydenOp.computeSparseBroydenUpdate();
// Create the gold matrix for comparison

!Line: 195 - warning: 3.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

Teuchos::RCP<tcrsmatrix_t> goldMatrix = Teuchos::rcp( new tcrsmatrix_t( Teuchos::Copy, broydenWorkGraph ) );
int numCols ;
ST * values ;
// Row 1 answers

!Line: 201 - warning: variable 'goldMatrix' is not initialized [cppcoreguidelines-init-variables]

int numCols ;
ST * values ;
// Row 1 answers
goldMatrix->ExtractMyRowView( 0, numCols, values );
values[0] = 6.0 ;

!Line: 203 - warning: variable 'numCols' is not initialized [cppcoreguidelines-init-variables]

ST * values ;
// Row 1 answers
goldMatrix->ExtractMyRowView( 0, numCols, values );
values[0] = 6.0 ;
values[1] = 2.0 ;

!Line: 204 - warning: variable 'values' is not initialized [cppcoreguidelines-init-variables]

values[0] = 6.0 ;
values[1] = 2.0 ;
// Row 2 answers
goldMatrix->ExtractMyRowView( 1, numCols, values );
values[0] = 5.0 ;
values[1] = 0.0 ;

!Line: 208 - warning: 6.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

values[1] = 2.0 ;
// Row 2 answers
goldMatrix->ExtractMyRowView( 1, numCols, values );
values[0] = 5.0 ;
values[1] = 0.0 ;
// Row 3 structure

!Line: 209 - warning: 2.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

values[0] = 5.0 ;
values[1] = 0.0 ;
// Row 3 structure
goldMatrix->ExtractMyRowView( 2, numCols, values );
values[0] = -1.0 ;
values[1] = 7.0 ;

!Line: 212 - warning: 5.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

values[1] = 7.0 ;
goldMatrix->Scale(0.2);
status += tester.testCrsMatrices( broydenOp.getBroydenMatrix(), *goldMatrix, reltol, abstol,
"Broyden Sparse Operator Update Test" );

!Line: 217 - warning: 7.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

goldMatrix->Scale(0.2);
status += tester.testCrsMatrices( broydenOp.getBroydenMatrix(), *goldMatrix, reltol, abstol,
"Broyden Sparse Operator Update Test" );

!Line: 219 - warning: 0.2 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

tcrsgraph_t broydenWorkGraph2( Teuchos::Copy, broydenRowMap, 0 );
myGlobalIndices.resize(3);
// All Rowsstructure
myGlobalIndices[0] = globalIndices[0];

!Line: 226 - warning: variable 'broydenWorkGraph2' is not initialized [cppcoreguidelines-init-variables]

Teuchos::RCP<tcrsmatrix_t> broydenWorkMatrix2 = Teuchos::rcp( new tcrsmatrix_t( Teuchos::Copy, broydenWorkGraph2 ) );
// Create an identity matrix
broydenWorkVec.putScalar(1.0);
broydenWorkMatrix2->replaceDiagonalValues(broydenWorkVec);

!Line: 240 - warning: variable 'broydenWorkMatrix2' is not initialized [cppcoreguidelines-init-variables]

broydenWorkVec[2] = 2.0;
broydenOp2.setStepVector( broydenWorkVec );
broydenWorkVec[0] = 2.0;
broydenWorkVec[1] = 1.0;
broydenWorkVec[2] = 3.0;

!Line: 250 - warning: 2.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

broydenWorkVec[0] = 2.0;
broydenWorkVec[1] = 1.0;
broydenWorkVec[2] = 3.0;
broydenOp2.setYieldVector( broydenWorkVec );
broydenOp2.computeSparseBroydenUpdate();

!Line: 253 - warning: 2.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

broydenWorkVec[2] = 3.0;
broydenOp2.setYieldVector( broydenWorkVec );
broydenOp2.computeSparseBroydenUpdate();
// Create the gold matrix for comparison

!Line: 255 - warning: 3.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

Teuchos::RCP<tcrsmatrix_t> goldMatrix2 = Teuchos::rcp( new tcrsmatrix_t( Teuchos::Copy, broydenWorkGraph2 ) );
// Row 1 answers
goldMatrix2->ExtractMyRowView( 0, numCols, values );
values[0] = 7.0 ;
values[1] = -1.0 ;

!Line: 261 - warning: variable 'goldMatrix2' is not initialized [cppcoreguidelines-init-variables]

values[0] = 7.0 ;
values[1] = -1.0 ;
values[2] = 2.0 ;
// Row 2 answers
goldMatrix2->ExtractMyRowView( 1, numCols, values );
values[0] = 2.0 ;

!Line: 265 - warning: 7.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

values[2] = 2.0 ;
// Row 2 answers
goldMatrix2->ExtractMyRowView( 1, numCols, values );
values[0] = 2.0 ;
values[1] = 4.0 ;
values[2] = 4.0 ;

!Line: 267 - warning: 2.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

values[0] = 2.0 ;
values[1] = 4.0 ;
values[2] = 4.0 ;
// Row 3 structure
goldMatrix2->ExtractMyRowView( 2, numCols, values );
values[0] = 1.0 ;

!Line: 270 - warning: 2.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

values[1] = 4.0 ;
values[2] = 4.0 ;
// Row 3 structure
goldMatrix2->ExtractMyRowView( 2, numCols, values );
values[0] = 1.0 ;
values[1] = -1.0 ;

!Line: 271 - warning: 4.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

values[2] = 4.0 ;
// Row 3 structure
goldMatrix2->ExtractMyRowView( 2, numCols, values );
values[0] = 1.0 ;
values[1] = -1.0 ;
values[2] = 8.0 ;

!Line: 272 - warning: 4.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

values[2] = 8.0 ;
ST scaleF = 1.0 / 6.0;
goldMatrix2->Scale( scaleF );
status += tester.testCrsMatrices( broydenOp2.getBroydenMatrix(), *goldMatrix2, reltol, abstol,

!Line: 277 - warning: 8.0 is a magic number; consider replacing it with a named constant [cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers]

ST scaleF = 1.0 / 6.0;
goldMatrix2->Scale( scaleF );
status += tester.testCrsMatrices( broydenOp2.getBroydenMatrix(), *goldMatrix2, reltol, abstol,
"Broyden Sparse Operator Update Test (Dense)" );

!Line: 279 - warning: variable 'scaleF' is not initialized [cppcoreguidelines-init-variables]

tcrsgraph_t inactiveGraph( Teuchos::Copy, broydenRowMap, 0 );
// Row 1 structure
inactiveGraph.insertGlobalIndices( globalIndices[0], 1, myGlobalIndices[1] );
// Row 2 structure
inactiveGraph.insertGlobalIndices( globalIndices[1], 1, myGlobalIndices[2] );

!Line: 286 - warning: variable 'inactiveGraph' is not initialized [cppcoreguidelines-init-variables]

if(success)
printing->out() << "Test passed!" << std::endl;
else
printing->out() << "Test failed!" << std::endl;
}
TEUCHOS_STANDARD_CATCH_STATEMENTS(verbose, std::cerr, success);

!Line: 317 - warning: statement should be inside braces [google-readability-braces-around-statements,hicpp-braces-around-statements,readability-braces-around-statements]

else
printing->out() << "Test failed!" << std::endl;
}
TEUCHOS_STANDARD_CATCH_STATEMENTS(verbose, std::cerr, success);
return ( success ? EXIT_SUCCESS : EXIT_FAILURE );

!Line: 319 - warning: statement should be inside braces [google-readability-braces-around-statements,hicpp-braces-around-statements,readability-braces-around-statements]

TEUCHOS_STANDARD_CATCH_STATEMENTS(verbose, std::cerr, success);
return ( success ? EXIT_SUCCESS : EXIT_FAILURE );
} // run
int main(int argc, char *argv[]) {

!Line: 322 - warning: 'getRank' must resolve to a function declared within the '__llvm_libc' namespace [llvmlibc-callee-namespace]

TEUCHOS_STANDARD_CATCH_STATEMENTS(verbose, std::cerr, success);
return ( success ? EXIT_SUCCESS : EXIT_FAILURE );
} // run
int main(int argc, char *argv[]) {

!Line: 322 - warning: 'operator<<' must resolve to a function declared within the '__llvm_libc' namespace [llvmlibc-callee-namespace]

int main(int argc, char *argv[]) {
// templated to run on different ST
return run<double>(argc,argv);
// return run<float>(argc,argv);
}

!Line: 327 - warning: declaration must be declared within the '__llvm_libc' namespace [llvmlibc-implementation-in-namespace]

int main(int argc, char *argv[]) {
// templated to run on different ST
return run<double>(argc,argv);
// return run<float>(argc,argv);
}

!Line: 327 - warning: use a trailing return type for this function [modernize-use-trailing-return-type]


@rppawlo
Copy link
Collaborator

rppawlo commented Sep 20, 2023

That's correct. Let's drop this test for the tpetra porting work. There's no template for a similar capability at this point and I don't think anyone has used this operator in years.

@cwschilly
Copy link
Collaborator Author

cwschilly commented Sep 20, 2023

@stmcgovern This PR is mosty completed, but the absence of a Tpetra-fied BroydenOperator means it can't be fully converted. I'll leave it as is for now.

@cwschilly cwschilly added the wontfix This will not be worked on label Sep 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
EpetraMPI T2 pkg: NOX wontfix This will not be worked on
Projects
None yet
Development

Successfully merging this pull request may close these issues.

NOX: Provide Tpetra version of test_BroydenOp.C
2 participants