Actual source code: ex1.c
1: static char help[] = "Landau collision operator driver\n\n";
3: #include <petscts.h>
4: #include <petsclandau.h>
6: int main(int argc, char **argv)
7: {
8: DM dm;
9: Vec X,X_0;
10: PetscInt dim=2;
11: TS ts;
12: Mat J;
13: SNES snes;
14: KSP ksp;
15: PC pc;
16: SNESLineSearch linesearch;
17: PetscReal time;
19: PetscInitialize(&argc, &argv, NULL,help);
20: PetscOptionsGetInt(NULL,NULL, "-dim", &dim, NULL);
21: /* Create a mesh */
22: DMPlexLandauCreateVelocitySpace(PETSC_COMM_SELF, dim, "", &X, &J, &dm);
23: DMSetUp(dm);
24: VecDuplicate(X,&X_0);
25: VecCopy(X,X_0);
26: DMPlexLandauPrintNorms(X,0);
27: DMSetOutputSequenceNumber(dm, 0, 0.0);
28: DMViewFromOptions(dm,NULL,"-dm_view");
29: VecViewFromOptions(X,NULL,"-vec_view");
30: /* Create timestepping solver context */
31: TSCreate(PETSC_COMM_SELF,&ts);
32: TSSetDM(ts,dm);
33: TSGetSNES(ts,&snes);
34: SNESGetLineSearch(snes,&linesearch);
35: SNESLineSearchSetType(linesearch,SNESLINESEARCHBASIC);
36: TSSetIFunction(ts,NULL,DMPlexLandauIFunction,NULL);
37: TSSetIJacobian(ts,J,J,DMPlexLandauIJacobian,NULL);
38: TSSetExactFinalTime(ts,TS_EXACTFINALTIME_STEPOVER);
39: SNESGetKSP(snes,&ksp);
40: KSPGetPC(ksp,&pc);
41: TSSetFromOptions(ts);
42: TSSetSolution(ts,X);
43: TSSolve(ts,X);
44: DMPlexLandauPrintNorms(X,1);
45: TSGetTime(ts, &time);
46: DMSetOutputSequenceNumber(dm, 1, time);
47: VecViewFromOptions(X,NULL,"-vec_view");
48: VecAXPY(X,-1,X_0);
49: /* clean up */
50: DMPlexLandauDestroyVelocitySpace(&dm);
51: TSDestroy(&ts);
52: VecDestroy(&X);
53: VecDestroy(&X_0);
54: PetscFinalize();
55: return 0;
56: }
58: /*TEST
59: testset:
60: requires: p4est !complex double
61: output_file: output/ex1_0.out
62: args: -dm_landau_num_species_grid 1,2 -petscspace_degree 3 -petscspace_poly_tensor 1 -dm_landau_type p4est -dm_landau_ion_masses 2,4 -dm_landau_ion_charges 1,18 -dm_landau_thermal_temps 5,5,.5 -dm_landau_n 1.00018,1,1e-5 -dm_landau_n_0 1e20 -ts_monitor -snes_rtol 1.e-14 -snes_stol 1.e-14 -snes_monitor -snes_converged_reason -ts_type arkimex -ts_arkimex_type 1bee -ts_max_snes_failures -1 -ts_rtol 1e-1 -ts_dt 1.e-1 -ts_max_time 1 -ts_adapt_clip .5,1.25 -ts_adapt_scale_solve_failed 0.75 -ts_adapt_time_step_increase_delay 5 -ts_max_steps 1 -pc_type lu -ksp_type preonly -dm_landau_amr_levels_max 2,1
63: test:
64: suffix: cpu
65: args: -dm_landau_device_type cpu
66: test:
67: suffix: kokkos
68: requires: kokkos_kernels
69: args: -dm_landau_device_type kokkos -dm_mat_type aijkokkos -dm_vec_type kokkos
70: test:
71: suffix: cuda
72: requires: cuda
73: args: -dm_landau_device_type cuda -dm_mat_type aijcusparse -dm_vec_type cuda -mat_cusparse_use_cpu_solve
75: TEST*/