matrix.c (f6275e2ea51e47c27456a6b281dc40719917330c) matrix.c (ef66eb6987ddfdf4e414d6b820cbc8d8d7d17bc2)
1/*$Id: matrix.c,v 1.411 2001/08/07 03:02:41 balay Exp bsmith $*/
1/*$Id: matrix.c,v 1.412 2001/08/07 21:29:30 bsmith Exp bsmith $*/
2
3/*
4 This is where the abstract matrix operations are defined
5*/
6
7#include "src/mat/matimpl.h" /*I "petscmat.h" I*/
8#include "src/vec/vecimpl.h"
9

--- 2065 unchanged lines hidden (view full) ---

2075
2076 Concepts: matrices^triangular solves
2077
2078.seealso: MatSolve(), MatSolveAdd(), MatSolveTranspose()
2079@*/
2080int MatSolveTransposeAdd(Mat mat,Vec b,Vec y,Vec x)
2081{
2082 PetscScalar one = 1.0;
2
3/*
4 This is where the abstract matrix operations are defined
5*/
6
7#include "src/mat/matimpl.h" /*I "petscmat.h" I*/
8#include "src/vec/vecimpl.h"
9

--- 2065 unchanged lines hidden (view full) ---

2075
2076 Concepts: matrices^triangular solves
2077
2078.seealso: MatSolve(), MatSolveAdd(), MatSolveTranspose()
2079@*/
2080int MatSolveTransposeAdd(Mat mat,Vec b,Vec y,Vec x)
2081{
2082 PetscScalar one = 1.0;
2083 int ierr;
2084 Vec tmp;
2083 int ierr;
2084 Vec tmp;
2085
2086 PetscFunctionBegin;
2087 PetscValidHeaderSpecific(mat,MAT_COOKIE);
2088 PetscValidType(mat);
2089 MatPreallocated(mat);
2090 PetscValidHeaderSpecific(y,VEC_COOKIE);
2091 PetscValidHeaderSpecific(b,VEC_COOKIE);
2092 PetscValidHeaderSpecific(x,VEC_COOKIE);

--- 110 unchanged lines hidden (view full) ---

2203
2204#undef __FUNCT__
2205#define __FUNCT__ "MatCopy_Basic"
2206/*
2207 Default matrix copy routine.
2208*/
2209int MatCopy_Basic(Mat A,Mat B,MatStructure str)
2210{
2085
2086 PetscFunctionBegin;
2087 PetscValidHeaderSpecific(mat,MAT_COOKIE);
2088 PetscValidType(mat);
2089 MatPreallocated(mat);
2090 PetscValidHeaderSpecific(y,VEC_COOKIE);
2091 PetscValidHeaderSpecific(b,VEC_COOKIE);
2092 PetscValidHeaderSpecific(x,VEC_COOKIE);

--- 110 unchanged lines hidden (view full) ---

2203
2204#undef __FUNCT__
2205#define __FUNCT__ "MatCopy_Basic"
2206/*
2207 Default matrix copy routine.
2208*/
2209int MatCopy_Basic(Mat A,Mat B,MatStructure str)
2210{
2211 int ierr,i,rstart,rend,nz,*cwork;
2211 int ierr,i,rstart,rend,nz,*cwork;
2212 PetscScalar *vwork;
2213
2214 PetscFunctionBegin;
2215 ierr = MatZeroEntries(B);CHKERRQ(ierr);
2216 ierr = MatGetOwnershipRange(A,&rstart,&rend);CHKERRQ(ierr);
2217 for (i=rstart; i<rend; i++) {
2218 ierr = MatGetRow(A,i,&nz,&cwork,&vwork);CHKERRQ(ierr);
2219 ierr = MatSetValues(B,1,&i,nz,cwork,vwork,INSERT_VALUES);CHKERRQ(ierr);

--- 56 unchanged lines hidden (view full) ---

2276 ierr = MatCopy_Basic(A,B,str);CHKERRQ(ierr);
2277 }
2278 ierr = PetscLogEventEnd(MAT_Copy,A,B,0,0);CHKERRQ(ierr);
2279 PetscFunctionReturn(0);
2280}
2281
2282#include "petscsys.h"
2283PetscTruth MatConvertRegisterAllCalled = PETSC_FALSE;
2212 PetscScalar *vwork;
2213
2214 PetscFunctionBegin;
2215 ierr = MatZeroEntries(B);CHKERRQ(ierr);
2216 ierr = MatGetOwnershipRange(A,&rstart,&rend);CHKERRQ(ierr);
2217 for (i=rstart; i<rend; i++) {
2218 ierr = MatGetRow(A,i,&nz,&cwork,&vwork);CHKERRQ(ierr);
2219 ierr = MatSetValues(B,1,&i,nz,cwork,vwork,INSERT_VALUES);CHKERRQ(ierr);

--- 56 unchanged lines hidden (view full) ---

2276 ierr = MatCopy_Basic(A,B,str);CHKERRQ(ierr);
2277 }
2278 ierr = PetscLogEventEnd(MAT_Copy,A,B,0,0);CHKERRQ(ierr);
2279 PetscFunctionReturn(0);
2280}
2281
2282#include "petscsys.h"
2283PetscTruth MatConvertRegisterAllCalled = PETSC_FALSE;
2284PetscFList MatConvertList = 0;
2284PetscFList MatConvertList = 0;
2285
2286#undef __FUNCT__
2287#define __FUNCT__ "MatConvertRegister"
2288/*@C
2289 MatConvertRegister - Allows one to register a routine that reads matrices
2290 from a binary file for a particular matrix type.
2291
2292 Not Collective

--- 66 unchanged lines hidden (view full) ---

2359 ierr = PetscLogEventBegin(MAT_Convert,mat,0,0,0);CHKERRQ(ierr);
2360
2361 ierr = PetscTypeCompare((PetscObject)mat,newtype,&sametype);CHKERRQ(ierr);
2362 ierr = PetscStrcmp(newtype,"same",&issame);CHKERRQ(ierr);
2363 if ((sametype || issame) && mat->ops->duplicate) {
2364 ierr = (*mat->ops->duplicate)(mat,MAT_COPY_VALUES,M);CHKERRQ(ierr);
2365 } else {
2366 int (*conv)(Mat,MatType,Mat*);
2285
2286#undef __FUNCT__
2287#define __FUNCT__ "MatConvertRegister"
2288/*@C
2289 MatConvertRegister - Allows one to register a routine that reads matrices
2290 from a binary file for a particular matrix type.
2291
2292 Not Collective

--- 66 unchanged lines hidden (view full) ---

2359 ierr = PetscLogEventBegin(MAT_Convert,mat,0,0,0);CHKERRQ(ierr);
2360
2361 ierr = PetscTypeCompare((PetscObject)mat,newtype,&sametype);CHKERRQ(ierr);
2362 ierr = PetscStrcmp(newtype,"same",&issame);CHKERRQ(ierr);
2363 if ((sametype || issame) && mat->ops->duplicate) {
2364 ierr = (*mat->ops->duplicate)(mat,MAT_COPY_VALUES,M);CHKERRQ(ierr);
2365 } else {
2366 int (*conv)(Mat,MatType,Mat*);
2367 ierr = PetscStrcpy(convname,"MatConvertTo_");CHKERRQ(ierr);
2368 ierr = PetscStrcat(convname,newtype);CHKERRQ(ierr);
2369 ierr = PetscFListFind(mat->comm,MatConvertList,convname,(void(**)())&conv);CHKERRQ(ierr);
2367 if (!MatConvertRegisterAllCalled) {
2368 ierr = MatConvertRegisterAll(PETSC_NULL);CHKERRQ(ierr);
2369 }
2370 ierr = PetscFListFind(mat->comm,MatConvertList,newtype,(void(**)())&conv);CHKERRQ(ierr);
2370 if (conv) {
2371 ierr = (*conv)(mat,newtype,M);CHKERRQ(ierr);
2372 } else {
2373 ierr = PetscStrcpy(convname,"MatConvert_");CHKERRQ(ierr);
2374 ierr = PetscStrcat(convname,mat->type_name);CHKERRQ(ierr);
2375 ierr = PetscStrcat(convname,"_");CHKERRQ(ierr);
2376 ierr = PetscStrcat(convname,newtype);CHKERRQ(ierr);
2377 ierr = PetscStrcat(convname,"_C");CHKERRQ(ierr);

--- 2233 unchanged lines hidden ---
2371 if (conv) {
2372 ierr = (*conv)(mat,newtype,M);CHKERRQ(ierr);
2373 } else {
2374 ierr = PetscStrcpy(convname,"MatConvert_");CHKERRQ(ierr);
2375 ierr = PetscStrcat(convname,mat->type_name);CHKERRQ(ierr);
2376 ierr = PetscStrcat(convname,"_");CHKERRQ(ierr);
2377 ierr = PetscStrcat(convname,newtype);CHKERRQ(ierr);
2378 ierr = PetscStrcat(convname,"_C");CHKERRQ(ierr);

--- 2233 unchanged lines hidden ---