5 #include "Epetra_ConfigDefs.h"     8 #include "Epetra_MpiComm.h"    10 #include "Epetra_SerialComm.h"    13 #include "Teuchos_CommandLineProcessor.hpp"    14 #include "Teuchos_StandardCatchMacros.hpp"    15 #include "Teuchos_ParameterList.hpp"    16 #include "Teuchos_XMLParameterListCoreHelpers.hpp"    20 int main(
int argc, 
char *argv[]){
    22     std::string    xmlInFileName = 
"";
    24     Teuchos::CommandLineProcessor  clp(
false);
    25     clp.setOption(
"xml-in-file",&xmlInFileName,
"The XML file to read into a parameter list");
    26     clp.setDocString(
"TO DO.");
    28     Teuchos::CommandLineProcessor::EParseCommandLineReturn
    29     parse_return = clp.parse(argc,argv);
    30     if( parse_return != Teuchos::CommandLineProcessor::PARSE_SUCCESSFUL ) {
    31         std::cout << 
"\nEnd Result: TEST FAILED" << std::endl;
    36     MPI_Init(&argc, &argv);
    37     Epetra_MpiComm Comm(MPI_COMM_WORLD);
    39     Epetra_SerialComm Comm;
    42     Teuchos::RCP<Teuchos::ParameterList> paramList = Teuchos::rcp(
new Teuchos::ParameterList);
    43     if(xmlInFileName.length()) {
    44         Teuchos::updateParametersFromXmlFile(xmlInFileName, inoutArg(*paramList));
    48         paramList->print(std::cout,2,
true,
true);
    51     Teuchos::RCP<tiMooneyRandomField> 
interface  = Teuchos::rcp(new tiMooneyRandomField(Comm,*paramList));
    53     Epetra_SerialDenseVector mean_parameters(5);
    54     mean_parameters(0) = Teuchos::getParameter<double>(paramList->sublist(
"TIMooney"),
"mu1");
    55     mean_parameters(1) = Teuchos::getParameter<double>(paramList->sublist(
"TIMooney"),
"mu2");
    56     mean_parameters(2) = Teuchos::getParameter<double>(paramList->sublist(
"TIMooney"),
"mu3");
    57     mean_parameters(3) = Teuchos::getParameter<double>(paramList->sublist(
"TIMooney"),
"mu4");
    58     mean_parameters(4) = Teuchos::getParameter<double>(paramList->sublist(
"TIMooney"),
"mu5");
    60     Epetra_SerialDenseVector exponents(2);
    61     exponents(0) = Teuchos::getParameter<double>(paramList->sublist(
"TIMooney"),
"beta4");
    62     exponents(1) = Teuchos::getParameter<double>(paramList->sublist(
"TIMooney"),
"beta5");
    64     Epetra_SerialDenseVector correlation_lengths(2);
    65     correlation_lengths(0) = Teuchos::getParameter<double>(paramList->sublist(
"Shinozuka"),
"lx");
    66     correlation_lengths(1) = Teuchos::getParameter<double>(paramList->sublist(
"Shinozuka"),
"ly");
    68     Epetra_SerialDenseVector coeff_of_variation(4);
    69     coeff_of_variation(0) = Teuchos::getParameter<double>(paramList->sublist(
"Shinozuka"),
"delta1");
    70     coeff_of_variation(1) = Teuchos::getParameter<double>(paramList->sublist(
"Shinozuka"),
"delta2");
    71     coeff_of_variation(2) = Teuchos::getParameter<double>(paramList->sublist(
"Shinozuka"),
"delta3");
    72     coeff_of_variation(3) = Teuchos::getParameter<double>(paramList->sublist(
"Shinozuka"),
"delta4");
    74     Epetra_SerialDenseVector plyagls(4);
    80     Epetra_SerialDenseVector omega(6);
    81     omega(0) = coeff_of_variation(0);
    82     omega(1) = coeff_of_variation(1);
    83     omega(2) = coeff_of_variation(2);
    84     omega(3) = coeff_of_variation(3);
    85     omega(4) = correlation_lengths(0);
    86     omega(5) = correlation_lengths(1);
    88     double plyagl = plyagls(0)*2.0*M_PI/360.0;
    89     interface->setParameters(mean_parameters,exponents,omega);
    90     interface->set_plyagl(plyagl);
    92     Epetra_IntSerialDenseVector seeds(5);
    93     seeds(0) = 5*(11+0*100)+0;
    94     seeds(1) = 5*(11+0*100)+1;
    95     seeds(2) = 5*(11+0*100)+2;
    96     seeds(3) = 5*(11+0*100)+3;
    97     seeds(4) = 5*(11+0*100)+4;
    98     interface->RandomFieldGenerator(seeds);
   101     int n_local_cells = interface->Mesh->n_local_cells;
   102     int n_gauss_cells = interface->Mesh->n_gauss_cells;
   103     std::vector<int> local_gauss_points(n_local_cells*n_gauss_cells);
   104     for (
unsigned int e_lid=0; e_lid<n_local_cells; ++e_lid){
   105         e_gid = interface->Mesh->local_cells[e_lid];
   106         for (
unsigned int gp=0; gp<n_gauss_cells; ++gp){
   107             local_gauss_points[e_lid*n_gauss_cells+gp] = e_gid*n_gauss_cells+gp;
   111     Epetra_Map GaussMap(-1,n_local_cells*n_gauss_cells,&local_gauss_points[0],0,Comm);
   113     Epetra_Vector mu1_gmrf(GaussMap);
   114     Epetra_Vector mu2_gmrf(GaussMap);
   115     Epetra_Vector mu3_gmrf(GaussMap);
   116     Epetra_Vector mu4_gmrf(GaussMap);
   117     Epetra_Vector mu5_gmrf(GaussMap);
   118     Epetra_Vector x_coord(GaussMap);
   119     Epetra_Vector y_coord(GaussMap);
   120     Epetra_Vector z_coord(GaussMap);
   123     double xi, 
eta, zeta;
   124     Epetra_SerialDenseMatrix matrix_X(3,interface->Mesh->el_type);
   125     Epetra_SerialDenseVector vector_X(3);
   126     Epetra_SerialDenseVector N(interface->Mesh->el_type);
   128     for (
unsigned int e_lid=0; e_lid<n_local_cells; ++e_lid){
   129         e_gid = interface->Mesh->local_cells[e_lid];
   130         for (
int inode=0; inode<interface->Mesh->el_type; ++inode){
   131             node = interface->Mesh->cells_nodes[interface->Mesh->el_type*e_gid+inode];
   132             matrix_X(0,inode) = interface->Mesh->nodes_coord[3*node+0];
   133             matrix_X(1,inode) = interface->Mesh->nodes_coord[3*node+1];
   134             matrix_X(2,inode) = interface->Mesh->nodes_coord[3*node+2];
   136         for (
unsigned int gp=0; gp<n_gauss_cells; ++gp){
   137             xi   = interface->Mesh->xi_cells[gp];
   138             eta  = interface->Mesh->eta_cells[gp];
   139             zeta = interface->Mesh->zeta_cells[gp];
   142             vector_X.Multiply(
'N',
'N',1.0,matrix_X,N,0.0);
   143             interface->get_material_parameters(e_lid,gp);
   145             mu1_gmrf[GaussMap.LID(
int(e_gid*n_gauss_cells+gp))] = interface->mu1;
   146             mu2_gmrf[GaussMap.LID(
int(e_gid*n_gauss_cells+gp))] = interface->mu2;
   147             mu3_gmrf[GaussMap.LID(
int(e_gid*n_gauss_cells+gp))] = interface->mu3;
   148             mu4_gmrf[GaussMap.LID(
int(e_gid*n_gauss_cells+gp))] = interface->mu4;
   149             mu5_gmrf[GaussMap.LID(
int(e_gid*n_gauss_cells+gp))] = interface->mu5;
   151             x_coord[GaussMap.LID(
int(e_gid*n_gauss_cells+gp))] = vector_X(0);
   152             y_coord[GaussMap.LID(
int(e_gid*n_gauss_cells+gp))] = vector_X(1);
   153             z_coord[GaussMap.LID(
int(e_gid*n_gauss_cells+gp))] = vector_X(2);
   158     int NumTargetElements = 0;
   159     if (Comm.MyPID()==0){
   160         NumTargetElements = interface->Mesh->n_cells*n_gauss_cells;
   162     Epetra_Map MapOnRoot(-1,NumTargetElements,0,Comm);
   163     Epetra_Export ExportOnRoot(GaussMap,MapOnRoot);
   164     Epetra_MultiVector lhs_root(MapOnRoot,
true);
   166     lhs_root.Export(mu1_gmrf,ExportOnRoot,Insert);
   167     std::string 
filename = 
"/home/s/staber/Trilinos_results/nrl/randomfields/mu1_gmrf.mtx";
   168     error = EpetraExt::MultiVectorToMatrixMarketFile(filename.c_str(),lhs_root,0,0,
false);
   170     lhs_root.PutScalar(0.0);
   171     lhs_root.Export(mu2_gmrf,ExportOnRoot,Insert);
   172     filename = 
"/home/s/staber/Trilinos_results/nrl/randomfields/mu2_gmrf.mtx";
   173     error = EpetraExt::MultiVectorToMatrixMarketFile(filename.c_str(),lhs_root,0,0,
false);
   175     lhs_root.PutScalar(0.0);
   176     lhs_root.Export(mu3_gmrf,ExportOnRoot,Insert);
   177     filename = 
"/home/s/staber/Trilinos_results/nrl/randomfields/mu3_gmrf.mtx";
   178     error = EpetraExt::MultiVectorToMatrixMarketFile(filename.c_str(),lhs_root,0,0,
false);
   180     lhs_root.PutScalar(0.0);
   181     lhs_root.Export(mu4_gmrf,ExportOnRoot,Insert);
   182     filename = 
"/home/s/staber/Trilinos_results/nrl/randomfields/mu4_gmrf.mtx";
   183     error = EpetraExt::MultiVectorToMatrixMarketFile(filename.c_str(),lhs_root,0,0,
false);
   185     lhs_root.PutScalar(0.0);
   186     lhs_root.Export(mu5_gmrf,ExportOnRoot,Insert);
   187     filename = 
"/home/s/staber/Trilinos_results/nrl/randomfields/mu5_gmrf.mtx";
   188     error = EpetraExt::MultiVectorToMatrixMarketFile(filename.c_str(),lhs_root,0,0,
false);
   190     lhs_root.PutScalar(0.0);
   191     lhs_root.Export(x_coord,ExportOnRoot,Insert);
   192     filename = 
"/home/s/staber/Trilinos_results/nrl/randomfields/x_coord.mtx";
   193     error = EpetraExt::MultiVectorToMatrixMarketFile(filename.c_str(),lhs_root,0,0,
false);
   195     lhs_root.PutScalar(0.0);
   196     lhs_root.Export(y_coord,ExportOnRoot,Insert);
   197     filename = 
"/home/s/staber/Trilinos_results/nrl/randomfields/y_coord.mtx";
   198     error = EpetraExt::MultiVectorToMatrixMarketFile(filename.c_str(),lhs_root,0,0,
false);
   200     lhs_root.PutScalar(0.0);
   201     lhs_root.Export(z_coord,ExportOnRoot,Insert);
   202     filename = 
"/home/s/staber/Trilinos_results/nrl/randomfields/z_coord.mtx";
   203     error = EpetraExt::MultiVectorToMatrixMarketFile(filename.c_str(),lhs_root,0,0,
false);
 void shape_functions(Epetra_SerialDenseVector &N, double &xi, double &eta, double &zeta)
 
int main(int argc, char *argv[])