11447629fSBarry Smith 21447629fSBarry Smith /* 31447629fSBarry Smith Defines the abstract operations on AO (application orderings) 41447629fSBarry Smith */ 51447629fSBarry Smith #include <../src/vec/is/ao/aoimpl.h> /*I "petscao.h" I*/ 61447629fSBarry Smith 71447629fSBarry Smith /* Logging support */ 81447629fSBarry Smith PetscClassId AO_CLASSID; 91447629fSBarry Smith PetscLogEvent AO_PetscToApplication, AO_ApplicationToPetsc; 101447629fSBarry Smith 111447629fSBarry Smith #undef __FUNCT__ 121447629fSBarry Smith #define __FUNCT__ "AOView" 131447629fSBarry Smith /*@C 141447629fSBarry Smith AOView - Displays an application ordering. 151447629fSBarry Smith 161447629fSBarry Smith Collective on AO and PetscViewer 171447629fSBarry Smith 181447629fSBarry Smith Input Parameters: 191447629fSBarry Smith + ao - the application ordering context 201447629fSBarry Smith - viewer - viewer used for display 211447629fSBarry Smith 221447629fSBarry Smith Level: intermediate 231447629fSBarry Smith 241447629fSBarry Smith Options Database Key: 251447629fSBarry Smith . -ao_view - calls AOView() at end of AOCreate() 261447629fSBarry Smith 271447629fSBarry Smith Note: 281447629fSBarry Smith The available visualization contexts include 291447629fSBarry Smith + PETSC_VIEWER_STDOUT_SELF - standard output (default) 301447629fSBarry Smith - PETSC_VIEWER_STDOUT_WORLD - synchronized standard 311447629fSBarry Smith output where only the first processor opens 321447629fSBarry Smith the file. All other processors send their 331447629fSBarry Smith data to the first processor to print. 341447629fSBarry Smith 351447629fSBarry Smith The user can open an alternative visualization context with 361447629fSBarry Smith PetscViewerASCIIOpen() - output to a specified file. 371447629fSBarry Smith 381447629fSBarry Smith .keywords: application ordering 391447629fSBarry Smith 401447629fSBarry Smith .seealso: PetscViewerASCIIOpen() 411447629fSBarry Smith @*/ 421447629fSBarry Smith PetscErrorCode AOView(AO ao,PetscViewer viewer) 431447629fSBarry Smith { 441447629fSBarry Smith PetscErrorCode ierr; 451447629fSBarry Smith 461447629fSBarry Smith PetscFunctionBegin; 471447629fSBarry Smith PetscValidHeaderSpecific(ao,AO_CLASSID,1); 48*76d20c1aSBarry Smith if (!viewer) { 49*76d20c1aSBarry Smith ierr = PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)ao),&viewer);CHKERRQ(ierr); 50*76d20c1aSBarry Smith } 511447629fSBarry Smith PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2); 5298c3331eSBarry Smith 5398c3331eSBarry Smith ierr = PetscObjectPrintClassNamePrefixType((PetscObject)ao,viewer);CHKERRQ(ierr); 541447629fSBarry Smith ierr = (*ao->ops->view)(ao,viewer);CHKERRQ(ierr); 551447629fSBarry Smith PetscFunctionReturn(0); 561447629fSBarry Smith } 571447629fSBarry Smith 581447629fSBarry Smith #undef __FUNCT__ 591447629fSBarry Smith #define __FUNCT__ "AODestroy" 6001e608bcSBarry Smith /*@ 611447629fSBarry Smith AODestroy - Destroys an application ordering. 621447629fSBarry Smith 631447629fSBarry Smith Collective on AO 641447629fSBarry Smith 651447629fSBarry Smith Input Parameters: 661447629fSBarry Smith . ao - the application ordering context 671447629fSBarry Smith 681447629fSBarry Smith Level: beginner 691447629fSBarry Smith 701447629fSBarry Smith .keywords: destroy, application ordering 711447629fSBarry Smith 721447629fSBarry Smith .seealso: AOCreate() 731447629fSBarry Smith @*/ 741447629fSBarry Smith PetscErrorCode AODestroy(AO *ao) 751447629fSBarry Smith { 761447629fSBarry Smith PetscErrorCode ierr; 771447629fSBarry Smith 781447629fSBarry Smith PetscFunctionBegin; 791447629fSBarry Smith if (!*ao) PetscFunctionReturn(0); 801447629fSBarry Smith PetscValidHeaderSpecific((*ao),AO_CLASSID,1); 811447629fSBarry Smith if (--((PetscObject)(*ao))->refct > 0) {*ao = 0; PetscFunctionReturn(0);} 82e04113cfSBarry Smith /* if memory was published with SAWs then destroy it */ 83e04113cfSBarry Smith ierr = PetscObjectSAWsViewOff((PetscObject)*ao);CHKERRQ(ierr); 8401e608bcSBarry Smith ierr = ISDestroy(&(*ao)->isapp);CHKERRQ(ierr); 8501e608bcSBarry Smith ierr = ISDestroy(&(*ao)->ispetsc);CHKERRQ(ierr); 861447629fSBarry Smith /* destroy the internal part */ 871447629fSBarry Smith if ((*ao)->ops->destroy) { 881447629fSBarry Smith ierr = (*(*ao)->ops->destroy)(*ao);CHKERRQ(ierr); 891447629fSBarry Smith } 901447629fSBarry Smith ierr = PetscHeaderDestroy(ao);CHKERRQ(ierr); 911447629fSBarry Smith PetscFunctionReturn(0); 921447629fSBarry Smith } 931447629fSBarry Smith 941447629fSBarry Smith 951447629fSBarry Smith #include <../src/vec/is/is/impls/general/general.h> 961447629fSBarry Smith /* ---------------------------------------------------------------------*/ 971447629fSBarry Smith #undef __FUNCT__ 981447629fSBarry Smith #define __FUNCT__ "AOPetscToApplicationIS" 991447629fSBarry Smith /*@ 1001447629fSBarry Smith AOPetscToApplicationIS - Maps an index set in the PETSc ordering to 1011447629fSBarry Smith the application-defined ordering. 1021447629fSBarry Smith 1031447629fSBarry Smith Collective on AO and IS 1041447629fSBarry Smith 1051447629fSBarry Smith Input Parameters: 1061447629fSBarry Smith + ao - the application ordering context 1071447629fSBarry Smith - is - the index set; this is replaced with its mapped values 1081447629fSBarry Smith 1091447629fSBarry Smith Output Parameter: 1101447629fSBarry Smith . is - the mapped index set 1111447629fSBarry Smith 1121447629fSBarry Smith Level: intermediate 1131447629fSBarry Smith 1141447629fSBarry Smith Notes: 1151447629fSBarry Smith The index set cannot be of type stride or block 1161447629fSBarry Smith 1171447629fSBarry Smith Any integers in ia[] that are negative are left unchanged. This 1181447629fSBarry Smith allows one to convert, for example, neighbor lists that use negative 1191447629fSBarry Smith entries to indicate nonexistent neighbors due to boundary conditions 1201447629fSBarry Smith etc. 1211447629fSBarry Smith 1221447629fSBarry Smith .keywords: application ordering, mapping 1231447629fSBarry Smith 1241447629fSBarry Smith .seealso: AOCreateBasic(), AOView(),AOApplicationToPetsc(), 1251447629fSBarry Smith AOApplicationToPetscIS(),AOPetscToApplication() 1261447629fSBarry Smith @*/ 1271447629fSBarry Smith PetscErrorCode AOPetscToApplicationIS(AO ao,IS is) 1281447629fSBarry Smith { 1291447629fSBarry Smith PetscErrorCode ierr; 1301447629fSBarry Smith PetscInt n; 1311447629fSBarry Smith PetscInt *ia; 1321447629fSBarry Smith 1331447629fSBarry Smith PetscFunctionBegin; 1341447629fSBarry Smith PetscValidHeaderSpecific(ao,AO_CLASSID,1); 1351447629fSBarry Smith PetscValidHeaderSpecific(is,IS_CLASSID,2); 1361447629fSBarry Smith ierr = ISToGeneral(is);CHKERRQ(ierr); 1371447629fSBarry Smith /* we cheat because we know the is is general and that we can change the indices */ 1381447629fSBarry Smith ierr = ISGetIndices(is,(const PetscInt**)&ia);CHKERRQ(ierr); 1391447629fSBarry Smith ierr = ISGetLocalSize(is,&n);CHKERRQ(ierr); 1401447629fSBarry Smith ierr = (*ao->ops->petsctoapplication)(ao,n,ia);CHKERRQ(ierr); 1411447629fSBarry Smith ierr = ISRestoreIndices(is,(const PetscInt**)&ia);CHKERRQ(ierr); 1421447629fSBarry Smith PetscFunctionReturn(0); 1431447629fSBarry Smith } 1441447629fSBarry Smith 1451447629fSBarry Smith #undef __FUNCT__ 1461447629fSBarry Smith #define __FUNCT__ "AOApplicationToPetscIS" 1471447629fSBarry Smith /*@ 1481447629fSBarry Smith AOApplicationToPetscIS - Maps an index set in the application-defined 1491447629fSBarry Smith ordering to the PETSc ordering. 1501447629fSBarry Smith 1511447629fSBarry Smith Collective on AO and IS 1521447629fSBarry Smith 1531447629fSBarry Smith Input Parameters: 1541447629fSBarry Smith + ao - the application ordering context 1551447629fSBarry Smith - is - the index set; this is replaced with its mapped values 1561447629fSBarry Smith 1571447629fSBarry Smith Output Parameter: 1581447629fSBarry Smith . is - the mapped index set 1591447629fSBarry Smith 1601447629fSBarry Smith Level: beginner 1611447629fSBarry Smith 1621447629fSBarry Smith Note: 1631447629fSBarry Smith The index set cannot be of type stride or block 1641447629fSBarry Smith 1651447629fSBarry Smith Any integers in ia[] that are negative are left unchanged. This 1661447629fSBarry Smith allows one to convert, for example, neighbor lists that use negative 1671447629fSBarry Smith entries to indicate nonexistent neighbors due to boundary conditions, etc. 1681447629fSBarry Smith 1691447629fSBarry Smith .keywords: application ordering, mapping 1701447629fSBarry Smith 1711447629fSBarry Smith .seealso: AOCreateBasic(), AOView(), AOPetscToApplication(), 1721447629fSBarry Smith AOPetscToApplicationIS(), AOApplicationToPetsc() 1731447629fSBarry Smith @*/ 1741447629fSBarry Smith PetscErrorCode AOApplicationToPetscIS(AO ao,IS is) 1751447629fSBarry Smith { 1761447629fSBarry Smith PetscErrorCode ierr; 1771447629fSBarry Smith PetscInt n,*ia; 1781447629fSBarry Smith 1791447629fSBarry Smith PetscFunctionBegin; 1801447629fSBarry Smith PetscValidHeaderSpecific(ao,AO_CLASSID,1); 1811447629fSBarry Smith PetscValidHeaderSpecific(is,IS_CLASSID,2); 1821447629fSBarry Smith ierr = ISToGeneral(is);CHKERRQ(ierr); 1831447629fSBarry Smith /* we cheat because we know the is is general and that we can change the indices */ 1841447629fSBarry Smith ierr = ISGetIndices(is,(const PetscInt**)&ia);CHKERRQ(ierr); 1851447629fSBarry Smith ierr = ISGetLocalSize(is,&n);CHKERRQ(ierr); 1861447629fSBarry Smith ierr = (*ao->ops->applicationtopetsc)(ao,n,ia);CHKERRQ(ierr); 1871447629fSBarry Smith ierr = ISRestoreIndices(is,(const PetscInt**)&ia);CHKERRQ(ierr); 1881447629fSBarry Smith PetscFunctionReturn(0); 1891447629fSBarry Smith } 1901447629fSBarry Smith 1911447629fSBarry Smith #undef __FUNCT__ 1921447629fSBarry Smith #define __FUNCT__ "AOPetscToApplication" 1931447629fSBarry Smith /*@ 1941447629fSBarry Smith AOPetscToApplication - Maps a set of integers in the PETSc ordering to 1951447629fSBarry Smith the application-defined ordering. 1961447629fSBarry Smith 1971447629fSBarry Smith Collective on AO 1981447629fSBarry Smith 1991447629fSBarry Smith Input Parameters: 2001447629fSBarry Smith + ao - the application ordering context 2011447629fSBarry Smith . n - the number of integers 2021447629fSBarry Smith - ia - the integers; these are replaced with their mapped value 2031447629fSBarry Smith 2041447629fSBarry Smith Output Parameter: 2051447629fSBarry Smith . ia - the mapped integers 2061447629fSBarry Smith 2071447629fSBarry Smith Level: beginner 2081447629fSBarry Smith 2091447629fSBarry Smith Note: 2101447629fSBarry Smith Any integers in ia[] that are negative are left unchanged. This 2111447629fSBarry Smith allows one to convert, for example, neighbor lists that use negative 2121447629fSBarry Smith entries to indicate nonexistent neighbors due to boundary conditions, etc. 2131447629fSBarry Smith 2141447629fSBarry Smith Integers that are out of range are mapped to -1 2151447629fSBarry Smith 2161447629fSBarry Smith .keywords: application ordering, mapping 2171447629fSBarry Smith 2181447629fSBarry Smith .seealso: AOCreateBasic(), AOView(),AOApplicationToPetsc(), 2191447629fSBarry Smith AOPetscToApplicationIS(), AOApplicationToPetsc() 2201447629fSBarry Smith @*/ 2211447629fSBarry Smith PetscErrorCode AOPetscToApplication(AO ao,PetscInt n,PetscInt ia[]) 2221447629fSBarry Smith { 2231447629fSBarry Smith PetscErrorCode ierr; 2241447629fSBarry Smith 2251447629fSBarry Smith PetscFunctionBegin; 2261447629fSBarry Smith PetscValidHeaderSpecific(ao,AO_CLASSID,1); 2271447629fSBarry Smith if (n) PetscValidIntPointer(ia,3); 2281447629fSBarry Smith ierr = (*ao->ops->petsctoapplication)(ao,n,ia);CHKERRQ(ierr); 2291447629fSBarry Smith PetscFunctionReturn(0); 2301447629fSBarry Smith } 2311447629fSBarry Smith 2321447629fSBarry Smith #undef __FUNCT__ 2331447629fSBarry Smith #define __FUNCT__ "AOApplicationToPetsc" 2341447629fSBarry Smith /*@ 2351447629fSBarry Smith AOApplicationToPetsc - Maps a set of integers in the application-defined 2361447629fSBarry Smith ordering to the PETSc ordering. 2371447629fSBarry Smith 2381447629fSBarry Smith Collective on AO 2391447629fSBarry Smith 2401447629fSBarry Smith Input Parameters: 2411447629fSBarry Smith + ao - the application ordering context 2421447629fSBarry Smith . n - the number of integers 2431447629fSBarry Smith - ia - the integers; these are replaced with their mapped value 2441447629fSBarry Smith 2451447629fSBarry Smith Output Parameter: 2461447629fSBarry Smith . ia - the mapped integers 2471447629fSBarry Smith 2481447629fSBarry Smith Level: beginner 2491447629fSBarry Smith 2501447629fSBarry Smith Note: 2511447629fSBarry Smith Any integers in ia[] that are negative are left unchanged. This 2521447629fSBarry Smith allows one to convert, for example, neighbor lists that use negative 2531447629fSBarry Smith entries to indicate nonexistent neighbors due to boundary conditions, etc. 2541447629fSBarry Smith 2551447629fSBarry Smith Integers that are out of range are mapped to -1 2561447629fSBarry Smith 2571447629fSBarry Smith .keywords: application ordering, mapping 2581447629fSBarry Smith 2591447629fSBarry Smith .seealso: AOCreateBasic(), AOView(), AOPetscToApplication(), 2601447629fSBarry Smith AOPetscToApplicationIS(), AOApplicationToPetsc() 2611447629fSBarry Smith @*/ 2621447629fSBarry Smith PetscErrorCode AOApplicationToPetsc(AO ao,PetscInt n,PetscInt ia[]) 2631447629fSBarry Smith { 2641447629fSBarry Smith PetscErrorCode ierr; 2651447629fSBarry Smith 2661447629fSBarry Smith PetscFunctionBegin; 2671447629fSBarry Smith PetscValidHeaderSpecific(ao,AO_CLASSID,1); 2681447629fSBarry Smith if (n) PetscValidIntPointer(ia,3); 2691447629fSBarry Smith ierr = (*ao->ops->applicationtopetsc)(ao,n,ia);CHKERRQ(ierr); 2701447629fSBarry Smith PetscFunctionReturn(0); 2711447629fSBarry Smith } 2721447629fSBarry Smith 2731447629fSBarry Smith #undef __FUNCT__ 2741447629fSBarry Smith #define __FUNCT__ "AOPetscToApplicationPermuteInt" 2751447629fSBarry Smith /*@ 2761447629fSBarry Smith AOPetscToApplicationPermuteInt - Permutes an array of blocks of integers 2771447629fSBarry Smith in the PETSc ordering to the application-defined ordering. 2781447629fSBarry Smith 2791447629fSBarry Smith Collective on AO 2801447629fSBarry Smith 2811447629fSBarry Smith Input Parameters: 2821447629fSBarry Smith + ao - The application ordering context 2831447629fSBarry Smith . block - The block size 2841447629fSBarry Smith - array - The integer array 2851447629fSBarry Smith 2861447629fSBarry Smith Output Parameter: 2871447629fSBarry Smith . array - The permuted array 2881447629fSBarry Smith 2891447629fSBarry Smith Note: The length of the array should be block*N, where N is length 2901447629fSBarry Smith provided to the AOCreate*() method that created the AO. 2911447629fSBarry Smith 2921447629fSBarry Smith The permutation takes array[i_pet] --> array[i_app], where i_app is 2931447629fSBarry Smith the index of 'i' in the application ordering and i_pet is the index 2941447629fSBarry Smith of 'i' in the petsc ordering. 2951447629fSBarry Smith 2961447629fSBarry Smith Level: beginner 2971447629fSBarry Smith 2981447629fSBarry Smith .keywords: application ordering, mapping 2991447629fSBarry Smith .seealso: AOCreateBasic(), AOView(), AOApplicationToPetsc(), AOPetscToApplicationIS() 3001447629fSBarry Smith @*/ 3011447629fSBarry Smith PetscErrorCode AOPetscToApplicationPermuteInt(AO ao, PetscInt block, PetscInt array[]) 3021447629fSBarry Smith { 3031447629fSBarry Smith PetscErrorCode ierr; 3041447629fSBarry Smith 3051447629fSBarry Smith PetscFunctionBegin; 3061447629fSBarry Smith PetscValidHeaderSpecific(ao, AO_CLASSID,1); 3071447629fSBarry Smith PetscValidIntPointer(array,3); 3081447629fSBarry Smith ierr = (*ao->ops->petsctoapplicationpermuteint)(ao, block, array);CHKERRQ(ierr); 3091447629fSBarry Smith PetscFunctionReturn(0); 3101447629fSBarry Smith } 3111447629fSBarry Smith 3121447629fSBarry Smith #undef __FUNCT__ 3131447629fSBarry Smith #define __FUNCT__ "AOApplicationToPetscPermuteInt" 3141447629fSBarry Smith /*@ 3151447629fSBarry Smith AOApplicationToPetscPermuteInt - Permutes an array of blocks of integers 3161447629fSBarry Smith in the application-defined ordering to the PETSc ordering. 3171447629fSBarry Smith 3181447629fSBarry Smith Collective on AO 3191447629fSBarry Smith 3201447629fSBarry Smith Input Parameters: 3211447629fSBarry Smith + ao - The application ordering context 3221447629fSBarry Smith . block - The block size 3231447629fSBarry Smith - array - The integer array 3241447629fSBarry Smith 3251447629fSBarry Smith Output Parameter: 3261447629fSBarry Smith . array - The permuted array 3271447629fSBarry Smith 3281447629fSBarry Smith Note: The length of the array should be block*N, where N is length 3291447629fSBarry Smith provided to the AOCreate*() method that created the AO. 3301447629fSBarry Smith 3311447629fSBarry Smith The permutation takes array[i_app] --> array[i_pet], where i_app is 3321447629fSBarry Smith the index of 'i' in the application ordering and i_pet is the index 3331447629fSBarry Smith of 'i' in the petsc ordering. 3341447629fSBarry Smith 3351447629fSBarry Smith Level: beginner 3361447629fSBarry Smith 3371447629fSBarry Smith .keywords: application ordering, mapping 3381447629fSBarry Smith 3391447629fSBarry Smith .seealso: AOCreateBasic(), AOView(), AOPetscToApplicationIS(), AOApplicationToPetsc() 3401447629fSBarry Smith @*/ 3411447629fSBarry Smith PetscErrorCode AOApplicationToPetscPermuteInt(AO ao, PetscInt block, PetscInt array[]) 3421447629fSBarry Smith { 3431447629fSBarry Smith PetscErrorCode ierr; 3441447629fSBarry Smith 3451447629fSBarry Smith PetscFunctionBegin; 3461447629fSBarry Smith PetscValidHeaderSpecific(ao, AO_CLASSID,1); 3471447629fSBarry Smith PetscValidIntPointer(array,3); 3481447629fSBarry Smith ierr = (*ao->ops->applicationtopetscpermuteint)(ao, block, array);CHKERRQ(ierr); 3491447629fSBarry Smith PetscFunctionReturn(0); 3501447629fSBarry Smith } 3511447629fSBarry Smith 3521447629fSBarry Smith #undef __FUNCT__ 3531447629fSBarry Smith #define __FUNCT__ "AOPetscToApplicationPermuteReal" 3541447629fSBarry Smith /*@ 3551447629fSBarry Smith AOPetscToApplicationPermuteReal - Permutes an array of blocks of reals 3561447629fSBarry Smith in the PETSc ordering to the application-defined ordering. 3571447629fSBarry Smith 3581447629fSBarry Smith Collective on AO 3591447629fSBarry Smith 3601447629fSBarry Smith Input Parameters: 3611447629fSBarry Smith + ao - The application ordering context 3621447629fSBarry Smith . block - The block size 3631447629fSBarry Smith - array - The integer array 3641447629fSBarry Smith 3651447629fSBarry Smith Output Parameter: 3661447629fSBarry Smith . array - The permuted array 3671447629fSBarry Smith 3681447629fSBarry Smith Note: The length of the array should be block*N, where N is length 3691447629fSBarry Smith provided to the AOCreate*() method that created the AO. 3701447629fSBarry Smith 3711447629fSBarry Smith The permutation takes array[i_pet] --> array[i_app], where i_app is 3721447629fSBarry Smith the index of 'i' in the application ordering and i_pet is the index 3731447629fSBarry Smith of 'i' in the petsc ordering. 3741447629fSBarry Smith 3751447629fSBarry Smith Level: beginner 3761447629fSBarry Smith 3771447629fSBarry Smith .keywords: application ordering, mapping 3781447629fSBarry Smith 3791447629fSBarry Smith .seealso: AOCreateBasic(), AOView(), AOApplicationToPetsc(), AOPetscToApplicationIS() 3801447629fSBarry Smith @*/ 3811447629fSBarry Smith PetscErrorCode AOPetscToApplicationPermuteReal(AO ao, PetscInt block, PetscReal array[]) 3821447629fSBarry Smith { 3831447629fSBarry Smith PetscErrorCode ierr; 3841447629fSBarry Smith 3851447629fSBarry Smith PetscFunctionBegin; 3861447629fSBarry Smith PetscValidHeaderSpecific(ao, AO_CLASSID,1); 3871447629fSBarry Smith PetscValidIntPointer(array,3); 3881447629fSBarry Smith ierr = (*ao->ops->petsctoapplicationpermutereal)(ao, block, array);CHKERRQ(ierr); 3891447629fSBarry Smith PetscFunctionReturn(0); 3901447629fSBarry Smith } 3911447629fSBarry Smith 3921447629fSBarry Smith #undef __FUNCT__ 3931447629fSBarry Smith #define __FUNCT__ "AOApplicationToPetscPermuteReal" 3941447629fSBarry Smith /*@ 3951447629fSBarry Smith AOApplicationToPetscPermuteReal - Permutes an array of blocks of reals 3961447629fSBarry Smith in the application-defined ordering to the PETSc ordering. 3971447629fSBarry Smith 3981447629fSBarry Smith Collective on AO 3991447629fSBarry Smith 4001447629fSBarry Smith Input Parameters: 4011447629fSBarry Smith + ao - The application ordering context 4021447629fSBarry Smith . block - The block size 4031447629fSBarry Smith - array - The integer array 4041447629fSBarry Smith 4051447629fSBarry Smith Output Parameter: 4061447629fSBarry Smith . array - The permuted array 4071447629fSBarry Smith 4081447629fSBarry Smith Note: The length of the array should be block*N, where N is length 4091447629fSBarry Smith provided to the AOCreate*() method that created the AO. 4101447629fSBarry Smith 4111447629fSBarry Smith The permutation takes array[i_app] --> array[i_pet], where i_app is 4121447629fSBarry Smith the index of 'i' in the application ordering and i_pet is the index 4131447629fSBarry Smith of 'i' in the petsc ordering. 4141447629fSBarry Smith 4151447629fSBarry Smith Level: beginner 4161447629fSBarry Smith 4171447629fSBarry Smith .keywords: application ordering, mapping 4181447629fSBarry Smith 4191447629fSBarry Smith .seealso: AOCreateBasic(), AOView(),AOApplicationToPetsc(), AOPetscToApplicationIS() 4201447629fSBarry Smith @*/ 4211447629fSBarry Smith PetscErrorCode AOApplicationToPetscPermuteReal(AO ao, PetscInt block, PetscReal array[]) 4221447629fSBarry Smith { 4231447629fSBarry Smith PetscErrorCode ierr; 4241447629fSBarry Smith 4251447629fSBarry Smith PetscFunctionBegin; 4261447629fSBarry Smith PetscValidHeaderSpecific(ao, AO_CLASSID,1); 4271447629fSBarry Smith PetscValidIntPointer(array,3); 4281447629fSBarry Smith ierr = (*ao->ops->applicationtopetscpermutereal)(ao, block, array);CHKERRQ(ierr); 4291447629fSBarry Smith PetscFunctionReturn(0); 4301447629fSBarry Smith } 4311447629fSBarry Smith 4321447629fSBarry Smith #undef __FUNCT__ 4331447629fSBarry Smith #define __FUNCT__ "AOSetFromOptions" 43401e608bcSBarry Smith /*@ 4351447629fSBarry Smith AOSetFromOptions - Sets AO options from the options database. 4361447629fSBarry Smith 4371447629fSBarry Smith Collective on AO 4381447629fSBarry Smith 4391447629fSBarry Smith Input Parameter: 4401447629fSBarry Smith . ao - the application ordering 4411447629fSBarry Smith 4421447629fSBarry Smith Level: beginner 4431447629fSBarry Smith 4441447629fSBarry Smith .keywords: AO, options, database 4451447629fSBarry Smith 4461447629fSBarry Smith .seealso: AOCreate(), AOSetType(), AODestroy(), AOPetscToApplication(), AOApplicationToPetsc() 4471447629fSBarry Smith @*/ 4481447629fSBarry Smith PetscErrorCode AOSetFromOptions(AO ao) 4491447629fSBarry Smith { 4501447629fSBarry Smith PetscErrorCode ierr; 4511447629fSBarry Smith char type[256]; 4521447629fSBarry Smith const char *def=AOBASIC; 4531447629fSBarry Smith PetscBool flg; 4541447629fSBarry Smith 4551447629fSBarry Smith PetscFunctionBegin; 4561447629fSBarry Smith PetscValidHeaderSpecific(ao,AO_CLASSID,1); 4571447629fSBarry Smith 4581447629fSBarry Smith ierr = PetscObjectOptionsBegin((PetscObject)ao);CHKERRQ(ierr); 459a264d7a6SBarry Smith ierr = PetscOptionsFList("-ao_type","AO type","AOSetType",AOList,def,type,256,&flg);CHKERRQ(ierr); 4601447629fSBarry Smith if (flg) { 4611447629fSBarry Smith ierr = AOSetType(ao,type);CHKERRQ(ierr); 4621447629fSBarry Smith } else if (!((PetscObject)ao)->type_name) { 4631447629fSBarry Smith ierr = AOSetType(ao,def);CHKERRQ(ierr); 4641447629fSBarry Smith } 4651447629fSBarry Smith ierr = PetscOptionsEnd();CHKERRQ(ierr); 4661447629fSBarry Smith PetscFunctionReturn(0); 4671447629fSBarry Smith } 4681447629fSBarry Smith 4691447629fSBarry Smith #undef __FUNCT__ 4701447629fSBarry Smith #define __FUNCT__ "AOSetIS" 47101e608bcSBarry Smith /*@ 4721447629fSBarry Smith AOSetIS - Sets the IS associated with the application ordering. 4731447629fSBarry Smith 4741447629fSBarry Smith Collective on MPI_Comm 4751447629fSBarry Smith 4761447629fSBarry Smith Input Parameters: 4771447629fSBarry Smith + ao - the application ordering 4781447629fSBarry Smith . isapp - index set that defines an ordering 4791447629fSBarry Smith - ispetsc - index set that defines another ordering (may be NULL to use the 4801447629fSBarry Smith natural ordering) 4811447629fSBarry Smith 4821447629fSBarry Smith Notes: 4831447629fSBarry Smith The index sets isapp and ispetsc are used only for creation of ao. 4841447629fSBarry Smith 48501e608bcSBarry Smith This routine increases the reference count of isapp and ispetsc so you may/should destroy these arguments after this call if you no longer need them 48601e608bcSBarry Smith 4871447629fSBarry Smith Level: beginner 4881447629fSBarry Smith 4891447629fSBarry Smith .keywords: AO, create 4901447629fSBarry Smith 4911447629fSBarry Smith .seealso: AOCreate(), AODestroy(), AOPetscToApplication(), AOApplicationToPetsc() 4921447629fSBarry Smith @*/ 4931447629fSBarry Smith PetscErrorCode AOSetIS(AO ao,IS isapp,IS ispetsc) 4941447629fSBarry Smith { 4951447629fSBarry Smith PetscErrorCode ierr; 4961447629fSBarry Smith 4971447629fSBarry Smith PetscFunctionBegin; 4981447629fSBarry Smith if (ispetsc) { 4991447629fSBarry Smith PetscInt napp,npetsc; 5001447629fSBarry Smith ierr = ISGetLocalSize(isapp,&napp);CHKERRQ(ierr); 5011447629fSBarry Smith ierr = ISGetLocalSize(ispetsc,&npetsc);CHKERRQ(ierr); 5021447629fSBarry Smith if (napp != npetsc) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_SIZ,"napp %D != npetsc %d. Local IS lengths must match",napp,npetsc); 5031447629fSBarry Smith } 50401e608bcSBarry Smith ierr = ISDestroy(&ao->isapp);CHKERRQ(ierr); 50501e608bcSBarry Smith ierr = ISDestroy(&ao->ispetsc);CHKERRQ(ierr); 5061447629fSBarry Smith ao->isapp = isapp; 5071447629fSBarry Smith ao->ispetsc = ispetsc; 50801e608bcSBarry Smith if (ao->isapp) {ierr = PetscObjectReference((PetscObject)ao->isapp);CHKERRQ(ierr);} 50901e608bcSBarry Smith if (ao->ispetsc) {ierr = PetscObjectReference((PetscObject)ao->ispetsc);CHKERRQ(ierr);} 5101447629fSBarry Smith PetscFunctionReturn(0); 5111447629fSBarry Smith } 5121447629fSBarry Smith 5131447629fSBarry Smith #undef __FUNCT__ 5141447629fSBarry Smith #define __FUNCT__ "AOCreate" 51501e608bcSBarry Smith /*@ 5161447629fSBarry Smith AOCreate - Creates an application ordering. 5171447629fSBarry Smith 5181447629fSBarry Smith Collective on MPI_Comm 5191447629fSBarry Smith 5201447629fSBarry Smith Input Parameters: 5211447629fSBarry Smith . comm - MPI communicator that is to share AO 5221447629fSBarry Smith 5231447629fSBarry Smith Output Parameter: 5241447629fSBarry Smith . ao - the new application ordering 5251447629fSBarry Smith 5261447629fSBarry Smith Options Database Key: 5271447629fSBarry Smith + -ao_type <aotype> - create ao with particular format 5281447629fSBarry Smith - -ao_view - call AOView() at the conclusion of AOCreate() 5291447629fSBarry Smith 5301447629fSBarry Smith Level: beginner 5311447629fSBarry Smith 5321447629fSBarry Smith .keywords: AO, create 5331447629fSBarry Smith 5341447629fSBarry Smith .seealso: AOSetIS(), AODestroy(), AOPetscToApplication(), AOApplicationToPetsc() 5351447629fSBarry Smith @*/ 5361447629fSBarry Smith PetscErrorCode AOCreate(MPI_Comm comm,AO *ao) 5371447629fSBarry Smith { 5381447629fSBarry Smith PetscErrorCode ierr; 5391447629fSBarry Smith AO aonew; 5401447629fSBarry Smith 5411447629fSBarry Smith PetscFunctionBegin; 5421447629fSBarry Smith PetscValidPointer(ao,2); 5431447629fSBarry Smith *ao = NULL; 544607a6623SBarry Smith ierr = AOInitializePackage();CHKERRQ(ierr); 5451447629fSBarry Smith 54673107ff1SLisandro Dalcin ierr = PetscHeaderCreate(aonew,AO_CLASSID,"AO","Application Ordering","AO",comm,AODestroy,AOView);CHKERRQ(ierr); 5471447629fSBarry Smith *ao = aonew; 5481447629fSBarry Smith PetscFunctionReturn(0); 5491447629fSBarry Smith } 550