From 70b9bf19d02ef50186fd135a569ba1253ed55b10 Mon Sep 17 00:00:00 2001 From: rezgarshakeri <rezgar.shakeri@colorado.edu> Date: Fri, 16 Sep 2022 16:00:30 -0600 Subject: [PATCH] Added random vertices distribution --- examples/Hdiv-mixed/conv_plot.py | 13 ++++++ examples/Hdiv-mixed/conv_test.sh | 6 +-- examples/Hdiv-mixed/conv_test_result.csv | 14 ++---- examples/Hdiv-mixed/convrate_mixed.png | Bin 27852 -> 25017 bytes examples/Hdiv-mixed/include/setup-dm.h | 1 + examples/Hdiv-mixed/main.c | 11 +++-- examples/Hdiv-mixed/problems/darcy2d.c | 1 - examples/Hdiv-mixed/src/setup-dm.c | 56 +++++++++++++++++++++++ 8 files changed, 85 insertions(+), 17 deletions(-) diff --git a/examples/Hdiv-mixed/conv_plot.py b/examples/Hdiv-mixed/conv_plot.py index d6c7f6653b..d4bfcff84e 100644 --- a/examples/Hdiv-mixed/conv_plot.py +++ b/examples/Hdiv-mixed/conv_plot.py @@ -46,6 +46,7 @@ def plot(): E_p = data['error_p'] #E_hdiv = data['error_hdiv'] h = 1/data['mesh_res'] + N = data['mesh_res'] H1 = amin(E_p)* (h/amin(h)) # H = C h^1 H2 = amin(E_u)* (h/amin(h))**2 # H = C h^2 @@ -62,6 +63,18 @@ def plot(): #xlim(.06, .3) fig.tight_layout() plt.savefig('convrate_mixed.png', bbox_inches='tight') + + conv_u = [] + conv_p = [] + conv_u.append(0) + conv_p.append(0) + for i in range(1,len(E_u)): + conv_u.append(log10(E_u[i]/E_u[i-1])/log10(h[i]/h[i-1])) + conv_p.append(log10(E_p[i]/E_p[i-1])/log10(h[i]/h[i-1])) + + result = {'Number of element':N, 'order of u':conv_u, 'order of p':conv_p} + df = pd.DataFrame(result) + print(df) diff --git a/examples/Hdiv-mixed/conv_test.sh b/examples/Hdiv-mixed/conv_test.sh index 3acfecfc01..36c1d52723 100755 --- a/examples/Hdiv-mixed/conv_test.sh +++ b/examples/Hdiv-mixed/conv_test.sh @@ -42,13 +42,13 @@ declare -A run_flags run_flags[dm_plex_dim]=$dim run_flags[dm_plex_box_faces]=2,2,2 run_flags[dm_plex_box_lower]=0,0,0 - run_flags[dm_plex_box_upper]=1,0.1,1 + run_flags[dm_plex_box_upper]=1,0.2,1 fi declare -A test_flags - test_flags[res_start]=2 + test_flags[res_start]=4 test_flags[res_stride]=1 - test_flags[res_end]=10 + test_flags[res_end]=8 file_name=conv_test_result.csv diff --git a/examples/Hdiv-mixed/conv_test_result.csv b/examples/Hdiv-mixed/conv_test_result.csv index 3c3e88974f..50df6b824a 100644 --- a/examples/Hdiv-mixed/conv_test_result.csv +++ b/examples/Hdiv-mixed/conv_test_result.csv @@ -1,10 +1,6 @@ run,mesh_res,error_u,error_p -0,2,23.34221,0.01392 -1,3,14.88356,0.00793 -2,4,11.04429,0.00485 -3,5,8.90114,0.00337 -4,6,6.49004,0.00260 -5,7,4.87041,0.00207 -6,8,3.99474,0.00165 -7,9,3.24332,0.00136 -8,10,2.65430,0.00114 +0,4,9.10868,0.02425 +1,5,7.66382,0.02087 +2,6,5.80589,0.01738 +3,7,5.13953,0.01512 +4,8,4.74095,0.01357 diff --git a/examples/Hdiv-mixed/convrate_mixed.png b/examples/Hdiv-mixed/convrate_mixed.png index 6c468b7216eeaabc6a052f7ae63e2e786435cb83..3dab09a9524d276b3bb2a0043773ec76d0d79dda 100644 GIT binary patch literal 25017 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 literal 27852 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 CL^Oo} diff --git a/examples/Hdiv-mixed/include/setup-dm.h b/examples/Hdiv-mixed/include/setup-dm.h index 610d74efd0..40029bc7c4 100644 --- a/examples/Hdiv-mixed/include/setup-dm.h +++ b/examples/Hdiv-mixed/include/setup-dm.h @@ -12,5 +12,6 @@ // --------------------------------------------------------------------------- PetscErrorCode CreateDM(MPI_Comm comm, VecType vec_type, DM *dm); PetscErrorCode PerturbVerticesSmooth(DM dm); +PetscErrorCode PerturbVerticesRandom(DM dm); #endif // setupdm_h diff --git a/examples/Hdiv-mixed/main.c b/examples/Hdiv-mixed/main.c index abd2739824..2a303d2ae0 100644 --- a/examples/Hdiv-mixed/main.c +++ b/examples/Hdiv-mixed/main.c @@ -30,6 +30,7 @@ // (boundary is not working) // ./main -pc_type svd -problem darcy2d -dm_plex_dim 2 -dm_plex_box_faces 4,4 -bc_pressure 1 // ./main -pc_type svd -problem darcy2d -dm_plex_dim 2 -dm_plex_box_faces 4,4 -bc_pressure 1,2,3,4 +// ./main -pc_type svd -problem darcy3d -dm_plex_dim 3 -dm_plex_box_faces 4,4,4 -view_solution -dm_plex_box_lower 0,0,0 -dm_plex_box_upper 1,0.1,1 const char help[] = "Solve H(div)-mixed problem using PETSc and libCEED\n"; #include "main.h" @@ -83,8 +84,8 @@ int main(int argc, char **argv) { // --------------------------------------------------------------------------- // -- Initialize backend Ceed ceed; - //CeedInit("/cpu/self/ref/serial", &ceed); - CeedInit(app_ctx->ceed_resource, &ceed); + CeedInit("/cpu/self/ref/serial", &ceed); + //CeedInit(app_ctx->ceed_resource, &ceed); CeedMemType mem_type_backend; CeedGetPreferredMemType(ceed, &mem_type_backend); @@ -118,9 +119,11 @@ int main(int argc, char **argv) { PetscCall( CreateDM(comm, vec_type, &dm_H1) ); // TODO: add mesh option // perturb to have smooth random mesh - PetscCall( PerturbVerticesSmooth(dm) ); - PetscCall( PerturbVerticesSmooth(dm_H1) ); + //PetscCall( PerturbVerticesSmooth(dm) ); + //PetscCall( PerturbVerticesSmooth(dm_H1) ); + PetscCall(PerturbVerticesRandom(dm) ); + PetscCall(PerturbVerticesRandom(dm_H1) ); // --------------------------------------------------------------------------- // Process command line options // --------------------------------------------------------------------------- diff --git a/examples/Hdiv-mixed/problems/darcy2d.c b/examples/Hdiv-mixed/problems/darcy2d.c index 77dc8d2a74..16d61dbb62 100644 --- a/examples/Hdiv-mixed/problems/darcy2d.c +++ b/examples/Hdiv-mixed/problems/darcy2d.c @@ -91,7 +91,6 @@ PetscErrorCode Hdiv_DARCY2D(Ceed ceed, ProblemData problem_data, DM dm, PetscCall( DMGetBoundingBox(dm, domain_min, domain_max) ); for (PetscInt i=0; i<2; i++) domain_size[i] = domain_max[i] - domain_min[i]; - printf("lx %f, ly %f \n",domain_size[0], domain_size[1]); darcy_ctx->kappa = kappa; darcy_ctx->rho_a0 = rho_a0; darcy_ctx->g = g; diff --git a/examples/Hdiv-mixed/src/setup-dm.c b/examples/Hdiv-mixed/src/setup-dm.c index c5304a17cb..eacb6c7789 100644 --- a/examples/Hdiv-mixed/src/setup-dm.c +++ b/examples/Hdiv-mixed/src/setup-dm.c @@ -68,3 +68,59 @@ PetscErrorCode PerturbVerticesSmooth(DM dm) { PetscCall( VecRestoreArray(coordinates,&coords) ); PetscFunctionReturn(0); } + + +PetscErrorCode PerturbVerticesRandom(DM dm) { + + PetscFunctionBegin; + Vec coordinates; + PetscSection coordSection; + PetscScalar *coords; + PetscInt v,vStart,vEnd,offset, dim; + PetscReal x, y, z; + + PetscCall( DMGetDimension(dm,&dim) ); + PetscCall( DMGetCoordinateSection(dm, &coordSection) ); + PetscCall( DMGetCoordinatesLocal(dm, &coordinates) ); + PetscCall( DMPlexGetDepthStratum(dm, 0, &vStart, &vEnd) ); + PetscCall( VecGetArray(coordinates,&coords) ); + PetscInt c_end, c_start, num_elem; + PetscCall( DMPlexGetHeightStratum(dm, 0, &c_start, &c_end) ); + num_elem = c_end - c_start; + + for(v=vStart; v<vEnd; v++) { + PetscCall( PetscSectionGetOffset(coordSection,v,&offset) ); + if(dim==2) { + PetscScalar nx = sqrt(num_elem); + PetscReal domain_min[2], domain_max[2], domain_size[2]; + PetscCall( DMGetBoundingBox(dm, domain_min, domain_max) ); + for (PetscInt i=0; i<2; i++) domain_size[i] = domain_max[i] - domain_min[i]; + PetscReal hx = domain_size[0]/nx, hy = domain_size[1]/nx; + x = coords[offset]; y = coords[offset+1]; + // perturb randomly O(h*sqrt(2)/3) + PetscReal rx = ((PetscReal)rand())/((PetscReal)RAND_MAX)*(hx*0.471404); + PetscReal ry = ((PetscReal)rand())/((PetscReal)RAND_MAX)*(hy*0.471404); + PetscReal t = ((PetscReal)rand())/((PetscReal)RAND_MAX)*PETSC_PI; + coords[offset ] = x + rx*PetscCosReal(t); + coords[offset+1] = y + ry*PetscSinReal(t); + } else { + PetscScalar nx = cbrt(num_elem); + PetscReal domain_min[3], domain_max[3], domain_size[3]; + PetscCall( DMGetBoundingBox(dm, domain_min, domain_max) ); + for (PetscInt i=0; i<3; i++) domain_size[i] = domain_max[i] - domain_min[i]; + PetscReal hx = domain_size[0]/nx, hy = domain_size[1]/nx, + hz = domain_size[2]/nx; + x = coords[offset]; y = coords[offset+1], z = coords[offset+2]; + // This is because 'boundary' is broken in 3D + PetscReal rx = ((PetscReal)rand())/((PetscReal)RAND_MAX)*(hx*0.471404); + PetscReal ry = ((PetscReal)rand())/((PetscReal)RAND_MAX)*(hy*0.471404); + PetscReal rz = ((PetscReal)rand())/((PetscReal)RAND_MAX)*(hz*0.471404); + PetscReal t = ((PetscReal)rand())/((PetscReal)RAND_MAX)*PETSC_PI; + coords[offset ] = x + rx*PetscCosReal(t); + coords[offset+1] = y + ry*PetscCosReal(t); + coords[offset+2] = z + rz*PetscSinReal(t); + } + } + PetscCall( VecRestoreArray(coordinates,&coords) ); + PetscFunctionReturn(0); +}