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[])