43 #ifdef NEKTAR_USING_PETSC
52 namespace MultiRegions
62 "Full Linear space inverse Preconditioning");
87 const boost::shared_ptr<GlobalLinSys> &plinsys,
101 "This type of preconditioning is not implemented "
104 boost::shared_ptr<MultiRegions::ExpList>
105 expList=((
m_linsys.lock())->GetLocMat()).lock();
109 "LinearPreconSolver");
118 #ifndef NEKTAR_USING_PETSC
119 ASSERTL0(
false,
"Nektar++ has not been compiled with "
151 #ifdef NEKTAR_USING_PETSC
155 ASSERTL0(
false,
"Nektar++ has not been compiled with "
166 const Array<OneD, NekDouble>& pInput,
167 Array<OneD, NekDouble>& pOutput)
177 const Array<OneD, NekDouble>& pInput,
178 Array<OneD, NekDouble>& pOutput,
179 const Array<OneD, NekDouble>& pNonVertOutput,
180 Array<OneD, NekDouble>& pVertForce)
199 Array<OneD,NekDouble> In(nglo,0.0);
200 Array<OneD,NekDouble> Out(nglo,0.0);
203 for(i = 0; i < nloc; ++i)
205 val = LocToGloBnd[i];
208 In[LocToGlo[i]] = pInput[val-nDirFull];
216 m_vertLocToGloMap->GetNumGlobalDirBndCoeffs());
221 ASSERTL1(pNonVertOutput.num_elements() >= pOutput.num_elements(),
"Non Vert output is not of sufficient length");
222 Vmath::Vcopy(pOutput.num_elements(),pNonVertOutput,1,pOutput,1);
233 Vmath::Zero(pVertForce.num_elements(),pVertForce,1);
235 for(i = 0; i < nloc; ++i)
237 val = LocToGloBnd[i];
240 pOutput[val-nDirFull] = Out[LocToGlo[i]];
242 pVertForce[val-nDirFull] = In[LocToGlo[i]];
249 for(i = 0; i < nloc; ++i)
251 val = LocToGloBnd[i];
254 pOutput[val-nDirFull] = Out[LocToGlo[i]];
261 ASSERTL0(0,
"Unsupported solver type");