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");
122 #ifdef NEKTAR_USING_PETSC
125 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];
219 ASSERTL1(pNonVertOutput.num_elements() >= pOutput.num_elements(),
"Non Vert output is not of sufficient length");
220 Vmath::Vcopy(pOutput.num_elements(),pNonVertOutput,1,pOutput,1);
231 Vmath::Zero(pVertForce.num_elements(),pVertForce,1);
233 for(i = 0; i < nloc; ++i)
235 val = LocToGloBnd[i];
238 pOutput[val-nDirFull] = Out[LocToGlo[i]];
240 pVertForce[val-nDirFull] = In[LocToGlo[i]];
247 for(i = 0; i < nloc; ++i)
249 val = LocToGloBnd[i];
252 pOutput[val-nDirFull] = Out[LocToGlo[i]];
259 ASSERTL0(0,
"Unsupported solver type");