163dd3a1aSKris Buschelman #define PETSCTS_DLL 2bdad233fSMatthew Knepley 37c4f633dSBarry Smith #include "private/tsimpl.h" /*I "petscts.h" I*/ 4bdad233fSMatthew Knepley 57adad957SLisandro Dalcin #if 0 6bdad233fSMatthew Knepley #undef __FUNCT__ 7bdad233fSMatthew Knepley #define __FUNCT__ "TSPublish_Petsc" 86849ba73SBarry Smith static PetscErrorCode TSPublish_Petsc(PetscObject obj) 9bdad233fSMatthew Knepley { 10bdad233fSMatthew Knepley PetscFunctionBegin; 11bdad233fSMatthew Knepley PetscFunctionReturn(0); 12bdad233fSMatthew Knepley } 137adad957SLisandro Dalcin #endif 14bdad233fSMatthew Knepley 15bdad233fSMatthew Knepley #undef __FUNCT__ 16bdad233fSMatthew Knepley #define __FUNCT__ "TSCreate" 1760893bc3SSatish Balay /*@C 18bd6a702fSBarry Smith TSCreate - This function creates an empty timestepper. The problem type can then be set with TSSetProblemType() and the 19bd6a702fSBarry Smith type of solver can then be set with TSSetType(). 20bdad233fSMatthew Knepley 21bdad233fSMatthew Knepley Collective on MPI_Comm 22bdad233fSMatthew Knepley 23bdad233fSMatthew Knepley Input Parameter: 24bdad233fSMatthew Knepley . comm - The communicator 25bdad233fSMatthew Knepley 26bdad233fSMatthew Knepley Output Parameter: 27bdad233fSMatthew Knepley . ts - The TS 28bdad233fSMatthew Knepley 29bdad233fSMatthew Knepley Level: beginner 30bdad233fSMatthew Knepley 31bdad233fSMatthew Knepley .keywords: TS, create 32bd6a702fSBarry Smith .seealso: TSSetType(), TSSetUp(), TSDestroy(), MeshCreate(), TSSetProblemType() 33bdad233fSMatthew Knepley @*/ 3463dd3a1aSKris Buschelman PetscErrorCode PETSCTS_DLLEXPORT TSCreate(MPI_Comm comm, TS *ts) { 35bdad233fSMatthew Knepley TS t; 36dfbe8321SBarry Smith PetscErrorCode ierr; 37bdad233fSMatthew Knepley 38bdad233fSMatthew Knepley PetscFunctionBegin; 394482741eSBarry Smith PetscValidPointer(ts,1); 40bdad233fSMatthew Knepley *ts = PETSC_NULL; 41bdad233fSMatthew Knepley #ifndef PETSC_USE_DYNAMIC_LIBRARIES 42bdad233fSMatthew Knepley ierr = TSInitializePackage(PETSC_NULL);CHKERRQ(ierr); 43bdad233fSMatthew Knepley #endif 44bdad233fSMatthew Knepley 45*0700a824SBarry Smith ierr = PetscHeaderCreate(t, _p_TS, struct _TSOps, TS_CLASSID, -1, "TS", comm, TSDestroy, TSView);CHKERRQ(ierr); 46bdad233fSMatthew Knepley ierr = PetscMemzero(t->ops, sizeof(struct _TSOps));CHKERRQ(ierr); 47bdad233fSMatthew Knepley 48bdad233fSMatthew Knepley t->ops->prestep = TSDefaultPreStep; 49bdad233fSMatthew Knepley t->ops->poststep = TSDefaultPostStep; 50bdad233fSMatthew Knepley 51bdad233fSMatthew Knepley /* General TS description */ 52bdad233fSMatthew Knepley t->problem_type = TS_LINEAR; 53bdad233fSMatthew Knepley t->vec_sol = PETSC_NULL; 54bdad233fSMatthew Knepley t->vec_sol_always = PETSC_NULL; 55bdad233fSMatthew Knepley t->numbermonitors = 0; 5694b7f48cSBarry Smith t->ksp = PETSC_NULL; 57bdad233fSMatthew Knepley t->A = PETSC_NULL; 58bdad233fSMatthew Knepley t->B = PETSC_NULL; 598beb423aSHong Zhang t->Arhs = PETSC_NULL; 60aa644b49SHong Zhang t->Alhs = PETSC_NULL; 6195f0b562SHong Zhang t->matflg = DIFFERENT_NONZERO_PATTERN; 62bdad233fSMatthew Knepley t->snes = PETSC_NULL; 63bdad233fSMatthew Knepley t->funP = PETSC_NULL; 64bdad233fSMatthew Knepley t->jacP = PETSC_NULL; 65bdad233fSMatthew Knepley t->setupcalled = 0; 66bdad233fSMatthew Knepley t->data = PETSC_NULL; 67bdad233fSMatthew Knepley t->user = PETSC_NULL; 68bdad233fSMatthew Knepley t->max_steps = 5000; 69bdad233fSMatthew Knepley t->max_time = 5.0; 70bdad233fSMatthew Knepley t->time_step = .1; 71bdad233fSMatthew Knepley t->time_step_old = t->time_step; 72bdad233fSMatthew Knepley t->initial_time_step = t->time_step; 73bdad233fSMatthew Knepley t->steps = 0; 74bdad233fSMatthew Knepley t->ptime = 0.0; 75bdad233fSMatthew Knepley t->linear_its = 0; 76bdad233fSMatthew Knepley t->nonlinear_its = 0; 77bdad233fSMatthew Knepley t->work = PETSC_NULL; 78bdad233fSMatthew Knepley t->nwork = 0; 79bdad233fSMatthew Knepley 80bdad233fSMatthew Knepley *ts = t; 81bdad233fSMatthew Knepley PetscFunctionReturn(0); 82bdad233fSMatthew Knepley } 83bdad233fSMatthew Knepley 84aa644b49SHong Zhang /* Set A = 1/dt*Alhs - A, B = 1/dt*Blhs - B */ 85b0f6e734SBarry Smith #undef __FUNCT__ 86b0f6e734SBarry Smith #define __FUNCT__ "TSScaleShiftMatrices" 87b0f6e734SBarry Smith PetscErrorCode TSScaleShiftMatrices(TS ts,Mat A,Mat B,MatStructure str) 88b0f6e734SBarry Smith { 89b0f6e734SBarry Smith PetscTruth flg; 90b0f6e734SBarry Smith PetscErrorCode ierr; 91efb30889SBarry Smith PetscScalar mdt = 1.0/ts->time_step; 92b0f6e734SBarry Smith 93b0f6e734SBarry Smith PetscFunctionBegin; 946e07ea4bSHong Zhang /* this function requires additional work! */ 958beb423aSHong Zhang ierr = PetscTypeCompare((PetscObject)A,MATMFFD,&flg);CHKERRQ(ierr); 96b0f6e734SBarry Smith if (!flg) { 978beb423aSHong Zhang ierr = MatScale(A,-1.0);CHKERRQ(ierr); 98aa644b49SHong Zhang if (ts->Alhs){ 998beb423aSHong Zhang ierr = MatAXPY(A,mdt,ts->Alhs,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr); 100aa644b49SHong Zhang } else { 1018beb423aSHong Zhang ierr = MatShift(A,mdt);CHKERRQ(ierr); 102b0f6e734SBarry Smith } 103aa644b49SHong Zhang } 1048beb423aSHong Zhang if (B != A && str != SAME_PRECONDITIONER) { 1058beb423aSHong Zhang ierr = MatScale(B,-1.0);CHKERRQ(ierr); 1068beb423aSHong Zhang ierr = MatShift(B,mdt);CHKERRQ(ierr); 107b0f6e734SBarry Smith } 108b0f6e734SBarry Smith PetscFunctionReturn(0); 109b0f6e734SBarry Smith } 110