Startpage >> Main >> Setting

Setting
  1. Main code is OfflineComputation.edp.
  2. This calls the subcode settingANDproblem.idp that sets up the problem
  3. Next, we pick a parameter and compute a first function in the RB
  4. Loop for computing Reduced Basis:
    1. With the computed RB functions the main code calls the subcode ParameterSearch.idp that looks for the next parameter via Greedy
    2. The main code computes the solution attached to this parameter
    3. Do Gram-Schmidt on the Reduced Basis until orthogonality is lost
  5. End of loop on computing Reduced Basis and Store all info on disk

Set up of the problem, construction of the main matrices and of the Riesz Representation of right hand side (free from parameters).

Remember \begin{array}{rcl} -\kappa_b\Delta u & =& 0 \quad\mbox{on each block } B_b,\\ -\kappa_b\frac{\partial u}{\partial n}&=& Bi \cdot\,u \quad \mbox{on } \Gamma_b=\partial B_b\cap \partial\Omega,\quad b=1,2,... (Bi>0 \mbox{ Biot number})\\ -\kappa_b\frac{\partial u}{\partial n}&=& q \quad \mbox{on } \Gamma_{root} \end{array}

  1. one parameter \(\kappa_b=\kappa_0\) on central column
  2. \(\kappa_b=\kappa_{left}=\kappa_0+1\) on left blocks
  3. \(\kappa_b=\kappa_{right}=\kappa_0-1\) on right blocks
  4. \(Bi=1,\; q=10\)
  5. Only one parameter \(\kappa_0\in(50,100)\) and take a uniform partition as sample to search optimal values
Conductivities

Variational formulation:

Find \(u\in H^1(\Omega)\) such that for all test \(v\in H^1(\Omega)\) \begin{array}{rcl} \kappa_0\int_{C}\nabla u \cdot \nabla v+(\kappa_0+1)\int_{Cleft}\nabla u \cdot \nabla v+(\kappa_0-1)\int_{Cright}\nabla u \cdot \nabla v+ \int_{\partial \Omega\setminus \Gamma_{root}} u \,v& =& \int_{\Gamma_{root}} 10 \,v. \end{array}

  1. Read the mesh
  2. Create arrays and vector of the size of the Reduce Basis
  3. Include parameters. Info on that..... Parameters
  4. Define the global problem Heatdiffusion (not used and not needed)
  5. Construct free parameter matrices and vectors for the Heatdiffusion problem using varf
  6. Set up storage room for Reduce Basis functions and problem
  7. Construct Riesz Representation of right hand side of the problem, only done once.

Make Riesz Representation of RHS : RieszRepresentation_RHS.idp Info on that..... Riesz

Download here : settingANDproblem.idp Next, go to Offline Computation..... Offline

//
// HERE WE SETUP THE PROBLEM
//
verbosity=0;
load "medit"
//
// In case huge matrices
//load "UMFPACK64"
//
load "msh3"

macro Grad3(u) [dx(u),dy(u),dz(u)]  // EOM

//
// read the 3D mesh 
//
mesh3  Th3("Th3.mesh");

fespace Vh(Th3,P13d);

cout<<"DOFs "<<Vh.ndof<<endl;
Vh u,v,fh,qh, one=1;
//
// Get volume of computational domain
//
real volu=int3d(Th3)(one);
real invvol=1/volu;
//
// Parameter k0 in [k0min,k0max]
// kleft, kright y Bi funciones de k0
//
real k0,k0min,k0max,kleft,kright,Bi,aa;

include "data.idp"
k0=k0min;
//
// Other parameters depend on k0
//
include "parameters.idp";
//
// Diffusivities 
//
fespace Mh(Th3,P03d);
//
Mh kappa0;
kappa0=k0*(region==0)+k0*(region==2)
     +k0*(region==4)+k0*(region==6)
     +k0*(region==8)+k0*(region==10);
Mh kappa1;     
kappa1=kleft*(region==1)+kright*(region==3)
     +kleft*(region==5)+kright*(region==7)
     +kleft*(region==9)+kright*(region==11);
