void TPZMaterialTest::ContributeBC(TPZMaterialData &data, REAL weight, TPZFMatrix<STATE> &ek, TPZFMatrix<STATE> &ef, TPZBndCond &bc) { TPZFMatrix<REAL> &phi = data.phi; if(bc.Material() != this) { PZError << "TPZMat1dLin.apply_bc warning : this material didn't create the boundary condition!\n"; } if(bc.Type() < 0 && bc.Type() > 2){ PZError << "TPZMat1dLin.aplybc, unknown boundary condition type :" << bc.Type() << " boundary condition ignored\n"; } int numdof = NStateVariables(); int numnod = ek.Rows()/numdof; int r = numdof; int idf,jdf,in,jn; switch(bc.Type()) { case 0: for(in=0 ; in<numnod ; ++in){ for(idf = 0;idf<r;idf++) { (ef)(in*r+idf,0) += gBigNumber*phi(in,0)*bc.Val2()(idf,0)*weight; } for(jn=0 ; jn<numnod ; ++jn) { for(idf = 0;idf<r;idf++) { ek(in*r+idf,jn*r+idf) += gBigNumber*phi(in,0)*phi(jn,0)*weight; } } } break; case 1: for(in=0 ; in<numnod ; ++in){ for(idf = 0;idf<r;idf++) { (ef)(in*r+idf,0) += phi(in,0)*bc.Val2()(idf,0)*weight; } } break; case 2: for(in=0 ; in<numnod ; ++in){ for(idf = 0;idf<r;idf++) { (ef)(in*r+idf,0) += phi(in,0)*bc.Val2()(idf,0)*weight; } for(jn=0 ; jn<numnod ; ++jn) { for(idf = 0;idf<r;idf++) { for(jdf = 0;jdf<r;jdf++) { ek(in*r+idf,jn*r+jdf) += bc.Val1()(idf,jdf)*phi(in,0)*phi(jn,0)*weight; } } } }//fim switch } }
void TPZEuler::ContributeBC(TPZMaterialData &data,REAL weight, TPZFMatrix<REAL> &ek, TPZFMatrix<REAL> &ef,TPZBndCond &bc) { // TPZFMatrix<REAL> &dphi = data.dphix; // TPZFMatrix<REAL> &dphiL = data.dphixl; // TPZFMatrix<REAL> &dphiR = data.dphixr; TPZFMatrix<REAL> &phi = data.phi; // TPZFMatrix<REAL> &phiL = data.phil; // TPZFMatrix<REAL> &phiR = data.phir; // TPZManVector<REAL,3> &normal = data.normal; // TPZManVector<REAL,3> &x = data.x; // int &POrder=data.p; // int &LeftPOrder=data.leftp; // int &RightPOrder=data.rightp; int numbersol = data.sol.size(); if (numbersol != 1) { DebugStop(); } TPZVec<REAL> &sol=data.sol[0]; // TPZVec<REAL> &solL=data.soll; // TPZVec<REAL> &solR=data.solr; // TPZFMatrix<REAL> &dsol=data.dsol; // TPZFMatrix<REAL> &dsolL=data.dsoll; // TPZFMatrix<REAL> &dsolR=data.dsolr; // REAL &faceSize=data.HSize; // TPZFMatrix<REAL> &daxesdksi=data.daxesdksi; TPZFMatrix<REAL> &axes=data.axes; if(fState == 0) return; if(bc.Material().operator ->() != this){ PZError << "TPZMat1dLin.apply_bc warning : this material didn't create the boundary condition!\n"; } if(bc.Type() < 0 && bc.Type() > 3){ PZError << "TPZEuler.aplybc, unknown boundary condition type :" << bc.Type() << " boundary condition ignored\n"; return; } int numdof = NStateVariables(); int numnod = ek.Rows()/numdof; int r = numdof; TPZVec<REAL> flux(8); gEul.Flux(sol,flux); REAL normal[2] = {axes(0,1),-axes(0,0)}; /* int i; cout << " flux = " << x[0] << ' ' << x[1] << ' ' << "normal" << normal[0] << ' ' << normal[1] << ' '; for(i=0; i<4; i++) cout << flux[i+4] << ' '; cout << endl; */ int idf,jdf,in,jn; switch(bc.Type()){ case 0: for(in=0 ; in<numnod ; ++in){ for(idf = 0;idf<r;idf++) { (ef)(in*r+idf,0) += gBigNumber*phi(in,0)*bc.Val2()(idf,0)*weight; } for(jn=0 ; jn<numnod ; ++jn) { for(idf = 0;idf<r;idf++) { ek(in*r+idf,jn*r+idf) += gBigNumber*phi(in,0)*phi(jn,0)*weight; } } } break; case 1: for(in=0 ; in<numnod ; ++in){ for(idf = 0;idf<r;idf++) { (ef)(in*r+idf,0) += phi(in,0)*bc.Val2()(idf,0)*weight; } } break; case 2: for(in=0 ; in<numnod ; ++in){ for(idf = 0;idf<r;idf++) { (ef)(in*r+idf,0) += phi(in,0)*bc.Val2()(idf,0)*weight; } for(jn=0 ; jn<numnod ; ++jn) { for(idf = 0;idf<r;idf++) { for(jdf = 0;jdf<r;jdf++) { ek(in*r+idf,jn*r+jdf) += bc.Val1()(idf,jdf)*phi(in,0)*phi(jn,0)*weight; } } } case 3: { TPZFMatrix<REAL> A(4,4),B(4,4); gEul.JacobFlux(sol,A,B); for(in=0; in<numnod; in++) { for(idf=0; idf<4; idf++) { /* ef(4*in+idf) += weight*fDeltaT*( -phi(in,0)*flux[idf]*normal[0] -phi(in,0)*flux[idf+4]*normal[1] ); */ for(jn=0; jn<numnod; jn++) { for(jdf=0; jdf<4; jdf++) { ek(4*in+idf,4*jn+jdf) += weight*fDeltaT* (phi(in,0)*A(idf,jdf)*phi(jn,0)*normal[0] + phi(in,0)*B(idf,jdf)*phi(jn,0)*normal[1]); } } } } } }//fim switch } }
void TPZMatHybrid::ContributeBC(TPZMaterialData &data, REAL weight, TPZFMatrix<REAL> &ek, TPZFMatrix<REAL> &ef, TPZBndCond &bc) { // TPZFMatrix<REAL> &dphi = data.dphix; // TPZFMatrix<REAL> &dphiL = data.dphixl; // TPZFMatrix<REAL> &dphiR = data.dphixr; TPZFMatrix<REAL> &phi = data.phi; // TPZFMatrix<REAL> &phiL = data.phil; // TPZFMatrix<REAL> &phiR = data.phir; // TPZManVector<REAL,3> &normal = data.normal; // TPZManVector<REAL,3> &x = data.x; // int &POrder=data.p; // int &LeftPOrder=data.leftp; // int &RightPOrder=data.rightp; // TPZVec<REAL> &sol=data.sol; // TPZVec<REAL> &solL=data.soll; // TPZVec<REAL> &solR=data.solr; // TPZFMatrix<REAL> &dsol=data.dsol; // TPZFMatrix<REAL> &dsolL=data.dsoll; // TPZFMatrix<REAL> &dsolR=data.dsolr; // REAL &faceSize=data.HSize; // TPZFMatrix<REAL> &daxesdksi=data.daxesdksi; // TPZFMatrix<REAL> &axes=data.axes; if(bc.Material().operator ->() != this){ PZError << "TPZMat1dLin.apply_bc warning : this material didn't create the boundary condition!\n"; } if(bc.Type() < 0 && bc.Type() > 2){ PZError << "TPZMat1dLin.aplybc, unknown boundary condition type :" << bc.Type() << " boundary condition ignored\n"; } int numdof = NStateVariables(); int numnod = ek.Rows()/numdof; int r = numdof; int idf,jdf,in,jn; switch(bc.Type()){ case 0: for(in=0 ; in<numnod ; ++in){ for(idf = 0;idf<r;idf++) { (ef)(in*r+idf,0) += gBigNumber*phi(in,0)*bc.Val2()(idf,0)*weight; } for(jn=0 ; jn<numnod ; ++jn) { for(idf = 0;idf<r;idf++) { ek(in*r+idf,jn*r+idf) += gBigNumber*phi(in,0)*phi(jn,0)*weight; } } } break; case 1: for(in=0 ; in<numnod ; ++in){ for(idf = 0;idf<r;idf++) { (ef)(in*r+idf,0) += phi(in,0)*bc.Val2()(idf,0)*weight; } } break; case 2: for(in=0 ; in<numnod ; ++in){ for(idf = 0;idf<r;idf++) { (ef)(in*r+idf,0) += phi(in,0)*bc.Val2()(idf,0)*weight; } for(jn=0 ; jn<numnod ; ++jn) { for(idf = 0;idf<r;idf++) { for(jdf = 0;jdf<r;jdf++) { ek(in*r+idf,jn*r+jdf) += bc.Val1()(idf,jdf)*phi(in,0)*phi(jn,0)*weight; } } } }//fim switch } }