147c6ae99SBarry Smith #define PETSCDM_DLL 247c6ae99SBarry Smith 347c6ae99SBarry Smith #include "private/dmimpl.h" /*I "petscda.h" I*/ 447c6ae99SBarry Smith 547c6ae99SBarry Smith #undef __FUNCT__ 6*a4121054SBarry Smith #define __FUNCT__ "DMCreate" 7*a4121054SBarry Smith /*@ 8*a4121054SBarry Smith DMCreate - Creates an empty vector object. The type can then be set with DMetType(). 9*a4121054SBarry Smith 10*a4121054SBarry Smith If you never call DMSetType() it will generate an 11*a4121054SBarry Smith error when you try to use the vector. 12*a4121054SBarry Smith 13*a4121054SBarry Smith Collective on MPI_Comm 14*a4121054SBarry Smith 15*a4121054SBarry Smith Input Parameter: 16*a4121054SBarry Smith . comm - The communicator for the DM object 17*a4121054SBarry Smith 18*a4121054SBarry Smith Output Parameter: 19*a4121054SBarry Smith . dm - The DM object 20*a4121054SBarry Smith 21*a4121054SBarry Smith Level: beginner 22*a4121054SBarry Smith 23*a4121054SBarry Smith .seealso: DMSetType(), DMDA, DMSLICED, DMCOMPOSITE 24*a4121054SBarry Smith @*/ 25*a4121054SBarry Smith PetscErrorCode PETSCVEC_DLLEXPORT DMCreate(MPI_Comm comm, DM *vec) 26*a4121054SBarry Smith { 27*a4121054SBarry Smith DM v; 28*a4121054SBarry Smith PetscErrorCode ierr; 29*a4121054SBarry Smith 30*a4121054SBarry Smith PetscFunctionBegin; 31*a4121054SBarry Smith PetscValidPointer(vec,2); 32*a4121054SBarry Smith *vec = PETSC_NULL; 33*a4121054SBarry Smith #ifndef PETSC_USE_DYNAMIC_LIBRARIES 34*a4121054SBarry Smith ierr = DMInitializePackage(PETSC_NULL);CHKERRQ(ierr); 35*a4121054SBarry Smith #endif 36*a4121054SBarry Smith 37*a4121054SBarry Smith ierr = PetscHeaderCreate(v, _p_DM, struct _DMOps, DM_CLASSID, -1, "DM", comm, DMDestroy, DMView);CHKERRQ(ierr); 38*a4121054SBarry Smith ierr = PetscMemzero(v->ops, sizeof(struct _DMOps));CHKERRQ(ierr); 39*a4121054SBarry Smith *vec = v; 40*a4121054SBarry Smith PetscFunctionReturn(0); 41*a4121054SBarry Smith } 42*a4121054SBarry Smith 43*a4121054SBarry Smith 44*a4121054SBarry Smith #undef __FUNCT__ 459a42bb27SBarry Smith #define __FUNCT__ "DMSetVecType" 469a42bb27SBarry Smith /*@C 47564755cdSBarry Smith DMSetVecType - Sets the type of vector created with DMCreateLocalVector() and DMCreateGlobalVector() 489a42bb27SBarry Smith 49aa219208SBarry Smith Logically Collective on DMDA 509a42bb27SBarry Smith 519a42bb27SBarry Smith Input Parameter: 529a42bb27SBarry Smith + da - initial distributed array 539a42bb27SBarry Smith . ctype - the vector type, currently either VECSTANDARD or VECCUDA 549a42bb27SBarry Smith 559a42bb27SBarry Smith Options Database: 569a42bb27SBarry Smith . -da_vec_type ctype 579a42bb27SBarry Smith 589a42bb27SBarry Smith Level: intermediate 599a42bb27SBarry Smith 60aa219208SBarry Smith .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDestroy(), DMDA, DMDAInterpolationType, VecType 619a42bb27SBarry Smith @*/ 629a42bb27SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMSetVecType(DM da,const VecType ctype) 639a42bb27SBarry Smith { 649a42bb27SBarry Smith PetscErrorCode ierr; 659a42bb27SBarry Smith 669a42bb27SBarry Smith PetscFunctionBegin; 679a42bb27SBarry Smith PetscValidHeaderSpecific(da,DM_CLASSID,1); 689a42bb27SBarry Smith ierr = PetscFree(da->vectype);CHKERRQ(ierr); 699a42bb27SBarry Smith ierr = PetscStrallocpy(ctype,&da->vectype);CHKERRQ(ierr); 709a42bb27SBarry Smith PetscFunctionReturn(0); 719a42bb27SBarry Smith } 729a42bb27SBarry Smith 739a42bb27SBarry Smith #undef __FUNCT__ 749a42bb27SBarry Smith #define __FUNCT__ "DMSetOptionsPrefix" 759a42bb27SBarry Smith /*@C 769a42bb27SBarry Smith DMSetOptionsPrefix - Sets the prefix used for searching for all 77aa219208SBarry Smith DMDA options in the database. 789a42bb27SBarry Smith 79aa219208SBarry Smith Logically Collective on DMDA 809a42bb27SBarry Smith 819a42bb27SBarry Smith Input Parameter: 82aa219208SBarry Smith + da - the DMDA context 839a42bb27SBarry Smith - prefix - the prefix to prepend to all option names 849a42bb27SBarry Smith 859a42bb27SBarry Smith Notes: 869a42bb27SBarry Smith A hyphen (-) must NOT be given at the beginning of the prefix name. 879a42bb27SBarry Smith The first character of all runtime options is AUTOMATICALLY the hyphen. 889a42bb27SBarry Smith 899a42bb27SBarry Smith Level: advanced 909a42bb27SBarry Smith 91aa219208SBarry Smith .keywords: DMDA, set, options, prefix, database 929a42bb27SBarry Smith 939a42bb27SBarry Smith .seealso: DMSetFromOptions() 949a42bb27SBarry Smith @*/ 959a42bb27SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMSetOptionsPrefix(DM dm,const char prefix[]) 969a42bb27SBarry Smith { 979a42bb27SBarry Smith PetscErrorCode ierr; 989a42bb27SBarry Smith 999a42bb27SBarry Smith PetscFunctionBegin; 1009a42bb27SBarry Smith PetscValidHeaderSpecific(dm,DM_CLASSID,1); 1019a42bb27SBarry Smith ierr = PetscObjectSetOptionsPrefix((PetscObject)dm,prefix);CHKERRQ(ierr); 1029a42bb27SBarry Smith PetscFunctionReturn(0); 1039a42bb27SBarry Smith } 1049a42bb27SBarry Smith 1059a42bb27SBarry Smith #undef __FUNCT__ 10647c6ae99SBarry Smith #define __FUNCT__ "DMDestroy" 10747c6ae99SBarry Smith /*@ 108aa219208SBarry Smith DMDestroy - Destroys a vector packer or DMDA. 10947c6ae99SBarry Smith 11047c6ae99SBarry Smith Collective on DM 11147c6ae99SBarry Smith 11247c6ae99SBarry Smith Input Parameter: 11347c6ae99SBarry Smith . dm - the DM object to destroy 11447c6ae99SBarry Smith 11547c6ae99SBarry Smith Level: developer 11647c6ae99SBarry Smith 11747c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix() 11847c6ae99SBarry Smith 11947c6ae99SBarry Smith @*/ 12047c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMDestroy(DM dm) 12147c6ae99SBarry Smith { 12247c6ae99SBarry Smith PetscErrorCode ierr; 12347c6ae99SBarry Smith 12447c6ae99SBarry Smith PetscFunctionBegin; 1250c010503SBarry Smith ierr = (*dm->ops->destroy)(dm);CHKERRQ(ierr); 12647c6ae99SBarry Smith PetscFunctionReturn(0); 12747c6ae99SBarry Smith } 12847c6ae99SBarry Smith 12947c6ae99SBarry Smith #undef __FUNCT__ 130d7bf68aeSBarry Smith #define __FUNCT__ "DMSetUp" 131d7bf68aeSBarry Smith /*@ 132d7bf68aeSBarry Smith DMSetUp - sets up the data structures inside a DM object 133d7bf68aeSBarry Smith 134d7bf68aeSBarry Smith Collective on DM 135d7bf68aeSBarry Smith 136d7bf68aeSBarry Smith Input Parameter: 137d7bf68aeSBarry Smith . dm - the DM object to setup 138d7bf68aeSBarry Smith 139d7bf68aeSBarry Smith Level: developer 140d7bf68aeSBarry Smith 141d7bf68aeSBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix() 142d7bf68aeSBarry Smith 143d7bf68aeSBarry Smith @*/ 144d7bf68aeSBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMSetUp(DM dm) 145d7bf68aeSBarry Smith { 146d7bf68aeSBarry Smith PetscErrorCode ierr; 147d7bf68aeSBarry Smith 148d7bf68aeSBarry Smith PetscFunctionBegin; 149d7bf68aeSBarry Smith if (dm->ops->setup) { 150d7bf68aeSBarry Smith ierr = (*dm->ops->setup)(dm);CHKERRQ(ierr); 151d7bf68aeSBarry Smith } 152d7bf68aeSBarry Smith PetscFunctionReturn(0); 153d7bf68aeSBarry Smith } 154d7bf68aeSBarry Smith 155d7bf68aeSBarry Smith #undef __FUNCT__ 156d7bf68aeSBarry Smith #define __FUNCT__ "DMSetFromOptions" 157d7bf68aeSBarry Smith /*@ 158d7bf68aeSBarry Smith DMSetFromOptions - sets parameters in a DM from the options database 159d7bf68aeSBarry Smith 160d7bf68aeSBarry Smith Collective on DM 161d7bf68aeSBarry Smith 162d7bf68aeSBarry Smith Input Parameter: 163d7bf68aeSBarry Smith . dm - the DM object to set options for 164d7bf68aeSBarry Smith 165d7bf68aeSBarry Smith Level: developer 166d7bf68aeSBarry Smith 167d7bf68aeSBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix() 168d7bf68aeSBarry Smith 169d7bf68aeSBarry Smith @*/ 170d7bf68aeSBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMSetFromOptions(DM dm) 171d7bf68aeSBarry Smith { 172d7bf68aeSBarry Smith PetscErrorCode ierr; 173d7bf68aeSBarry Smith 174d7bf68aeSBarry Smith PetscFunctionBegin; 175d7bf68aeSBarry Smith if (dm->ops->setfromoptions) { 176d7bf68aeSBarry Smith ierr = (*dm->ops->setfromoptions)(dm);CHKERRQ(ierr); 177d7bf68aeSBarry Smith } 178d7bf68aeSBarry Smith PetscFunctionReturn(0); 179d7bf68aeSBarry Smith } 180d7bf68aeSBarry Smith 181d7bf68aeSBarry Smith #undef __FUNCT__ 18247c6ae99SBarry Smith #define __FUNCT__ "DMView" 18347c6ae99SBarry Smith /*@ 184aa219208SBarry Smith DMView - Views a vector packer or DMDA. 18547c6ae99SBarry Smith 18647c6ae99SBarry Smith Collective on DM 18747c6ae99SBarry Smith 18847c6ae99SBarry Smith Input Parameter: 18947c6ae99SBarry Smith + dm - the DM object to view 19047c6ae99SBarry Smith - v - the viewer 19147c6ae99SBarry Smith 19247c6ae99SBarry Smith Level: developer 19347c6ae99SBarry Smith 19447c6ae99SBarry Smith .seealso DMDestroy(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix() 19547c6ae99SBarry Smith 19647c6ae99SBarry Smith @*/ 19747c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMView(DM dm,PetscViewer v) 19847c6ae99SBarry Smith { 19947c6ae99SBarry Smith PetscErrorCode ierr; 20047c6ae99SBarry Smith 20147c6ae99SBarry Smith PetscFunctionBegin; 2020c010503SBarry Smith if (dm->ops->view) { 2030c010503SBarry Smith ierr = (*dm->ops->view)(dm,v);CHKERRQ(ierr); 20447c6ae99SBarry Smith } 20547c6ae99SBarry Smith PetscFunctionReturn(0); 20647c6ae99SBarry Smith } 20747c6ae99SBarry Smith 20847c6ae99SBarry Smith #undef __FUNCT__ 20947c6ae99SBarry Smith #define __FUNCT__ "DMCreateGlobalVector" 21047c6ae99SBarry Smith /*@ 211aa219208SBarry Smith DMCreateGlobalVector - Creates a global vector from a DMDA or DMComposite object 21247c6ae99SBarry Smith 21347c6ae99SBarry Smith Collective on DM 21447c6ae99SBarry Smith 21547c6ae99SBarry Smith Input Parameter: 21647c6ae99SBarry Smith . dm - the DM object 21747c6ae99SBarry Smith 21847c6ae99SBarry Smith Output Parameter: 21947c6ae99SBarry Smith . vec - the global vector 22047c6ae99SBarry Smith 22147c6ae99SBarry Smith Level: developer 22247c6ae99SBarry Smith 22347c6ae99SBarry Smith .seealso DMDestroy(), DMView(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix() 22447c6ae99SBarry Smith 22547c6ae99SBarry Smith @*/ 22647c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMCreateGlobalVector(DM dm,Vec *vec) 22747c6ae99SBarry Smith { 22847c6ae99SBarry Smith PetscErrorCode ierr; 22947c6ae99SBarry Smith 23047c6ae99SBarry Smith PetscFunctionBegin; 23147c6ae99SBarry Smith ierr = (*dm->ops->createglobalvector)(dm,vec);CHKERRQ(ierr); 23247c6ae99SBarry Smith PetscFunctionReturn(0); 23347c6ae99SBarry Smith } 23447c6ae99SBarry Smith 23547c6ae99SBarry Smith #undef __FUNCT__ 23647c6ae99SBarry Smith #define __FUNCT__ "DMCreateLocalVector" 23747c6ae99SBarry Smith /*@ 238aa219208SBarry Smith DMCreateLocalVector - Creates a local vector from a DMDA or DMComposite object 23947c6ae99SBarry Smith 24047c6ae99SBarry Smith Not Collective 24147c6ae99SBarry Smith 24247c6ae99SBarry Smith Input Parameter: 24347c6ae99SBarry Smith . dm - the DM object 24447c6ae99SBarry Smith 24547c6ae99SBarry Smith Output Parameter: 24647c6ae99SBarry Smith . vec - the local vector 24747c6ae99SBarry Smith 24847c6ae99SBarry Smith Level: developer 24947c6ae99SBarry Smith 25047c6ae99SBarry Smith .seealso DMDestroy(), DMView(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix() 25147c6ae99SBarry Smith 25247c6ae99SBarry Smith @*/ 25347c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMCreateLocalVector(DM dm,Vec *vec) 25447c6ae99SBarry Smith { 25547c6ae99SBarry Smith PetscErrorCode ierr; 25647c6ae99SBarry Smith 25747c6ae99SBarry Smith PetscFunctionBegin; 25847c6ae99SBarry Smith ierr = (*dm->ops->createlocalvector)(dm,vec);CHKERRQ(ierr); 25947c6ae99SBarry Smith PetscFunctionReturn(0); 26047c6ae99SBarry Smith } 26147c6ae99SBarry Smith 26247c6ae99SBarry Smith #undef __FUNCT__ 26347c6ae99SBarry Smith #define __FUNCT__ "DMGetInterpolation" 26447c6ae99SBarry Smith /*@ 265aa219208SBarry Smith DMGetInterpolation - Gets interpolation matrix between two DMDA or DMComposite objects 26647c6ae99SBarry Smith 26747c6ae99SBarry Smith Collective on DM 26847c6ae99SBarry Smith 26947c6ae99SBarry Smith Input Parameter: 27047c6ae99SBarry Smith + dm1 - the DM object 27147c6ae99SBarry Smith - dm2 - the second, finer DM object 27247c6ae99SBarry Smith 27347c6ae99SBarry Smith Output Parameter: 27447c6ae99SBarry Smith + mat - the interpolation 27547c6ae99SBarry Smith - vec - the scaling (optional) 27647c6ae99SBarry Smith 27747c6ae99SBarry Smith Level: developer 27847c6ae99SBarry Smith 27947c6ae99SBarry Smith .seealso DMDestroy(), DMView(), DMCreateGlobalVector(), DMGetColoring(), DMGetMatrix() 28047c6ae99SBarry Smith 28147c6ae99SBarry Smith @*/ 28247c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMGetInterpolation(DM dm1,DM dm2,Mat *mat,Vec *vec) 28347c6ae99SBarry Smith { 28447c6ae99SBarry Smith PetscErrorCode ierr; 28547c6ae99SBarry Smith 28647c6ae99SBarry Smith PetscFunctionBegin; 28747c6ae99SBarry Smith ierr = (*dm1->ops->getinterpolation)(dm1,dm2,mat,vec);CHKERRQ(ierr); 28847c6ae99SBarry Smith PetscFunctionReturn(0); 28947c6ae99SBarry Smith } 29047c6ae99SBarry Smith 29147c6ae99SBarry Smith #undef __FUNCT__ 29247c6ae99SBarry Smith #define __FUNCT__ "DMGetInjection" 29347c6ae99SBarry Smith /*@ 294aa219208SBarry Smith DMGetInjection - Gets injection matrix between two DMDA or DMComposite objects 29547c6ae99SBarry Smith 29647c6ae99SBarry Smith Collective on DM 29747c6ae99SBarry Smith 29847c6ae99SBarry Smith Input Parameter: 29947c6ae99SBarry Smith + dm1 - the DM object 30047c6ae99SBarry Smith - dm2 - the second, finer DM object 30147c6ae99SBarry Smith 30247c6ae99SBarry Smith Output Parameter: 30347c6ae99SBarry Smith . ctx - the injection 30447c6ae99SBarry Smith 30547c6ae99SBarry Smith Level: developer 30647c6ae99SBarry Smith 30747c6ae99SBarry Smith .seealso DMDestroy(), DMView(), DMCreateGlobalVector(), DMGetColoring(), DMGetMatrix(), DMGetInterpolation() 30847c6ae99SBarry Smith 30947c6ae99SBarry Smith @*/ 31047c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMGetInjection(DM dm1,DM dm2,VecScatter *ctx) 31147c6ae99SBarry Smith { 31247c6ae99SBarry Smith PetscErrorCode ierr; 31347c6ae99SBarry Smith 31447c6ae99SBarry Smith PetscFunctionBegin; 31547c6ae99SBarry Smith ierr = (*dm1->ops->getinjection)(dm1,dm2,ctx);CHKERRQ(ierr); 31647c6ae99SBarry Smith PetscFunctionReturn(0); 31747c6ae99SBarry Smith } 31847c6ae99SBarry Smith 31947c6ae99SBarry Smith #undef __FUNCT__ 32047c6ae99SBarry Smith #define __FUNCT__ "DMGetColoring" 32147c6ae99SBarry Smith /*@ 322aa219208SBarry Smith DMGetColoring - Gets coloring for a DMDA or DMComposite 32347c6ae99SBarry Smith 32447c6ae99SBarry Smith Collective on DM 32547c6ae99SBarry Smith 32647c6ae99SBarry Smith Input Parameter: 32747c6ae99SBarry Smith + dm - the DM object 32847c6ae99SBarry Smith . ctype - IS_COLORING_GHOSTED or IS_COLORING_GLOBAL 32947c6ae99SBarry Smith - matype - either MATAIJ or MATBAIJ 33047c6ae99SBarry Smith 33147c6ae99SBarry Smith Output Parameter: 33247c6ae99SBarry Smith . coloring - the coloring 33347c6ae99SBarry Smith 33447c6ae99SBarry Smith Level: developer 33547c6ae99SBarry Smith 33647c6ae99SBarry Smith .seealso DMDestroy(), DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetMatrix() 33747c6ae99SBarry Smith 33847c6ae99SBarry Smith @*/ 33947c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMGetColoring(DM dm,ISColoringType ctype,const MatType mtype,ISColoring *coloring) 34047c6ae99SBarry Smith { 34147c6ae99SBarry Smith PetscErrorCode ierr; 34247c6ae99SBarry Smith 34347c6ae99SBarry Smith PetscFunctionBegin; 34447c6ae99SBarry Smith if (!dm->ops->getcoloring) SETERRQ(((PetscObject)dm)->comm,PETSC_ERR_SUP,"No coloring for this type of DM yet"); 34547c6ae99SBarry Smith ierr = (*dm->ops->getcoloring)(dm,ctype,mtype,coloring);CHKERRQ(ierr); 34647c6ae99SBarry Smith PetscFunctionReturn(0); 34747c6ae99SBarry Smith } 34847c6ae99SBarry Smith 34947c6ae99SBarry Smith #undef __FUNCT__ 35047c6ae99SBarry Smith #define __FUNCT__ "DMGetMatrix" 35147c6ae99SBarry Smith /*@C 352aa219208SBarry Smith DMGetMatrix - Gets empty Jacobian for a DMDA or DMComposite 35347c6ae99SBarry Smith 35447c6ae99SBarry Smith Collective on DM 35547c6ae99SBarry Smith 35647c6ae99SBarry Smith Input Parameter: 35747c6ae99SBarry Smith + dm - the DM object 35847c6ae99SBarry Smith - mtype - Supported types are MATSEQAIJ, MATMPIAIJ, MATSEQBAIJ, MATMPIBAIJ, or 35994013140SBarry Smith any type which inherits from one of these (such as MATAIJ) 36047c6ae99SBarry Smith 36147c6ae99SBarry Smith Output Parameter: 36247c6ae99SBarry Smith . mat - the empty Jacobian 36347c6ae99SBarry Smith 36447c6ae99SBarry Smith Level: developer 36547c6ae99SBarry Smith 36694013140SBarry Smith Notes: This properly preallocates the number of nonzeros in the sparse matrix so you 36794013140SBarry Smith do not need to do it yourself. 36894013140SBarry Smith 36994013140SBarry Smith By default it also sets the nonzero structure and puts in the zero entries. To prevent setting 370aa219208SBarry Smith the nonzero pattern call DMDASetMatPreallocateOnly() 37194013140SBarry Smith 37294013140SBarry Smith For structured grid problems, when you call MatView() on this matrix it is displayed using the global natural ordering, NOT in the ordering used 37394013140SBarry Smith internally by PETSc. 37494013140SBarry Smith 37594013140SBarry Smith For structured grid problems, in general it is easiest to use MatSetValuesStencil() or MatSetValuesLocal() to put values into the matrix because MatSetValues() requires 376aa219208SBarry Smith the indices for the global numbering for DMDAs which is complicated. 37794013140SBarry Smith 37847c6ae99SBarry Smith .seealso DMDestroy(), DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetMatrix() 37947c6ae99SBarry Smith 38047c6ae99SBarry Smith @*/ 38147c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMGetMatrix(DM dm, const MatType mtype,Mat *mat) 38247c6ae99SBarry Smith { 38347c6ae99SBarry Smith PetscErrorCode ierr; 38447c6ae99SBarry Smith 38547c6ae99SBarry Smith PetscFunctionBegin; 38647c6ae99SBarry Smith ierr = (*dm->ops->getmatrix)(dm,mtype,mat);CHKERRQ(ierr); 38747c6ae99SBarry Smith PetscFunctionReturn(0); 38847c6ae99SBarry Smith } 38947c6ae99SBarry Smith 39047c6ae99SBarry Smith #undef __FUNCT__ 39147c6ae99SBarry Smith #define __FUNCT__ "DMRefine" 39247c6ae99SBarry Smith /*@ 39347c6ae99SBarry Smith DMRefine - Refines a DM object 39447c6ae99SBarry Smith 39547c6ae99SBarry Smith Collective on DM 39647c6ae99SBarry Smith 39747c6ae99SBarry Smith Input Parameter: 39847c6ae99SBarry Smith + dm - the DM object 39947c6ae99SBarry Smith - comm - the communicator to contain the new DM object (or PETSC_NULL) 40047c6ae99SBarry Smith 40147c6ae99SBarry Smith Output Parameter: 40247c6ae99SBarry Smith . dmf - the refined DM 40347c6ae99SBarry Smith 40447c6ae99SBarry Smith Level: developer 40547c6ae99SBarry Smith 40647c6ae99SBarry Smith .seealso DMCoarsen(), DMDestroy(), DMView(), DMCreateGlobalVector(), DMGetInterpolation() 40747c6ae99SBarry Smith 40847c6ae99SBarry Smith @*/ 40947c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMRefine(DM dm,MPI_Comm comm,DM *dmf) 41047c6ae99SBarry Smith { 41147c6ae99SBarry Smith PetscErrorCode ierr; 41247c6ae99SBarry Smith 41347c6ae99SBarry Smith PetscFunctionBegin; 41447c6ae99SBarry Smith ierr = (*dm->ops->refine)(dm,comm,dmf);CHKERRQ(ierr); 41547c6ae99SBarry Smith PetscFunctionReturn(0); 41647c6ae99SBarry Smith } 41747c6ae99SBarry Smith 41847c6ae99SBarry Smith #undef __FUNCT__ 41947c6ae99SBarry Smith #define __FUNCT__ "DMGlobalToLocalBegin" 42047c6ae99SBarry Smith /*@ 42147c6ae99SBarry Smith DMGlobalToLocalBegin - Begins updating local vectors from global vector 42247c6ae99SBarry Smith 42347c6ae99SBarry Smith Neighbor-wise Collective on DM 42447c6ae99SBarry Smith 42547c6ae99SBarry Smith Input Parameters: 42647c6ae99SBarry Smith + dm - the DM object 42747c6ae99SBarry Smith . g - the global vector 42847c6ae99SBarry Smith . mode - INSERT_VALUES or ADD_VALUES 42947c6ae99SBarry Smith - l - the local vector 43047c6ae99SBarry Smith 43147c6ae99SBarry Smith 43247c6ae99SBarry Smith Level: beginner 43347c6ae99SBarry Smith 4349a42bb27SBarry Smith .seealso DMCoarsen(), DMDestroy(), DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGlobalToLocalEnd(), DMLocalToGlobalBegin() 43547c6ae99SBarry Smith 43647c6ae99SBarry Smith @*/ 43747c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMGlobalToLocalBegin(DM dm,Vec g,InsertMode mode,Vec l) 43847c6ae99SBarry Smith { 43947c6ae99SBarry Smith PetscErrorCode ierr; 44047c6ae99SBarry Smith 44147c6ae99SBarry Smith PetscFunctionBegin; 44247c6ae99SBarry Smith ierr = (*dm->ops->globaltolocalbegin)(dm,g,mode,l);CHKERRQ(ierr); 44347c6ae99SBarry Smith PetscFunctionReturn(0); 44447c6ae99SBarry Smith } 44547c6ae99SBarry Smith 44647c6ae99SBarry Smith #undef __FUNCT__ 44747c6ae99SBarry Smith #define __FUNCT__ "DMGlobalToLocalEnd" 44847c6ae99SBarry Smith /*@ 44947c6ae99SBarry Smith DMGlobalToLocalEnd - Ends updating local vectors from global vector 45047c6ae99SBarry Smith 45147c6ae99SBarry Smith Neighbor-wise Collective on DM 45247c6ae99SBarry Smith 45347c6ae99SBarry Smith Input Parameters: 45447c6ae99SBarry Smith + dm - the DM object 45547c6ae99SBarry Smith . g - the global vector 45647c6ae99SBarry Smith . mode - INSERT_VALUES or ADD_VALUES 45747c6ae99SBarry Smith - l - the local vector 45847c6ae99SBarry Smith 45947c6ae99SBarry Smith 46047c6ae99SBarry Smith Level: beginner 46147c6ae99SBarry Smith 4629a42bb27SBarry Smith .seealso DMCoarsen(), DMDestroy(), DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGlobalToLocalEnd(), DMLocalToGlobalBegin() 46347c6ae99SBarry Smith 46447c6ae99SBarry Smith @*/ 46547c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMGlobalToLocalEnd(DM dm,Vec g,InsertMode mode,Vec l) 46647c6ae99SBarry Smith { 46747c6ae99SBarry Smith PetscErrorCode ierr; 46847c6ae99SBarry Smith 46947c6ae99SBarry Smith PetscFunctionBegin; 47047c6ae99SBarry Smith ierr = (*dm->ops->globaltolocalend)(dm,g,mode,l);CHKERRQ(ierr); 47147c6ae99SBarry Smith PetscFunctionReturn(0); 47247c6ae99SBarry Smith } 47347c6ae99SBarry Smith 47447c6ae99SBarry Smith #undef __FUNCT__ 4759a42bb27SBarry Smith #define __FUNCT__ "DMLocalToGlobalBegin" 47647c6ae99SBarry Smith /*@ 4779a42bb27SBarry Smith DMLocalToGlobalBegin - updates global vectors from local vectors 4789a42bb27SBarry Smith 4799a42bb27SBarry Smith Neighbor-wise Collective on DM 4809a42bb27SBarry Smith 4819a42bb27SBarry Smith Input Parameters: 4829a42bb27SBarry Smith + dm - the DM object 4839a42bb27SBarry Smith . g - the global vector 4849a42bb27SBarry Smith . mode - if INSERT_VALUES then no parallel communication is used, if ADD_VALUES then all ghost points from the same base point accumulate into that 4859a42bb27SBarry Smith base point. 4869a42bb27SBarry Smith - l - the local vector 4879a42bb27SBarry Smith 4889a42bb27SBarry Smith Notes: In the ADD_VALUES case you normally would zero the receiving vector before beginning this operation. If you would like to simply add the non-ghosted values in the local 4899a42bb27SBarry Smith array into the global array you need to either (1) zero the ghosted locations and use ADD_VALUES or (2) use INSERT_VALUES into a work global array and then add the work 4909a42bb27SBarry Smith global array to the final global array with VecAXPY(). 4919a42bb27SBarry Smith 4929a42bb27SBarry Smith Level: beginner 4939a42bb27SBarry Smith 4949a42bb27SBarry Smith .seealso DMCoarsen(), DMDestroy(), DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGlobalToLocalEnd(), DMGlobalToLocalBegin() 4959a42bb27SBarry Smith 4969a42bb27SBarry Smith @*/ 4979a42bb27SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMLocalToGlobalBegin(DM dm,Vec g,InsertMode mode,Vec l) 4989a42bb27SBarry Smith { 4999a42bb27SBarry Smith PetscErrorCode ierr; 5009a42bb27SBarry Smith 5019a42bb27SBarry Smith PetscFunctionBegin; 5029a42bb27SBarry Smith ierr = (*dm->ops->localtoglobalbegin)(dm,g,mode,l);CHKERRQ(ierr); 5039a42bb27SBarry Smith PetscFunctionReturn(0); 5049a42bb27SBarry Smith } 5059a42bb27SBarry Smith 5069a42bb27SBarry Smith #undef __FUNCT__ 5079a42bb27SBarry Smith #define __FUNCT__ "DMLocalToGlobalEnd" 5089a42bb27SBarry Smith /*@ 5099a42bb27SBarry Smith DMLocalToGlobalEnd - updates global vectors from local vectors 51047c6ae99SBarry Smith 51147c6ae99SBarry Smith Neighbor-wise Collective on DM 51247c6ae99SBarry Smith 51347c6ae99SBarry Smith Input Parameters: 51447c6ae99SBarry Smith + dm - the DM object 51547c6ae99SBarry Smith . g - the global vector 51647c6ae99SBarry Smith . mode - INSERT_VALUES or ADD_VALUES 51747c6ae99SBarry Smith - l - the local vector 51847c6ae99SBarry Smith 51947c6ae99SBarry Smith 52047c6ae99SBarry Smith Level: beginner 52147c6ae99SBarry Smith 5229a42bb27SBarry Smith .seealso DMCoarsen(), DMDestroy(), DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGlobalToLocalEnd(), DMGlobalToLocalEnd() 52347c6ae99SBarry Smith 52447c6ae99SBarry Smith @*/ 5259a42bb27SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMLocalToGlobalEnd(DM dm,Vec g,InsertMode mode,Vec l) 52647c6ae99SBarry Smith { 52747c6ae99SBarry Smith PetscErrorCode ierr; 52847c6ae99SBarry Smith 52947c6ae99SBarry Smith PetscFunctionBegin; 5309a42bb27SBarry Smith ierr = (*dm->ops->localtoglobalend)(dm,g,mode,l);CHKERRQ(ierr); 53147c6ae99SBarry Smith PetscFunctionReturn(0); 53247c6ae99SBarry Smith } 53347c6ae99SBarry Smith 53447c6ae99SBarry Smith #undef __FUNCT__ 53547c6ae99SBarry Smith #define __FUNCT__ "DMComputeJacobianDefault" 53647c6ae99SBarry Smith /*@ 53747c6ae99SBarry Smith DMComputeJacobianDefault - computes the Jacobian using the DMComputeFunction() if Jacobian computer is not provided 53847c6ae99SBarry Smith 53947c6ae99SBarry Smith Collective on DM 54047c6ae99SBarry Smith 54147c6ae99SBarry Smith Input Parameter: 54247c6ae99SBarry Smith + dm - the DM object 54347c6ae99SBarry Smith . x - location to compute Jacobian at; may be ignored for linear problems 54447c6ae99SBarry Smith . A - matrix that defines the operator for the linear solve 54547c6ae99SBarry Smith - B - the matrix used to construct the preconditioner 54647c6ae99SBarry Smith 54747c6ae99SBarry Smith Level: developer 54847c6ae99SBarry Smith 54947c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix(), DMGetContext(), DMSetInitialGuess(), 55047c6ae99SBarry Smith DMSetFunction() 55147c6ae99SBarry Smith 55247c6ae99SBarry Smith @*/ 55347c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMComputeJacobianDefault(DM dm,Vec x,Mat A,Mat B,MatStructure *stflag) 55447c6ae99SBarry Smith { 55547c6ae99SBarry Smith PetscErrorCode ierr; 55647c6ae99SBarry Smith PetscFunctionBegin; 55747c6ae99SBarry Smith *stflag = SAME_NONZERO_PATTERN; 55847c6ae99SBarry Smith ierr = MatFDColoringApply(B,dm->fd,x,stflag,dm);CHKERRQ(ierr); 55947c6ae99SBarry Smith if (A != B) { 56047c6ae99SBarry Smith ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 56147c6ae99SBarry Smith ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 56247c6ae99SBarry Smith } 56347c6ae99SBarry Smith PetscFunctionReturn(0); 56447c6ae99SBarry Smith } 56547c6ae99SBarry Smith 56647c6ae99SBarry Smith #undef __FUNCT__ 56747c6ae99SBarry Smith #define __FUNCT__ "DMCoarsen" 56847c6ae99SBarry Smith /*@ 56947c6ae99SBarry Smith DMCoarsen - Coarsens a DM object 57047c6ae99SBarry Smith 57147c6ae99SBarry Smith Collective on DM 57247c6ae99SBarry Smith 57347c6ae99SBarry Smith Input Parameter: 57447c6ae99SBarry Smith + dm - the DM object 57547c6ae99SBarry Smith - comm - the communicator to contain the new DM object (or PETSC_NULL) 57647c6ae99SBarry Smith 57747c6ae99SBarry Smith Output Parameter: 57847c6ae99SBarry Smith . dmc - the coarsened DM 57947c6ae99SBarry Smith 58047c6ae99SBarry Smith Level: developer 58147c6ae99SBarry Smith 58247c6ae99SBarry Smith .seealso DMRefine(), DMDestroy(), DMView(), DMCreateGlobalVector(), DMGetInterpolation() 58347c6ae99SBarry Smith 58447c6ae99SBarry Smith @*/ 58547c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMCoarsen(DM dm, MPI_Comm comm, DM *dmc) 58647c6ae99SBarry Smith { 58747c6ae99SBarry Smith PetscErrorCode ierr; 58847c6ae99SBarry Smith 58947c6ae99SBarry Smith PetscFunctionBegin; 59047c6ae99SBarry Smith ierr = (*dm->ops->coarsen)(dm, comm, dmc);CHKERRQ(ierr); 59147c6ae99SBarry Smith (*dmc)->ops->initialguess = dm->ops->initialguess; 59247c6ae99SBarry Smith (*dmc)->ops->function = dm->ops->function; 59347c6ae99SBarry Smith (*dmc)->ops->functionj = dm->ops->functionj; 59447c6ae99SBarry Smith if (dm->ops->jacobian != DMComputeJacobianDefault) { 59547c6ae99SBarry Smith (*dmc)->ops->jacobian = dm->ops->jacobian; 59647c6ae99SBarry Smith } 59747c6ae99SBarry Smith PetscFunctionReturn(0); 59847c6ae99SBarry Smith } 59947c6ae99SBarry Smith 60047c6ae99SBarry Smith #undef __FUNCT__ 60147c6ae99SBarry Smith #define __FUNCT__ "DMRefineHierarchy" 60247c6ae99SBarry Smith /*@C 60347c6ae99SBarry Smith DMRefineHierarchy - Refines a DM object, all levels at once 60447c6ae99SBarry Smith 60547c6ae99SBarry Smith Collective on DM 60647c6ae99SBarry Smith 60747c6ae99SBarry Smith Input Parameter: 60847c6ae99SBarry Smith + dm - the DM object 60947c6ae99SBarry Smith - nlevels - the number of levels of refinement 61047c6ae99SBarry Smith 61147c6ae99SBarry Smith Output Parameter: 61247c6ae99SBarry Smith . dmf - the refined DM hierarchy 61347c6ae99SBarry Smith 61447c6ae99SBarry Smith Level: developer 61547c6ae99SBarry Smith 61647c6ae99SBarry Smith .seealso DMCoarsenHierarchy(), DMDestroy(), DMView(), DMCreateGlobalVector(), DMGetInterpolation() 61747c6ae99SBarry Smith 61847c6ae99SBarry Smith @*/ 61947c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMRefineHierarchy(DM dm,PetscInt nlevels,DM dmf[]) 62047c6ae99SBarry Smith { 62147c6ae99SBarry Smith PetscErrorCode ierr; 62247c6ae99SBarry Smith 62347c6ae99SBarry Smith PetscFunctionBegin; 62447c6ae99SBarry Smith if (nlevels < 0) SETERRQ(((PetscObject)dm)->comm,PETSC_ERR_ARG_OUTOFRANGE,"nlevels cannot be negative"); 62547c6ae99SBarry Smith if (nlevels == 0) PetscFunctionReturn(0); 62647c6ae99SBarry Smith if (dm->ops->refinehierarchy) { 62747c6ae99SBarry Smith ierr = (*dm->ops->refinehierarchy)(dm,nlevels,dmf);CHKERRQ(ierr); 62847c6ae99SBarry Smith } else if (dm->ops->refine) { 62947c6ae99SBarry Smith PetscInt i; 63047c6ae99SBarry Smith 63147c6ae99SBarry Smith ierr = DMRefine(dm,((PetscObject)dm)->comm,&dmf[0]);CHKERRQ(ierr); 63247c6ae99SBarry Smith for (i=1; i<nlevels; i++) { 63347c6ae99SBarry Smith ierr = DMRefine(dmf[i-1],((PetscObject)dm)->comm,&dmf[i]);CHKERRQ(ierr); 63447c6ae99SBarry Smith } 63547c6ae99SBarry Smith } else { 63647c6ae99SBarry Smith SETERRQ(((PetscObject)dm)->comm,PETSC_ERR_SUP,"No RefineHierarchy for this DM yet"); 63747c6ae99SBarry Smith } 63847c6ae99SBarry Smith PetscFunctionReturn(0); 63947c6ae99SBarry Smith } 64047c6ae99SBarry Smith 64147c6ae99SBarry Smith #undef __FUNCT__ 64247c6ae99SBarry Smith #define __FUNCT__ "DMCoarsenHierarchy" 64347c6ae99SBarry Smith /*@C 64447c6ae99SBarry Smith DMCoarsenHierarchy - Coarsens a DM object, all levels at once 64547c6ae99SBarry Smith 64647c6ae99SBarry Smith Collective on DM 64747c6ae99SBarry Smith 64847c6ae99SBarry Smith Input Parameter: 64947c6ae99SBarry Smith + dm - the DM object 65047c6ae99SBarry Smith - nlevels - the number of levels of coarsening 65147c6ae99SBarry Smith 65247c6ae99SBarry Smith Output Parameter: 65347c6ae99SBarry Smith . dmc - the coarsened DM hierarchy 65447c6ae99SBarry Smith 65547c6ae99SBarry Smith Level: developer 65647c6ae99SBarry Smith 65747c6ae99SBarry Smith .seealso DMRefineHierarchy(), DMDestroy(), DMView(), DMCreateGlobalVector(), DMGetInterpolation() 65847c6ae99SBarry Smith 65947c6ae99SBarry Smith @*/ 66047c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMCoarsenHierarchy(DM dm, PetscInt nlevels, DM dmc[]) 66147c6ae99SBarry Smith { 66247c6ae99SBarry Smith PetscErrorCode ierr; 66347c6ae99SBarry Smith 66447c6ae99SBarry Smith PetscFunctionBegin; 66547c6ae99SBarry Smith if (nlevels < 0) SETERRQ(((PetscObject)dm)->comm,PETSC_ERR_ARG_OUTOFRANGE,"nlevels cannot be negative"); 66647c6ae99SBarry Smith if (nlevels == 0) PetscFunctionReturn(0); 66747c6ae99SBarry Smith PetscValidPointer(dmc,3); 66847c6ae99SBarry Smith if (dm->ops->coarsenhierarchy) { 66947c6ae99SBarry Smith ierr = (*dm->ops->coarsenhierarchy)(dm, nlevels, dmc);CHKERRQ(ierr); 67047c6ae99SBarry Smith } else if (dm->ops->coarsen) { 67147c6ae99SBarry Smith PetscInt i; 67247c6ae99SBarry Smith 67347c6ae99SBarry Smith ierr = DMCoarsen(dm,((PetscObject)dm)->comm,&dmc[0]);CHKERRQ(ierr); 67447c6ae99SBarry Smith for (i=1; i<nlevels; i++) { 67547c6ae99SBarry Smith ierr = DMCoarsen(dmc[i-1],((PetscObject)dm)->comm,&dmc[i]);CHKERRQ(ierr); 67647c6ae99SBarry Smith } 67747c6ae99SBarry Smith } else { 67847c6ae99SBarry Smith SETERRQ(((PetscObject)dm)->comm,PETSC_ERR_SUP,"No CoarsenHierarchy for this DM yet"); 67947c6ae99SBarry Smith } 68047c6ae99SBarry Smith PetscFunctionReturn(0); 68147c6ae99SBarry Smith } 68247c6ae99SBarry Smith 68347c6ae99SBarry Smith #undef __FUNCT__ 68447c6ae99SBarry Smith #define __FUNCT__ "DMGetAggregates" 68547c6ae99SBarry Smith /*@ 68647c6ae99SBarry Smith DMGetAggregates - Gets the aggregates that map between 68747c6ae99SBarry Smith grids associated with two DMs. 68847c6ae99SBarry Smith 68947c6ae99SBarry Smith Collective on DM 69047c6ae99SBarry Smith 69147c6ae99SBarry Smith Input Parameters: 69247c6ae99SBarry Smith + dmc - the coarse grid DM 69347c6ae99SBarry Smith - dmf - the fine grid DM 69447c6ae99SBarry Smith 69547c6ae99SBarry Smith Output Parameters: 69647c6ae99SBarry Smith . rest - the restriction matrix (transpose of the projection matrix) 69747c6ae99SBarry Smith 69847c6ae99SBarry Smith Level: intermediate 69947c6ae99SBarry Smith 70047c6ae99SBarry Smith .keywords: interpolation, restriction, multigrid 70147c6ae99SBarry Smith 70247c6ae99SBarry Smith .seealso: DMRefine(), DMGetInjection(), DMGetInterpolation() 70347c6ae99SBarry Smith @*/ 70447c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMGetAggregates(DM dmc, DM dmf, Mat *rest) 70547c6ae99SBarry Smith { 70647c6ae99SBarry Smith PetscErrorCode ierr; 70747c6ae99SBarry Smith 70847c6ae99SBarry Smith PetscFunctionBegin; 70947c6ae99SBarry Smith ierr = (*dmc->ops->getaggregates)(dmc, dmf, rest);CHKERRQ(ierr); 71047c6ae99SBarry Smith PetscFunctionReturn(0); 71147c6ae99SBarry Smith } 71247c6ae99SBarry Smith 71347c6ae99SBarry Smith #undef __FUNCT__ 71447c6ae99SBarry Smith #define __FUNCT__ "DMSetContext" 71547c6ae99SBarry Smith /*@ 71647c6ae99SBarry Smith DMSetContext - Set a user context into a DM object 71747c6ae99SBarry Smith 71847c6ae99SBarry Smith Not Collective 71947c6ae99SBarry Smith 72047c6ae99SBarry Smith Input Parameters: 72147c6ae99SBarry Smith + dm - the DM object 72247c6ae99SBarry Smith - ctx - the user context 72347c6ae99SBarry Smith 72447c6ae99SBarry Smith Level: intermediate 72547c6ae99SBarry Smith 72647c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix(), DMGetContext() 72747c6ae99SBarry Smith 72847c6ae99SBarry Smith @*/ 72947c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMSetContext(DM dm,void *ctx) 73047c6ae99SBarry Smith { 73147c6ae99SBarry Smith PetscFunctionBegin; 73247c6ae99SBarry Smith dm->ctx = ctx; 73347c6ae99SBarry Smith PetscFunctionReturn(0); 73447c6ae99SBarry Smith } 73547c6ae99SBarry Smith 73647c6ae99SBarry Smith #undef __FUNCT__ 73747c6ae99SBarry Smith #define __FUNCT__ "DMGetContext" 73847c6ae99SBarry Smith /*@ 73947c6ae99SBarry Smith DMGetContext - Gets a user context from a DM object 74047c6ae99SBarry Smith 74147c6ae99SBarry Smith Not Collective 74247c6ae99SBarry Smith 74347c6ae99SBarry Smith Input Parameter: 74447c6ae99SBarry Smith . dm - the DM object 74547c6ae99SBarry Smith 74647c6ae99SBarry Smith Output Parameter: 74747c6ae99SBarry Smith . ctx - the user context 74847c6ae99SBarry Smith 74947c6ae99SBarry Smith Level: intermediate 75047c6ae99SBarry Smith 75147c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix(), DMGetContext() 75247c6ae99SBarry Smith 75347c6ae99SBarry Smith @*/ 75447c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMGetContext(DM dm,void **ctx) 75547c6ae99SBarry Smith { 75647c6ae99SBarry Smith PetscFunctionBegin; 75747c6ae99SBarry Smith *ctx = dm->ctx; 75847c6ae99SBarry Smith PetscFunctionReturn(0); 75947c6ae99SBarry Smith } 76047c6ae99SBarry Smith 76147c6ae99SBarry Smith #undef __FUNCT__ 76247c6ae99SBarry Smith #define __FUNCT__ "DMSetInitialGuess" 76347c6ae99SBarry Smith /*@ 76447c6ae99SBarry Smith DMSetInitialGuess - sets a function to compute an initial guess vector entries for the solvers 76547c6ae99SBarry Smith 76647c6ae99SBarry Smith Logically Collective on DM 76747c6ae99SBarry Smith 76847c6ae99SBarry Smith Input Parameter: 76947c6ae99SBarry Smith + dm - the DM object to destroy 77047c6ae99SBarry Smith - f - the function to compute the initial guess 77147c6ae99SBarry Smith 77247c6ae99SBarry Smith Level: intermediate 77347c6ae99SBarry Smith 77447c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix(), DMGetContext(), DMSetFunction(), DMSetJacobian() 77547c6ae99SBarry Smith 77647c6ae99SBarry Smith @*/ 77747c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMSetInitialGuess(DM dm,PetscErrorCode (*f)(DM,Vec)) 77847c6ae99SBarry Smith { 77947c6ae99SBarry Smith PetscFunctionBegin; 78047c6ae99SBarry Smith dm->ops->initialguess = f; 78147c6ae99SBarry Smith PetscFunctionReturn(0); 78247c6ae99SBarry Smith } 78347c6ae99SBarry Smith 78447c6ae99SBarry Smith #undef __FUNCT__ 78547c6ae99SBarry Smith #define __FUNCT__ "DMSetFunction" 78647c6ae99SBarry Smith /*@ 78747c6ae99SBarry Smith DMSetFunction - sets a function to compute the right hand side vector entries for the KSP solver or nonlinear function for SNES 78847c6ae99SBarry Smith 78947c6ae99SBarry Smith Logically Collective on DM 79047c6ae99SBarry Smith 79147c6ae99SBarry Smith Input Parameter: 79247c6ae99SBarry Smith + dm - the DM object 79347c6ae99SBarry Smith - f - the function to compute (use PETSC_NULL to cancel a previous function that was set) 79447c6ae99SBarry Smith 79547c6ae99SBarry Smith Level: intermediate 79647c6ae99SBarry Smith 79747c6ae99SBarry Smith Notes: This sets both the function for function evaluations and the function used to compute Jacobians via finite differences if no Jacobian 79847c6ae99SBarry Smith computer is provided with DMSetJacobian(). Canceling cancels the function, but not the function used to compute the Jacobian. 79947c6ae99SBarry Smith 80047c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix(), DMGetContext(), DMSetInitialGuess(), 80147c6ae99SBarry Smith DMSetJacobian() 80247c6ae99SBarry Smith 80347c6ae99SBarry Smith @*/ 80447c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMSetFunction(DM dm,PetscErrorCode (*f)(DM,Vec,Vec)) 80547c6ae99SBarry Smith { 80647c6ae99SBarry Smith PetscFunctionBegin; 80747c6ae99SBarry Smith dm->ops->function = f; 80847c6ae99SBarry Smith if (f) { 80947c6ae99SBarry Smith dm->ops->functionj = f; 81047c6ae99SBarry Smith } 81147c6ae99SBarry Smith PetscFunctionReturn(0); 81247c6ae99SBarry Smith } 81347c6ae99SBarry Smith 81447c6ae99SBarry Smith #undef __FUNCT__ 81547c6ae99SBarry Smith #define __FUNCT__ "DMSetJacobian" 81647c6ae99SBarry Smith /*@ 81747c6ae99SBarry Smith DMSetJacobian - sets a function to compute the matrix entries for the KSP solver or Jacobian for SNES 81847c6ae99SBarry Smith 81947c6ae99SBarry Smith Logically Collective on DM 82047c6ae99SBarry Smith 82147c6ae99SBarry Smith Input Parameter: 82247c6ae99SBarry Smith + dm - the DM object to destroy 82347c6ae99SBarry Smith - f - the function to compute the matrix entries 82447c6ae99SBarry Smith 82547c6ae99SBarry Smith Level: intermediate 82647c6ae99SBarry Smith 82747c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix(), DMGetContext(), DMSetInitialGuess(), 82847c6ae99SBarry Smith DMSetFunction() 82947c6ae99SBarry Smith 83047c6ae99SBarry Smith @*/ 83147c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMSetJacobian(DM dm,PetscErrorCode (*f)(DM,Vec,Mat,Mat,MatStructure*)) 83247c6ae99SBarry Smith { 83347c6ae99SBarry Smith PetscFunctionBegin; 83447c6ae99SBarry Smith dm->ops->jacobian = f; 83547c6ae99SBarry Smith PetscFunctionReturn(0); 83647c6ae99SBarry Smith } 83747c6ae99SBarry Smith 83847c6ae99SBarry Smith #undef __FUNCT__ 83947c6ae99SBarry Smith #define __FUNCT__ "DMComputeInitialGuess" 84047c6ae99SBarry Smith /*@ 84147c6ae99SBarry Smith DMComputeInitialGuess - computes an initial guess vector entries for the KSP solvers 84247c6ae99SBarry Smith 84347c6ae99SBarry Smith Collective on DM 84447c6ae99SBarry Smith 84547c6ae99SBarry Smith Input Parameter: 84647c6ae99SBarry Smith + dm - the DM object to destroy 84747c6ae99SBarry Smith - x - the vector to hold the initial guess values 84847c6ae99SBarry Smith 84947c6ae99SBarry Smith Level: developer 85047c6ae99SBarry Smith 85147c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix(), DMGetContext(), DMSetRhs(), DMSetMat() 85247c6ae99SBarry Smith 85347c6ae99SBarry Smith @*/ 85447c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMComputeInitialGuess(DM dm,Vec x) 85547c6ae99SBarry Smith { 85647c6ae99SBarry Smith PetscErrorCode ierr; 85747c6ae99SBarry Smith PetscFunctionBegin; 85847c6ae99SBarry Smith if (!dm->ops->initialguess) SETERRQ(((PetscObject)dm)->comm,PETSC_ERR_ARG_WRONGSTATE,"Need to provide function with DMSetInitialGuess()"); 85947c6ae99SBarry Smith ierr = (*dm->ops->initialguess)(dm,x);CHKERRQ(ierr); 86047c6ae99SBarry Smith PetscFunctionReturn(0); 86147c6ae99SBarry Smith } 86247c6ae99SBarry Smith 86347c6ae99SBarry Smith #undef __FUNCT__ 86447c6ae99SBarry Smith #define __FUNCT__ "DMHasInitialGuess" 86547c6ae99SBarry Smith /*@ 86647c6ae99SBarry Smith DMHasInitialGuess - does the DM object have an initial guess function 86747c6ae99SBarry Smith 86847c6ae99SBarry Smith Not Collective 86947c6ae99SBarry Smith 87047c6ae99SBarry Smith Input Parameter: 87147c6ae99SBarry Smith . dm - the DM object to destroy 87247c6ae99SBarry Smith 87347c6ae99SBarry Smith Output Parameter: 87447c6ae99SBarry Smith . flg - PETSC_TRUE if function exists 87547c6ae99SBarry Smith 87647c6ae99SBarry Smith Level: developer 87747c6ae99SBarry Smith 87847c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix(), DMGetContext(), DMSetFunction(), DMSetJacobian() 87947c6ae99SBarry Smith 88047c6ae99SBarry Smith @*/ 88147c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMHasInitialGuess(DM dm,PetscBool *flg) 88247c6ae99SBarry Smith { 88347c6ae99SBarry Smith PetscFunctionBegin; 88447c6ae99SBarry Smith *flg = (dm->ops->initialguess) ? PETSC_TRUE : PETSC_FALSE; 88547c6ae99SBarry Smith PetscFunctionReturn(0); 88647c6ae99SBarry Smith } 88747c6ae99SBarry Smith 88847c6ae99SBarry Smith #undef __FUNCT__ 88947c6ae99SBarry Smith #define __FUNCT__ "DMHasFunction" 89047c6ae99SBarry Smith /*@ 89147c6ae99SBarry Smith DMHasFunction - does the DM object have a function 89247c6ae99SBarry Smith 89347c6ae99SBarry Smith Not Collective 89447c6ae99SBarry Smith 89547c6ae99SBarry Smith Input Parameter: 89647c6ae99SBarry Smith . dm - the DM object to destroy 89747c6ae99SBarry Smith 89847c6ae99SBarry Smith Output Parameter: 89947c6ae99SBarry Smith . flg - PETSC_TRUE if function exists 90047c6ae99SBarry Smith 90147c6ae99SBarry Smith Level: developer 90247c6ae99SBarry Smith 90347c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix(), DMGetContext(), DMSetFunction(), DMSetJacobian() 90447c6ae99SBarry Smith 90547c6ae99SBarry Smith @*/ 90647c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMHasFunction(DM dm,PetscBool *flg) 90747c6ae99SBarry Smith { 90847c6ae99SBarry Smith PetscFunctionBegin; 90947c6ae99SBarry Smith *flg = (dm->ops->function) ? PETSC_TRUE : PETSC_FALSE; 91047c6ae99SBarry Smith PetscFunctionReturn(0); 91147c6ae99SBarry Smith } 91247c6ae99SBarry Smith 91347c6ae99SBarry Smith #undef __FUNCT__ 91447c6ae99SBarry Smith #define __FUNCT__ "DMHasJacobian" 91547c6ae99SBarry Smith /*@ 91647c6ae99SBarry Smith DMHasJacobian - does the DM object have a matrix function 91747c6ae99SBarry Smith 91847c6ae99SBarry Smith Not Collective 91947c6ae99SBarry Smith 92047c6ae99SBarry Smith Input Parameter: 92147c6ae99SBarry Smith . dm - the DM object to destroy 92247c6ae99SBarry Smith 92347c6ae99SBarry Smith Output Parameter: 92447c6ae99SBarry Smith . flg - PETSC_TRUE if function exists 92547c6ae99SBarry Smith 92647c6ae99SBarry Smith Level: developer 92747c6ae99SBarry Smith 92847c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix(), DMGetContext(), DMSetFunction(), DMSetJacobian() 92947c6ae99SBarry Smith 93047c6ae99SBarry Smith @*/ 93147c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMHasJacobian(DM dm,PetscBool *flg) 93247c6ae99SBarry Smith { 93347c6ae99SBarry Smith PetscFunctionBegin; 93447c6ae99SBarry Smith *flg = (dm->ops->jacobian) ? PETSC_TRUE : PETSC_FALSE; 93547c6ae99SBarry Smith PetscFunctionReturn(0); 93647c6ae99SBarry Smith } 93747c6ae99SBarry Smith 93847c6ae99SBarry Smith #undef __FUNCT__ 93947c6ae99SBarry Smith #define __FUNCT__ "DMComputeFunction" 94047c6ae99SBarry Smith /*@ 94147c6ae99SBarry Smith DMComputeFunction - computes the right hand side vector entries for the KSP solver or nonlinear function for SNES 94247c6ae99SBarry Smith 94347c6ae99SBarry Smith Collective on DM 94447c6ae99SBarry Smith 94547c6ae99SBarry Smith Input Parameter: 94647c6ae99SBarry Smith + dm - the DM object to destroy 94747c6ae99SBarry Smith . x - the location where the function is evaluationed, may be ignored for linear problems 94847c6ae99SBarry Smith - b - the vector to hold the right hand side entries 94947c6ae99SBarry Smith 95047c6ae99SBarry Smith Level: developer 95147c6ae99SBarry Smith 95247c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix(), DMGetContext(), DMSetInitialGuess(), 95347c6ae99SBarry Smith DMSetJacobian() 95447c6ae99SBarry Smith 95547c6ae99SBarry Smith @*/ 95647c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMComputeFunction(DM dm,Vec x,Vec b) 95747c6ae99SBarry Smith { 95847c6ae99SBarry Smith PetscErrorCode ierr; 95947c6ae99SBarry Smith PetscFunctionBegin; 96047c6ae99SBarry Smith if (!dm->ops->function) SETERRQ(((PetscObject)dm)->comm,PETSC_ERR_ARG_WRONGSTATE,"Need to provide function with DMSetFunction()"); 96147c6ae99SBarry Smith if (!x) x = dm->x; 96247c6ae99SBarry Smith ierr = (*dm->ops->function)(dm,x,b);CHKERRQ(ierr); 96347c6ae99SBarry Smith PetscFunctionReturn(0); 96447c6ae99SBarry Smith } 96547c6ae99SBarry Smith 96647c6ae99SBarry Smith 96747c6ae99SBarry Smith #undef __FUNCT__ 96847c6ae99SBarry Smith #define __FUNCT__ "DMComputeJacobian" 96947c6ae99SBarry Smith /*@ 97047c6ae99SBarry Smith DMComputeJacobian - compute the matrix entries for the solver 97147c6ae99SBarry Smith 97247c6ae99SBarry Smith Collective on DM 97347c6ae99SBarry Smith 97447c6ae99SBarry Smith Input Parameter: 97547c6ae99SBarry Smith + dm - the DM object 97647c6ae99SBarry Smith . x - location to compute Jacobian at; may be ignored for linear problems 97747c6ae99SBarry Smith . A - matrix that defines the operator for the linear solve 97847c6ae99SBarry Smith - B - the matrix used to construct the preconditioner 97947c6ae99SBarry Smith 98047c6ae99SBarry Smith Level: developer 98147c6ae99SBarry Smith 98247c6ae99SBarry Smith .seealso DMView(), DMCreateGlobalVector(), DMGetInterpolation(), DMGetColoring(), DMGetMatrix(), DMGetContext(), DMSetInitialGuess(), 98347c6ae99SBarry Smith DMSetFunction() 98447c6ae99SBarry Smith 98547c6ae99SBarry Smith @*/ 98647c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMComputeJacobian(DM dm,Vec x,Mat A,Mat B,MatStructure *stflag) 98747c6ae99SBarry Smith { 98847c6ae99SBarry Smith PetscErrorCode ierr; 98947c6ae99SBarry Smith 99047c6ae99SBarry Smith PetscFunctionBegin; 99147c6ae99SBarry Smith if (!dm->ops->jacobian) { 99247c6ae99SBarry Smith ISColoring coloring; 99347c6ae99SBarry Smith MatFDColoring fd; 99447c6ae99SBarry Smith 99547c6ae99SBarry Smith ierr = DMGetColoring(dm,IS_COLORING_GHOSTED,MATAIJ,&coloring);CHKERRQ(ierr); 99647c6ae99SBarry Smith ierr = MatFDColoringCreate(B,coloring,&fd);CHKERRQ(ierr); 99747c6ae99SBarry Smith ierr = ISColoringDestroy(coloring);CHKERRQ(ierr); 99847c6ae99SBarry Smith ierr = MatFDColoringSetFunction(fd,(PetscErrorCode (*)(void))dm->ops->functionj,dm);CHKERRQ(ierr); 99947c6ae99SBarry Smith dm->fd = fd; 100047c6ae99SBarry Smith dm->ops->jacobian = DMComputeJacobianDefault; 100147c6ae99SBarry Smith 100247c6ae99SBarry Smith if (!dm->x) { 100347c6ae99SBarry Smith ierr = MatGetVecs(B,&dm->x,PETSC_NULL);CHKERRQ(ierr); 100447c6ae99SBarry Smith } 100547c6ae99SBarry Smith } 100647c6ae99SBarry Smith if (!x) x = dm->x; 100747c6ae99SBarry Smith ierr = (*dm->ops->jacobian)(dm,x,A,B,stflag);CHKERRQ(ierr); 100847c6ae99SBarry Smith PetscFunctionReturn(0); 100947c6ae99SBarry Smith } 1010264ace61SBarry Smith 1011264ace61SBarry Smith PetscFList DMList = PETSC_NULL; 1012264ace61SBarry Smith PetscBool DMRegisterAllCalled = PETSC_FALSE; 1013264ace61SBarry Smith 1014264ace61SBarry Smith #undef __FUNCT__ 1015264ace61SBarry Smith #define __FUNCT__ "DMSetType" 1016264ace61SBarry Smith /*@C 1017264ace61SBarry Smith DMSetType - Builds a DM, for a particular DM implementation. 1018264ace61SBarry Smith 1019264ace61SBarry Smith Collective on DM 1020264ace61SBarry Smith 1021264ace61SBarry Smith Input Parameters: 1022264ace61SBarry Smith + dm - The DM object 1023264ace61SBarry Smith - method - The name of the DM type 1024264ace61SBarry Smith 1025264ace61SBarry Smith Options Database Key: 1026264ace61SBarry Smith . -dm_type <type> - Sets the DM type; use -help for a list of available types 1027264ace61SBarry Smith 1028264ace61SBarry Smith Notes: 1029264ace61SBarry Smith See "petsc/include/petscda.h" for available DM types (for instance, DM1D, DM2D, or DM3D). 1030264ace61SBarry Smith 1031264ace61SBarry Smith Level: intermediate 1032264ace61SBarry Smith 1033264ace61SBarry Smith .keywords: DM, set, type 1034264ace61SBarry Smith .seealso: DMGetType(), DMCreate() 1035264ace61SBarry Smith @*/ 1036264ace61SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMSetType(DM dm, const DMType method) 1037264ace61SBarry Smith { 1038264ace61SBarry Smith PetscErrorCode (*r)(DM); 1039264ace61SBarry Smith PetscBool match; 1040264ace61SBarry Smith PetscErrorCode ierr; 1041264ace61SBarry Smith 1042264ace61SBarry Smith PetscFunctionBegin; 1043264ace61SBarry Smith PetscValidHeaderSpecific(dm, DM_CLASSID,1); 1044264ace61SBarry Smith ierr = PetscTypeCompare((PetscObject) dm, method, &match);CHKERRQ(ierr); 1045264ace61SBarry Smith if (match) PetscFunctionReturn(0); 1046264ace61SBarry Smith 1047264ace61SBarry Smith if (!DMRegisterAllCalled) {ierr = DMRegisterAll(PETSC_NULL);CHKERRQ(ierr);} 1048264ace61SBarry Smith ierr = PetscFListFind(DMList, ((PetscObject)dm)->comm, method,(void (**)(void)) &r);CHKERRQ(ierr); 1049264ace61SBarry Smith if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE, "Unknown DM type: %s", method); 1050264ace61SBarry Smith 1051264ace61SBarry Smith if (dm->ops->destroy) { 1052264ace61SBarry Smith ierr = (*dm->ops->destroy)(dm);CHKERRQ(ierr); 1053264ace61SBarry Smith } 1054264ace61SBarry Smith ierr = (*r)(dm);CHKERRQ(ierr); 1055264ace61SBarry Smith ierr = PetscObjectChangeTypeName((PetscObject)dm,method);CHKERRQ(ierr); 1056264ace61SBarry Smith PetscFunctionReturn(0); 1057264ace61SBarry Smith } 1058264ace61SBarry Smith 1059264ace61SBarry Smith #undef __FUNCT__ 1060264ace61SBarry Smith #define __FUNCT__ "DMGetType" 1061264ace61SBarry Smith /*@C 1062264ace61SBarry Smith DMGetType - Gets the DM type name (as a string) from the DM. 1063264ace61SBarry Smith 1064264ace61SBarry Smith Not Collective 1065264ace61SBarry Smith 1066264ace61SBarry Smith Input Parameter: 1067264ace61SBarry Smith . dm - The DM 1068264ace61SBarry Smith 1069264ace61SBarry Smith Output Parameter: 1070264ace61SBarry Smith . type - The DM type name 1071264ace61SBarry Smith 1072264ace61SBarry Smith Level: intermediate 1073264ace61SBarry Smith 1074264ace61SBarry Smith .keywords: DM, get, type, name 1075264ace61SBarry Smith .seealso: DMSetType(), DMCreate() 1076264ace61SBarry Smith @*/ 1077264ace61SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMGetType(DM dm, const DMType *type) 1078264ace61SBarry Smith { 1079264ace61SBarry Smith PetscErrorCode ierr; 1080264ace61SBarry Smith 1081264ace61SBarry Smith PetscFunctionBegin; 1082264ace61SBarry Smith PetscValidHeaderSpecific(dm, DM_CLASSID,1); 1083264ace61SBarry Smith PetscValidCharPointer(type,2); 1084264ace61SBarry Smith if (!DMRegisterAllCalled) { 1085264ace61SBarry Smith ierr = DMRegisterAll(PETSC_NULL);CHKERRQ(ierr); 1086264ace61SBarry Smith } 1087264ace61SBarry Smith *type = ((PetscObject)dm)->type_name; 1088264ace61SBarry Smith PetscFunctionReturn(0); 1089264ace61SBarry Smith } 1090264ace61SBarry Smith 1091264ace61SBarry Smith 1092264ace61SBarry Smith /*--------------------------------------------------------------------------------------------------------------------*/ 1093264ace61SBarry Smith 1094264ace61SBarry Smith #undef __FUNCT__ 1095264ace61SBarry Smith #define __FUNCT__ "DMRegister" 1096264ace61SBarry Smith /*@C 1097264ace61SBarry Smith DMRegister - See DMRegisterDynamic() 1098264ace61SBarry Smith 1099264ace61SBarry Smith Level: advanced 1100264ace61SBarry Smith @*/ 1101264ace61SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMRegister(const char sname[], const char path[], const char name[], PetscErrorCode (*function)(DM)) 1102264ace61SBarry Smith { 1103264ace61SBarry Smith char fullname[PETSC_MAX_PATH_LEN]; 1104264ace61SBarry Smith PetscErrorCode ierr; 1105264ace61SBarry Smith 1106264ace61SBarry Smith PetscFunctionBegin; 1107264ace61SBarry Smith ierr = PetscStrcpy(fullname, path);CHKERRQ(ierr); 1108264ace61SBarry Smith ierr = PetscStrcat(fullname, ":");CHKERRQ(ierr); 1109264ace61SBarry Smith ierr = PetscStrcat(fullname, name);CHKERRQ(ierr); 1110264ace61SBarry Smith ierr = PetscFListAdd(&DMList, sname, fullname, (void (*)(void)) function);CHKERRQ(ierr); 1111264ace61SBarry Smith PetscFunctionReturn(0); 1112264ace61SBarry Smith } 1113264ace61SBarry Smith 1114264ace61SBarry Smith 1115264ace61SBarry Smith /*--------------------------------------------------------------------------------------------------------------------*/ 1116264ace61SBarry Smith #undef __FUNCT__ 1117264ace61SBarry Smith #define __FUNCT__ "DMRegisterDestroy" 1118264ace61SBarry Smith /*@C 1119264ace61SBarry Smith DMRegisterDestroy - Frees the list of DM methods that were registered by DMRegister()/DMRegisterDynamic(). 1120264ace61SBarry Smith 1121264ace61SBarry Smith Not Collective 1122264ace61SBarry Smith 1123264ace61SBarry Smith Level: advanced 1124264ace61SBarry Smith 1125264ace61SBarry Smith .keywords: DM, register, destroy 1126264ace61SBarry Smith .seealso: DMRegister(), DMRegisterAll(), DMRegisterDynamic() 1127264ace61SBarry Smith @*/ 1128264ace61SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMRegisterDestroy(void) 1129264ace61SBarry Smith { 1130264ace61SBarry Smith PetscErrorCode ierr; 1131264ace61SBarry Smith 1132264ace61SBarry Smith PetscFunctionBegin; 1133264ace61SBarry Smith ierr = PetscFListDestroy(&DMList);CHKERRQ(ierr); 1134264ace61SBarry Smith DMRegisterAllCalled = PETSC_FALSE; 1135264ace61SBarry Smith PetscFunctionReturn(0); 1136264ace61SBarry Smith } 1137