Mh kappa=kappa0+kappa1;
plot (kappa,wait=0,cmm="KAPPA ",fill=1,nbiso=40,value=1);
//medit("Kappa ",Th3,kappa);
//
// Global problem
//
problem Heatdiffusion(u,v,solver=sparsesolver) =
          int3d(Th3,0,2,4,6,8,10)(k0*Grad3(u)' *Grad3(v))
         +int3d(Th3,1,5,9)(kleft*Grad3(u)' *Grad3(v))
         +int3d(Th3,3,7,11)(kright*Grad3(u)' *Grad3(v))    
         +int3d(Th3)(aa*u *v)  // add elipticidad
         +int2d(Th3,10,12,14,16,18,110)(Bi*u*v)// central column front       
         +int2d(Th3,11,15,19)(Bi*u*v)// front left
         +int2d(Th3,13,17,111)(Bi*u*v)// front right       
         +int2d(Th3,30,32,34,36,38,310)(Bi*u*v)// central column back
         +int2d(Th3,31,35,39)(Bi*u*v)// back left
         +int2d(Th3,33,37,311)(Bi*u*v)// back right
         +int2d(Th3,40,44,48)(Bi*u*v)// left viewpoint central column 
         +int2d(Th3,41,45,49)(Bi*u*v)// left viewpoint  left blocks 
         +int2d(Th3,20,24,28)(Bi*u*v)// right viewpoint central column
         +int2d(Th3,23,27,211)(Bi*u*v)// right viewpoint right blocks
         +int2d(Th3,199,201)(Bi*u*v)// bottom up
         +int2d(Th3,299,301)(Bi*u*v)// Top down first outlet
         +int2d(Th3,399,401)(Bi*u*v)// bottom up second outlet
         +int2d(Th3,499,501)(Bi*u*v)// Top down  second outlet
         +int2d(Th3,599,601)(Bi*u*v)// bottom up third outlet
         +int2d(Th3,699,700,701)(Bi*u*v)// Top down  third outlet
         +int3d(Th3)(-fh*v)         
         +int2d(Th3,100)(-qh*v)
         ;
//
// variational forms free from parameters. To be computed once  
//     
varf a1(u,v)= int3d(Th3,0,2,4,6,8,10)(Grad3(u)' *Grad3(v));// goes with factor k0
varf a2(u,v)= int3d(Th3,1,5,9)(Grad3(u)' *Grad3(v));// goes with factor kleft
varf a3(u,v)= int3d(Th3,3,7,11)(Grad3(u)' *Grad3(v));// goes with factor kright
varf a4(u,v)= int3d(Th3)( u*v ) ;// goes with factor aa
varf a5(u,v)=int2d(Th3,10,12,14,16,18,110,11,15,19,13,17,111
                          ,30,32,34,36,38,310,31,35,39,33,37,311,
                         40,44,48,41,45,49,20,24,28,23,27,211,199,201
                          ,299,301,399,401,499,501,599,601,699,700,701)
                          (u*v);// goes with factor Bi                                                                                                                               
//
// Right hand side also free from parameter. To be computed once
//
varf b1(unused,v)= int3d(Th3)( fh*v )+int2d(Th3,100)( qh*v ); 
//  Matrices free from parameters out of the variational forms    
//
matrix ma1= a1(Vh,Vh);
matrix ma2= a2(Vh,Vh);
matrix ma3= a3(Vh,Vh);
matrix ma4= a4(Vh,Vh);
matrix ma5= a5(Vh,Vh);
//
// Right hand side vector for problem
// Parameter free 
//
//  Computed once for all
//
Vh RHSunico;
RHSunico[]=b1(0,Vh);
//
// Matrices to gather parameter effects
//
//m1=k0*ma1;
//m2=kleft*ma2;
//m3=kright*ma3;
//m4=aa*ma4;
//m5=Bi*ma5;
//
matrix m1,m2,m3,m4,m5;
//
// Global matrix changes with parameter
//
matrix Aglobal;
//
//Aglobal=m1;
//Aglobal=Aglobal+m2;
//Aglobal=Aglobal+m3;
//Aglobal=Aglobal+m4;
//Aglobal=Aglobal+m5;
 //
// Riesz Representation of RHS  L(v) 
// Parameter independent 
//
include "RieszRepresentation_RHS.idp";
//         
// SET A COLOR SCALE FOR DRAWING PLOTS (gracias Gladys)
//
real[int] colorhsv=[
4./6.,1, 0.5,		//dark blue
4./6., 1, 1,		//blue
0.5,1,1,			//cyan
0.44, 1, 1,		//light green
0.33,1,1,		//green
0.2, 1, 1,		//light yellow
0.15,1,1,		//yellow
0.12,1,1,		//orange
0.09, 1, 1,			//light red
0.027, 1, 1			//red
];	  

 //
// MAXIMUM SIZE OF REDUCED BASIS IS SAMPLES=20
//
int samples=20;
//
// FOR THE MASS MATRICES WITH REDUCED BASIS 
//
//    Ap(usample[i],usample[j]), p=0,1,2,3,4
//
//  Remark: On settingANDproblem.idp I used notation a1,a2,a3,a4,a5
//
real[int,int] A0(samples,samples); //
real[int,int] A1(samples,samples);// 
real[int,int] A2(samples,samples);// 
real[int,int] A3(samples,samples);// 
real[int,int] A4(samples,samples);//  
//
// FOR THE RHS WITH THE REDUCED BASIS
//
real[int] Rrhs(samples); //VECTOR L(usample[i]) (0...9)//
//
real[int] cc(samples); // OUTPUTS
Vh[int] usample(samples); // REDUCE BASIS FUNCTIONS
real[int] mui(samples); // PARAMETERS
int[int] jbest(samples); // INDEX TO EACH PARAMETER
jbest=0;

Click to go back

Page last modified on September 02, 2014, at 07:32 PM