163dd3a1aSKris Buschelman #define PETSCTS_DLL 2bdad233fSMatthew Knepley 3c98f2c1aSMatthew Knepley #include "src/ts/tsimpl.h" /*I "petscts.h" I*/ 4bdad233fSMatthew Knepley 5bdad233fSMatthew Knepley #undef __FUNCT__ 6bdad233fSMatthew Knepley #define __FUNCT__ "TSPublish_Petsc" 76849ba73SBarry Smith static PetscErrorCode TSPublish_Petsc(PetscObject obj) 8bdad233fSMatthew Knepley { 9bdad233fSMatthew Knepley PetscFunctionBegin; 10bdad233fSMatthew Knepley PetscFunctionReturn(0); 11bdad233fSMatthew Knepley } 12bdad233fSMatthew Knepley 13bdad233fSMatthew Knepley #undef __FUNCT__ 14bdad233fSMatthew Knepley #define __FUNCT__ "TSCreate" 1560893bc3SSatish Balay /*@C 16bd6a702fSBarry Smith TSCreate - This function creates an empty timestepper. The problem type can then be set with TSSetProblemType() and the 17bd6a702fSBarry Smith type of solver can then be set with TSSetType(). 18bdad233fSMatthew Knepley 19bdad233fSMatthew Knepley Collective on MPI_Comm 20bdad233fSMatthew Knepley 21bdad233fSMatthew Knepley Input Parameter: 22bdad233fSMatthew Knepley . comm - The communicator 23bdad233fSMatthew Knepley 24bdad233fSMatthew Knepley Output Parameter: 25bdad233fSMatthew Knepley . ts - The TS 26bdad233fSMatthew Knepley 27bdad233fSMatthew Knepley Level: beginner 28bdad233fSMatthew Knepley 29bdad233fSMatthew Knepley .keywords: TS, create 30bd6a702fSBarry Smith .seealso: TSSetType(), TSSetUp(), TSDestroy(), MeshCreate(), TSSetProblemType() 31bdad233fSMatthew Knepley @*/ 3263dd3a1aSKris Buschelman PetscErrorCode PETSCTS_DLLEXPORT TSCreate(MPI_Comm comm, TS *ts) { 33bdad233fSMatthew Knepley TS t; 34dfbe8321SBarry Smith PetscErrorCode ierr; 35bdad233fSMatthew Knepley 36bdad233fSMatthew Knepley PetscFunctionBegin; 374482741eSBarry Smith PetscValidPointer(ts,1); 38bdad233fSMatthew Knepley *ts = PETSC_NULL; 39bdad233fSMatthew Knepley #ifndef PETSC_USE_DYNAMIC_LIBRARIES 40bdad233fSMatthew Knepley ierr = TSInitializePackage(PETSC_NULL);CHKERRQ(ierr); 41bdad233fSMatthew Knepley #endif 42bdad233fSMatthew Knepley 4352e6d16bSBarry Smith ierr = PetscHeaderCreate(t, _p_TS, struct _TSOps, TS_COOKIE, -1, "TS", comm, TSDestroy, TSView);CHKERRQ(ierr); 4452e6d16bSBarry Smith ierr = PetscLogObjectMemory(t, sizeof(struct _p_TS));CHKERRQ(ierr); 45bdad233fSMatthew Knepley ierr = PetscMemzero(t->ops, sizeof(struct _TSOps));CHKERRQ(ierr); 46bdad233fSMatthew Knepley t->bops->publish = TSPublish_Petsc; 47bdad233fSMatthew Knepley t->type_name = PETSC_NULL; 48bdad233fSMatthew Knepley 49bdad233fSMatthew Knepley t->ops->prestep = TSDefaultPreStep; 50bdad233fSMatthew Knepley t->ops->update = TSDefaultUpdate; 51bdad233fSMatthew Knepley t->ops->poststep = TSDefaultPostStep; 52bdad233fSMatthew Knepley 53bdad233fSMatthew Knepley /* General TS description */ 54bdad233fSMatthew Knepley t->problem_type = TS_LINEAR; 55bdad233fSMatthew Knepley t->vec_sol = PETSC_NULL; 56bdad233fSMatthew Knepley t->vec_sol_always = PETSC_NULL; 57bdad233fSMatthew Knepley t->numbermonitors = 0; 58bdad233fSMatthew Knepley t->isExplicit = PETSC_NULL; 59bdad233fSMatthew Knepley t->Iindex = PETSC_NULL; 6094b7f48cSBarry Smith t->ksp = PETSC_NULL; 61bdad233fSMatthew Knepley t->A = PETSC_NULL; 62bdad233fSMatthew Knepley t->B = PETSC_NULL; 638beb423aSHong Zhang t->Arhs = PETSC_NULL; 64aa644b49SHong Zhang t->Alhs = PETSC_NULL; 65bdad233fSMatthew Knepley t->snes = PETSC_NULL; 66bdad233fSMatthew Knepley t->funP = PETSC_NULL; 67bdad233fSMatthew Knepley t->jacP = PETSC_NULL; 68bdad233fSMatthew Knepley t->setupcalled = 0; 69bdad233fSMatthew Knepley t->data = PETSC_NULL; 70bdad233fSMatthew Knepley t->user = PETSC_NULL; 71bdad233fSMatthew Knepley t->max_steps = 5000; 72bdad233fSMatthew Knepley t->max_time = 5.0; 73bdad233fSMatthew Knepley t->time_step = .1; 74bdad233fSMatthew Knepley t->time_step_old = t->time_step; 75bdad233fSMatthew Knepley t->initial_time_step = t->time_step; 76bdad233fSMatthew Knepley t->steps = 0; 77bdad233fSMatthew Knepley t->ptime = 0.0; 78bdad233fSMatthew Knepley t->linear_its = 0; 79bdad233fSMatthew Knepley t->nonlinear_its = 0; 80bdad233fSMatthew Knepley t->work = PETSC_NULL; 81bdad233fSMatthew Knepley t->nwork = 0; 82bdad233fSMatthew Knepley 83bdad233fSMatthew Knepley *ts = t; 84bdad233fSMatthew Knepley PetscFunctionReturn(0); 85bdad233fSMatthew Knepley } 86bdad233fSMatthew Knepley 87aa644b49SHong Zhang /* Set A = 1/dt*Alhs - A, B = 1/dt*Blhs - B */ 88b0f6e734SBarry Smith #undef __FUNCT__ 89b0f6e734SBarry Smith #define __FUNCT__ "TSScaleShiftMatrices" 90b0f6e734SBarry Smith PetscErrorCode TSScaleShiftMatrices(TS ts,Mat A,Mat B,MatStructure str) 91b0f6e734SBarry Smith { 92b0f6e734SBarry Smith PetscTruth flg; 93b0f6e734SBarry Smith PetscErrorCode ierr; 94efb30889SBarry Smith PetscScalar mdt = 1.0/ts->time_step; 95b0f6e734SBarry Smith 96b0f6e734SBarry Smith PetscFunctionBegin; 97*6e07ea4bSHong Zhang /* this function requires additional work! */ 988beb423aSHong Zhang ierr = PetscTypeCompare((PetscObject)A,MATMFFD,&flg);CHKERRQ(ierr); 99b0f6e734SBarry Smith if (!flg) { 1008beb423aSHong Zhang ierr = MatScale(A,-1.0);CHKERRQ(ierr); 101aa644b49SHong Zhang if (ts->Alhs){ 1028beb423aSHong Zhang ierr = MatAXPY(A,mdt,ts->Alhs,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr); 103aa644b49SHong Zhang } else { 1048beb423aSHong Zhang ierr = MatShift(A,mdt);CHKERRQ(ierr); 105b0f6e734SBarry Smith } 106aa644b49SHong Zhang } 1078beb423aSHong Zhang if (B != A && str != SAME_PRECONDITIONER) { 1088beb423aSHong Zhang ierr = MatScale(B,-1.0);CHKERRQ(ierr); 1098beb423aSHong Zhang ierr = MatShift(B,mdt);CHKERRQ(ierr); 110b0f6e734SBarry Smith } 111b0f6e734SBarry Smith PetscFunctionReturn(0); 112b0f6e734SBarry Smith } 113