diff --git a/Energy.py b/Energy.py index a645ef42bb0639043bb6ac83b2253ad86360a0c6..f0502d8cec80554eb0e0717feeafb13945992c2d 100644 --- a/Energy.py +++ b/Energy.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/Energy_Regularization.py b/Energy_Regularization.py index 651d89d813210528acfebed45ec15370954f6b26..1596d14bba92707c0faa4cca6839ff4c6295b62d 100644 --- a/Energy_Regularization.py +++ b/Energy_Regularization.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/Energy_WarpedImage.py b/Energy_WarpedImage.py index 454865a43e676fe073247e1a9de1c554daeead63..94113039c4a2d02de32a012b73895701e88df701 100644 --- a/Energy_WarpedImage.py +++ b/Energy_WarpedImage.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/ImageIterator.py b/ImageIterator.py index e650c94a79d970e8f14af73361e1ed66a9e0ff24..ae45597f9583554fd2805b8aff645da4f233010a 100644 --- a/ImageIterator.py +++ b/ImageIterator.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/ImageSeries.py b/ImageSeries.py index 89eea3b992c6fd2b86b054d77f3fe6051043f2ef..c3c219f2d6ea2720acbdbccc64258493c04e50a7 100644 --- a/ImageSeries.py +++ b/ImageSeries.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/NonlinearSolver.py b/NonlinearSolver.py index 86fc7d62c1b758a2e402db7034be537e47fe665c..a07175117b3af7c9f4b8df37bd41f4f19ba7bc06 100644 --- a/NonlinearSolver.py +++ b/NonlinearSolver.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/Problem.py b/Problem.py index cdbba9bc1076127ebeb4b5fd8467c4274c38d03a..a4028765883fc4571e4de301aaf64dd3830ac8bb 100644 --- a/Problem.py +++ b/Problem.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/Problem_ImageRegistration.py b/Problem_ImageRegistration.py index 36fe4712a5c2cdd4f1c682a36f3b6e46814829d3..40e31e5da8f8dc31a45287d5ca598bc95fd39c87 100644 --- a/Problem_ImageRegistration.py +++ b/Problem_ImageRegistration.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/compute_displacement_error.py b/compute_displacement_error.py index 8e7b6acef8b31dd91f13539e33ee576436b1f34d..74afebb4d0aececa71b7e612315fc99fb533ea2b 100644 --- a/compute_displacement_error.py +++ b/compute_displacement_error.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/compute_displacements.py b/compute_displacements.py index 17332be5a0a4d7f1a45f20ffac4f3aa3705687cc..8b539df001f97dbcfcf6d08b6fdcac08998d24d1 100644 --- a/compute_displacements.py +++ b/compute_displacements.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/compute_quadrature_degree.py b/compute_quadrature_degree.py index 78755d55ebbca9ecfc145024a437b94374b02cc4..e507fc5e5b3e9dd93471ec1c476ebf4da6564c94 100644 --- a/compute_quadrature_degree.py +++ b/compute_quadrature_degree.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/compute_strains.py b/compute_strains.py index a6c2a27749a7dcffec21da78f3a21d63e1a97f92..a1f37c4c2e7d3290662e14e7378cc12414c41c98 100644 --- a/compute_strains.py +++ b/compute_strains.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/fedic.py b/fedic.py index ee505f8193732d74952ae7c3d9f1207472a357af..d7bfac8586cb43c885905babdc8a649bbbb0c1bf 100644 --- a/fedic.py +++ b/fedic.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/fedic2.py b/fedic2.py index af560c58da46f45725ea79cafa251276ba141983..cd2e049990f8040a8bf3230f0cb8b033f5da8b6d 100644 --- a/fedic2.py +++ b/fedic2.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/generate_images.py b/generate_images.py index 163cc8db67e6600344dad211b3318eedf7739123..ffcf5017505b02462e51095b3336ea617e00016c 100644 --- a/generate_images.py +++ b/generate_images.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/generate_undersampled_images.py b/generate_undersampled_images.py index 7deda2065669f79fd0344e841c06dfa30800d3c5..bcd23330727d1434c3800bd410a834aa49fa30b8 100644 --- a/generate_undersampled_images.py +++ b/generate_undersampled_images.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/generated_grad_expressions_cpp.py b/generated_grad_expressions_cpp.py new file mode 100644 index 0000000000000000000000000000000000000000..fc64124bbb8141e2c149c1d2feb565aa8c94a9f0 --- /dev/null +++ b/generated_grad_expressions_cpp.py @@ -0,0 +1,176 @@ +#coding=utf8 + +################################################################################ +### ### +### Created by Martin Genet, 2016-2019 ### +### ### +### École Polytechnique, Palaiseau, France ### +### ### +################################################################################ + +################################################################################ + +def get_ExprGenGrad_cpp( + im_dim, + im_type="grad", + im_is_def=0, + disp_type="fenics", # "vtk" + verbose=0): + + assert (im_dim in (2,3)) + assert (im_type in ("grad")) + + ExprGenGrad_cpp = '''\ +#include <string.h> + +#include <vtkSmartPointer.h> +#include <vtkStructuredPointsReader.h> +#include <vtkXMLImageDataReader.h> +#include <vtkImageData.h> +#include <vtkImageGradient.h> +#include <vtkImageInterpolator.h> + +double getStaticScalingFactor(const char* scalar_type_as_string) +{ + if (strcmp(scalar_type_as_string, "unsigned char" ) == 0) return pow(2, 8)-1; + if (strcmp(scalar_type_as_string, "unsigned short") == 0) return pow(2, 16)-1; + if (strcmp(scalar_type_as_string, "unsigned int" ) == 0) return pow(2, 32)-1; + if (strcmp(scalar_type_as_string, "unsigned long" ) == 0) return pow(2, 64)-1; + if (strcmp(scalar_type_as_string, "float" ) == 0) return 1.; + if (strcmp(scalar_type_as_string, "double" ) == 0) return 1.; + assert (0); +} + +namespace dolfin +{ + +class MyExpr : public Expression +{ + vtkSmartPointer<vtkImageData> image; + vtkSmartPointer<vtkImageGradient> gradient; + vtkSmartPointer<vtkImageInterpolator> interpolator; + double static_scaling; + std::shared_ptr<dolfin::Mesh> mesh; + std::shared_ptr<dolfin::Function> U; + mutable Array<double> UX; + mutable Array<double> x; + +public: + + MyExpr(): + Expression('''+str(im_dim)*(im_type in ("grad"))+'''), + UX('''+str(im_dim)+'''), + x(3), + interpolator(vtkSmartPointer<vtkImageInterpolator>::New()) + + { + } + + void init_mesh( + const std::shared_ptr<dolfin::Mesh> mesh_) + { + mesh = mesh_; + + std::cout << mesh->num_vertices() << std::endl; + std::cout << mesh->num_cells() << std::endl; + } + + void init_disp( + const std::shared_ptr<dolfin::Function> U_) + { + U = U_; + } + + void init_image() + { + image = vtkSmartPointer<vtkImageData>::New(); // MG20180913: another way to instantiate object + gradient = vtkSmartPointer<vtkImageGradient>::New(); + } + + + + void eval(Array<double>& expr, const Array<double>& X) const + {'''+(''' + + std::cout << "X = " << X.str(1) << std::endl;''')*(verbose)+''' + + U->eval(UX, X);'''+(''' + std::cout << "UX = " << UX.str(1) << std::endl;''')*(verbose)+(''' + x[0] = X[0] + UX[0]; + x[1] = X[1] + UX[1];''')*(im_dim==2)+(''' + x[0] = X[0] + UX[0]; + x[1] = X[1] + UX[1]; + x[2] = X[2] + UX[2];''')*(im_dim==3)+(''' + std::cout << "x = " << x.str(1) << std::endl;''')*(verbose)+''' + + interpolator->Interpolate(x.data(), expr.data());'''+(''' + std::cout << "expr = " << expr.str(1) << std::endl;''')*(verbose)+(''' + + expr[0] /= static_scaling;''')*(im_type=="im")+(''' + + expr[0] /= static_scaling; + expr[1] /= static_scaling;''')*(im_type=="grad")*(im_dim==2)+(''' + + expr[0] /= static_scaling; + expr[1] /= static_scaling; + expr[2] /= static_scaling;''')*(im_type=="grad")*(im_dim==3)+(''' + std::cout << "expr = " << expr.str(1) << std::endl;''')*(verbose)+''' + } + + + void prepareImage( int n1, int n2, int n3, float origin1, float origin2, float origin3, float spac1, float spac2, float spac3) + { + image->SetDimensions(n1,n2,n3); + image->AllocateScalars(VTK_FLOAT,1); + + image->SetSpacing(spac1, spac2, spac3); + image->SetOrigin(origin1, origin2, origin3); + + static_scaling = getStaticScalingFactor("double"); + } + + + void assignValues( int i, int j, int k, float value) + { + image->SetScalarComponentFromFloat(i,j,k,0,value); + } + + void setGradient_Interpol() + { + interpolator->SetInterpolationModeToLinear(); + interpolator->SetOutValue(.0); + + gradient->SetInputData(image); + gradient->SetDimensionality('''+str(im_dim)+'''); + gradient->Update(); + interpolator->Initialize(gradient->GetOutput()); + + interpolator->Update(); + } + + + void prepareImage_2D( int n1, int n2, float origin1, float origin2, float spac1, float spac2) + { + const double &Z=0.; + image->SetExtent(0, n1-1, 0, n2-1, 0, 0); + + image->AllocateScalars(VTK_FLOAT,1); + + image->SetSpacing(spac1, spac2, 1); + image->SetOrigin(origin1, origin2, 0); + + static_scaling = getStaticScalingFactor("double"); + x[2] = Z; + + } + + + void assignValues_2D( int i, int j, float value) + { + image->SetScalarComponentFromFloat(i,j,0,0,value); + } +}; + +}''' + #print ExprIm_cpp + return ExprGenGrad_cpp diff --git a/generated_image_expressions_cpp.py b/generated_image_expressions_cpp.py index 548e3265a8f3ad2429758168613aa11dec7deea7..7a62201923049f3d97cbf369e05ed4c328ffdb37 100644 --- a/generated_image_expressions_cpp.py +++ b/generated_image_expressions_cpp.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/image_expressions_cpp.py b/image_expressions_cpp.py index a360e3283bb9ec7dd0d718145e2cf1df0cad5857..541e41d8ae2f766a5bd96100abd4e9976ce70200 100644 --- a/image_expressions_cpp.py +++ b/image_expressions_cpp.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/image_expressions_py.py b/image_expressions_py.py index 7e7585bc81d09ab4128da02d85643cfc37fee449..dabb8f138c3cc5a6ba4b0f1cd839cfaa54c4d89b 100644 --- a/image_expressions_py.py +++ b/image_expressions_py.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/plot_binned_strains_vs_radius.py b/plot_binned_strains_vs_radius.py index 25bfc6fce9bc2c39451dd575ef8f0e7315fc5edd..8d0033e959bb4783d2e2e2216af647a8e770917b 100644 --- a/plot_binned_strains_vs_radius.py +++ b/plot_binned_strains_vs_radius.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/plot_displacement_error.py b/plot_displacement_error.py index 727e80dc5f294f19f764cf04604f0af4a9d4d017..57a575678a2f47592b05baed7e082325e8bed488 100644 --- a/plot_displacement_error.py +++ b/plot_displacement_error.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/plot_regional_strains.py b/plot_regional_strains.py index 4237804bb5dc51375a0de51e06b3db3b86824d54..ab3472bfeb05f4dc27ad81d0e58c0075dffa9368 100644 --- a/plot_regional_strains.py +++ b/plot_regional_strains.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/plot_strains.py b/plot_strains.py index 90872397ca9841c7a74ca58e27bd9f777001b90c..ffa967bed80b6d20056eaa742c987f587529a6df 100644 --- a/plot_strains.py +++ b/plot_strains.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/plot_strains_vs_radius.py b/plot_strains_vs_radius.py index 73b4e8d8f6d3fc07d5ca45a1ad24d510546b5f6d..8294398de7e47abaf53d647c77817fa6cf015cc6 100644 --- a/plot_strains_vs_radius.py +++ b/plot_strains_vs_radius.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ### diff --git a/write_VTU_file.py b/write_VTU_file.py index 9a71f67414a5b5c34e6861c7171a0fc721998709..512d1b46e966665464213e2d098a789eb5e30c1e 100644 --- a/write_VTU_file.py +++ b/write_VTU_file.py @@ -2,7 +2,7 @@ ################################################################################ ### ### -### Created by Martin Genet, 2016-2018 ### +### Created by Martin Genet, 2016-2019 ### ### ### ### École Polytechnique, Palaiseau, France ### ### ###