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;
 11:   PetscInt       dim=2;
 12:   TS             ts;
 13:   Mat            J;
 14:   SNES           snes;
 15:   KSP            ksp;
 16:   PC             pc;
 17:   SNESLineSearch linesearch;
 18:   PetscReal      time;

 20:   PetscInitialize(&argc, &argv, NULL,help);if (ierr) return ierr;
 21:   PetscOptionsGetInt(NULL,NULL, "-dim", &dim, NULL);
 22:   /* Create a mesh */
 23:   LandauCreateVelocitySpace(PETSC_COMM_WORLD, dim, "", &X, &J, &dm);
 24:   LandauCreateMassMatrix(dm, NULL);
 25:   DMSetUp(dm);
 26:   VecDuplicate(X,&X_0);
 27:   VecCopy(X,X_0);
 28:   LandauPrintNorms(X,0);
 29:   DMSetOutputSequenceNumber(dm, 0, 0.0);
 30:   DMViewFromOptions(dm,NULL,"-dm_view");
 31:   VecViewFromOptions(X,NULL,"-vec_view");
 32:   /* Create timestepping solver context */
 33:   TSCreate(PETSC_COMM_SELF,&ts);
 34:   TSSetOptionsPrefix(ts, "ex1_");  /* should get this from the dm or give it to the dm */
 35:   TSSetDM(ts,dm);
 36:   TSGetSNES(ts,&snes);
 37:   SNESSetOptionsPrefix(snes, "ex1_");  /* should get this from the dm or give it to the dm */
 38:   SNESGetLineSearch(snes,&linesearch);
 39:   SNESLineSearchSetType(linesearch,SNESLINESEARCHBASIC);
 40:   TSSetIFunction(ts,NULL,LandauIFunction,NULL);
 41:   TSSetIJacobian(ts,J,J,LandauIJacobian,NULL);
 42:   TSSetExactFinalTime(ts,TS_EXACTFINALTIME_STEPOVER);
 43:   SNESGetKSP(snes,&ksp);
 44:   KSPSetOptionsPrefix(ksp, "ex1_");  /* should get this from the dm or give it to the dm */
 45:   KSPGetPC(ksp,&pc);
 46:   PCSetOptionsPrefix(pc, "ex1_");  /* should get this from the dm or give it to the dm */
 47:   TSSetFromOptions(ts);
 48:   TSSetSolution(ts,X);
 49:   TSSolve(ts,X);
 50:   LandauPrintNorms(X,1);
 51:   TSGetTime(ts, &time);
 52:   DMSetOutputSequenceNumber(dm, 1, time);
 53:   VecViewFromOptions(X,NULL,"-vec_view");
 54:   VecAXPY(X,-1,X_0);
 55:   /* clean up */
 56:   LandauDestroyVelocitySpace(&dm);
 57:   TSDestroy(&ts);
 58:   VecDestroy(&X);
 59:   VecDestroy(&X_0);
 60:   PetscFinalize();
 61:   return ierr;
 62: }


 65: /*TEST

 67:   test:
 68:     suffix: 0
 69:     requires: p4est !complex
 70:     args: -petscspace_degree 3 -petscspace_poly_tensor 1 -dm_landau_type p4est -info :dm,tsadapt -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 -ex1_ts_monitor -ex1_snes_rtol 1.e-6 -ex1_snes_monitor -ex1_snes_converged_reason -ex1_ts_type arkimex -ex1_ts_arkimex_type 1bee -ex1_ts_max_snes_failures -1 -ex1_ts_rtol 1e-4 -ex1_ts_dt 1.e-6 -ex1_ts_max_time 1 -ex1_ts_adapt_clip .5,1.25 -ex1_ts_adapt_scale_solve_failed 0.75 -ex1_ts_adapt_time_step_increase_delay 5 -ex1_ts_max_steps 1 -ex1_pc_type lu -ex1_ksp_type preonly -dm_landau_amr_levels_max 7 -dm_landau_domain_radius 5 -dm_landau_amr_re_levels 0 -dm_landau_re_radius 1 -dm_landau_amr_z_refine1 1 -dm_landau_amr_z_refine2 0 -dm_landau_amr_post_refine 0 -dm_landau_z_radius1 .1 -dm_landau_z_radius2 .1 -dm_refine 1 -dm_landau_gpu_assembly false

 72: TEST*/