- Thank you received: 108
translate python grad(u).trans code to C++
3 years 1 month ago #4024
by joachim
Replied by joachim on topic translate python grad(u).trans code to C++
can you do a
and send the output ?
If this does not help, you may send the complete example.
Code:
auto func = material.mu * InnerProduct(
0.5f*(u->Deriv() + TransposeCF(u->Deriv())),
0.5f*(v->Deriv() + TransposeCF(v->Deriv())));
cout << *func << endl;
and send the output ?
If this does not help, you may send the complete example.
3 years 1 month ago - 3 years 1 month ago #4025
by Kai
Replied by Kai on topic translate python grad(u).trans code to C++
This lines give me the output :
Hope this say's somthing to you ...
EDIT :
the python line
gives me :
so this seems to be very similar ... but in python there is DifferentialSymbol dx doted with the result of the InnerProdukt ... the dx seems to be defined as DifferentialSymbol(VOL) ... should i dot with this in C++ ?
I can not find where it is defined ...
Code:
2.59398e+07*(coef innerproduct, fix size = 9, real
coef scale 0.5, real, dims = 3 x 3
coef binary operation '+', real, dims = 3 x 3
coef trial-function diffop = grad, real, dims = 3 x 3
coef Matrix transpose, real, dims = 3 x 3
coef trial-function diffop = grad, real, dims = 3 x 3
coef scale 0.5, real, dims = 3 x 3
coef binary operation '+', real, dims = 3 x 3
coef test-function diffop = grad, real, dims = 3 x 3
coef Matrix transpose, real, dims = 3 x 3
coef test-function diffop = grad, real, dims = 3 x 3
)
Hope this say's somthing to you ...
EDIT :
the python line
Code:
print(InnerProduct(1 / 2 * (grad(self.u) + grad(self.u).trans), 1 / 2 * (grad(self.v) + grad(self.v).trans)))
gives me :
Code:
coef innerproduct, fix size = 9, real
coef scale 0.5, real, dims = 3 x 3
coef binary operation '+', real, dims = 3 x 3
coef trial-function diffop = grad, real, dims = 3 x 3
coef Matrix transpose, real, dims = 3 x 3
coef trial-function diffop = grad, real, dims = 3 x 3
coef scale 0.5, real, dims = 3 x 3
coef binary operation '+', real, dims = 3 x 3
coef test-function diffop = grad, real, dims = 3 x 3
coef Matrix transpose, real, dims = 3 x 3
coef test-function diffop = grad, real, dims = 3 x 3
so this seems to be very similar ... but in python there is DifferentialSymbol dx doted with the result of the InnerProdukt ... the dx seems to be defined as DifferentialSymbol(VOL) ... should i dot with this in C++ ?
I can not find where it is defined ...
Last edit: 3 years 1 month ago by Kai.
3 years 1 month ago #4043
by joachim
Replied by joachim on topic translate python grad(u).trans code to C++
I can't see anything strange in the output, pls send me the complete example and I will have a look.
3 years 1 month ago - 3 years 1 month ago #4046
by Kai
Replied by Kai on topic translate python grad(u).trans code to C++
I have managed to implement the C++ code such that i now get same results on stdout with C++ and Python, but only for free boundary conditions. In Python i set dirichlet boundary conditions with
the integer list "dirichlet" i got with clicking on mesh faces in netgen ui. In C++ i do
But the results are the same as if i do computation without setting boundary conditions.
So is there some thing special to call in C++ to apply boundary conditions ?
Code:
dirichlet = [4, 27, 9, 21, 28, 1, 33, 205, 277, 192, 3, 5, 18, 328]
fes = VectorH1(mesh, order=2, dirichlet=dirichlet, complex=True)
Code:
Flags flags_fes;
flags_fes.SetFlag("order", 2);
flags_fes.SetFlag("complex", true);
flags_fes.SetFlag("dirichlet", "4, 27, 9, 21, 28, 1, 33, 205, 277, 192, 3, 5, 18, 328");
auto fes = make_shared<VectorH1FESpace>(ma, flags_fes);
BitArray dirichlet({4, 27, 9, 21, 28, 1, 33, 205, 277, 192, 3, 5, 18, 328});
fes->SetDirichletBoundaries(dirichlet);
fes->Update();
fes->FinalizeUpdate();
fes->UpdateDofTables();
fes->PrintReport(std::cout);
So is there some thing special to call in C++ to apply boundary conditions ?
Last edit: 3 years 1 month ago by Kai.
3 years 1 month ago #4047
by Kai
Replied by Kai on topic translate python grad(u).trans code to C++
Fixed !
Code:
Flags flags_fes;
flags_fes.SetFlag("order", 2);
flags_fes.SetFlag("complex", true);
//dirichlet(4, 27, 9, 21, 28, 1, 33, 205, 277, 192, 3, 5, 18, 328, 188, 154, 126);
Array<double> dirbnd = {4, 27, 9, 21, 28, 1, 33, 205, 277, 192, 3, 5, 18, 328, 188, 154, 126};
flags_fes.SetFlag("dirichlet", dirbnd);
auto fes = make_shared<VectorH1FESpace>(ma, flags_fes);
Time to create page: 0.106 seconds