/* FormInitialGuessComp - Forms the initial guess for the composite model Unwraps the global solution vector and passes its local pieces into the user functions */ PetscErrorCode FormInitialGuessComp(DMMG dmmg,Vec X) { PetscErrorCode ierr; AppCtx *user = (AppCtx*)dmmg->user; DMComposite dm = (DMComposite)dmmg->dm; Vec X1,X2; Field1 **x1; Field2 **x2; DALocalInfo info1,info2; DA da1,da2; PetscFunctionBegin; ierr = DMCompositeGetEntries(dm,&da1,&da2);CHKERRQ(ierr); /* Access the subvectors in X */ ierr = DMCompositeGetAccess(dm,X,&X1,&X2);CHKERRQ(ierr); /* Access the arrays inside the subvectors of X */ ierr = DAVecGetArray(da1,X1,(void**)&x1);CHKERRQ(ierr); ierr = DAVecGetArray(da2,X2,(void**)&x2);CHKERRQ(ierr); ierr = DAGetLocalInfo(da1,&info1);CHKERRQ(ierr); ierr = DAGetLocalInfo(da2,&info2);CHKERRQ(ierr); /* Evaluate local user provided function */ ierr = FormInitialGuessLocal1(&info1,x1);CHKERRQ(ierr); ierr = FormInitialGuessLocal2(&info2,x2,user);CHKERRQ(ierr); ierr = DAVecRestoreArray(da1,X1,(void**)&x1);CHKERRQ(ierr); ierr = DAVecRestoreArray(da2,X2,(void**)&x2);CHKERRQ(ierr); ierr = DMCompositeRestoreAccess(dm,X,&X1,&X2);CHKERRQ(ierr); PetscFunctionReturn(0); }
/* FormInitialGuessComp - Forms the initial guess for the composite model Unwraps the global solution vector and passes its local pieces into the user functions */ PetscErrorCode FormInitialGuessComp(DMMG dmmg,Vec X) { PetscErrorCode ierr; AppCtx *user = (AppCtx*)dmmg->user; DMMG *dmmg1 = user->dmmg1,*dmmg2=user->dmmg2; DMComposite dm = (DMComposite)dmmg->dm; Vec X1,X2; PetscFunctionBegin; /* Access the subvectors in X */ ierr = DMCompositeGetAccess(dm,X,&X1,&X2);CHKERRQ(ierr); /* Evaluate local user provided function */ ierr = FormInitialGuessLocal1(*dmmg1,X1);CHKERRQ(ierr); ierr = FormInitialGuessLocal2(*dmmg2,X2);CHKERRQ(ierr); ierr = DMCompositeRestoreAccess(dm,X,&X1,&X2);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode FormInitialGuess1(DMMG dmmg,Vec X) { PetscErrorCode ierr; AppCtx *user = (AppCtx*)dmmg->user; DA da1 = (DA)dmmg->dm; Field1 **x1; DALocalInfo info1; PetscFunctionBegin; if (user->nsolve) PetscFunctionReturn(0); printf(" FormInitialGuess1 ... user.nsolve %d\n",user->nsolve); /* Access the array inside of X */ ierr = DAVecGetArray(da1,X,(void**)&x1);CHKERRQ(ierr); ierr = DAGetLocalInfo(da1,&info1);CHKERRQ(ierr); /* Evaluate local user provided function */ ierr = FormInitialGuessLocal1(&info1,x1);CHKERRQ(ierr); ierr = DAVecRestoreArray(da1,X,(void**)&x1);CHKERRQ(ierr); PetscFunctionReturn(0); }