コード例 #1
0
void PaverMinEdgeLengthWrapper::run_wrapper( Mesh* mesh,
                                             ParallelMesh* pmesh,
                                             MeshDomain* domain,
                                             Settings* settings,
                                             QualityAssessor* qa,
                                             MsqError& err )
{
  InstructionQueue q;
 
    // calculate average lambda for mesh
  ReferenceMesh ref_mesh( mesh );
  RefMeshTargetCalculator W_0( &ref_mesh );
  SimpleStats lambda_stats;
  MeshUtil tool(mesh, settings);
  tool.lambda_distribution( lambda_stats, err ); MSQ_ERRRTN(err);
  double lambda = lambda_stats.average();
  
    // create objective function
  IdealShapeTarget W_i;
  LambdaConstant W( lambda, &W_i );
  TShapeSizeB1 tm;
  TQualityMetric mu_0( &W, &tm );
  ElementPMeanP mu( 1.0, &mu_0 );
  PMeanPTemplate of( 1.0, &mu );
  
    // create quality assessor
  EdgeLengthMetric len(0.0);
  qa->add_quality_assessment( &mu );
  qa->add_quality_assessment( &len );
  q.add_quality_assessor( qa, err );
  
    // create solver
  TrustRegion solver( &of );
  TerminationCriterion tc, ptc;
  tc.add_absolute_vertex_movement( maxVtxMovement );
  tc.add_iteration_limit( iterationLimit );
  ptc.add_iteration_limit( pmesh ? parallelIterations : 1 );
  solver.set_inner_termination_criterion( &tc );
  solver.set_outer_termination_criterion( &ptc );
  q.set_master_quality_improver( &solver, err ); MSQ_ERRRTN(err);
  q.add_quality_assessor( qa, err );

  // Optimize mesh
  q.run_common( mesh, pmesh, domain, settings, err ); MSQ_CHKERR(err);  
}
コード例 #2
0
void SizeAdaptShapeWrapper::run_wrapper( MeshDomainAssoc* mesh_and_domain,
                                         ParallelMesh* pmesh,
                                         Settings* settings,
                                         QualityAssessor* qa,
                                         MsqError& err )
{
  InstructionQueue q;
  Mesh* mesh = mesh_and_domain->get_mesh();
 
    // calculate average lambda for mesh
  TagVertexMesh init_mesh( err, mesh );  MSQ_ERRRTN(err);
  ReferenceMesh ref_mesh( &init_mesh );
  RefMeshTargetCalculator W_0( &ref_mesh );
  q.add_tag_vertex_mesh( &init_mesh, err );  MSQ_ERRRTN(err);
  
    // create objective function
  IdealShapeTarget W_i;
  LambdaTarget W( &W_0, &W_i );
  TShapeSizeB1 tm;
  TQualityMetric mu_0( &W, &tm );
  ElementPMeanP mu( 1.0, &mu_0 );
  PMeanPTemplate of( 1.0, &mu );
  
    // create quality assessor
  EdgeLengthMetric len(0.0);
  qa->add_quality_assessment( &mu );
  qa->add_quality_assessment( &len );
  q.add_quality_assessor( qa, err );
  
    // create solver
  TrustRegion solver( &of );
  TerminationCriterion tc, ptc;
  tc.add_absolute_vertex_movement( maxVtxMovement );
  tc.add_iteration_limit( iterationLimit );
  ptc.add_iteration_limit( pmesh ? parallelIterations : 1 );
  solver.set_inner_termination_criterion( &tc );
  solver.set_outer_termination_criterion( &ptc );
  q.set_master_quality_improver( &solver, err ); MSQ_ERRRTN(err);
  q.add_quality_assessor( qa, err );

  // Optimize mesh
  q.run_common( mesh_and_domain, pmesh, settings, err ); MSQ_CHKERR(err);  
}
コード例 #3
0
ファイル: mucalc.cpp プロジェクト: Omer80/wimps
int main(int argc,char** argv)
{
	int err;
	char cdmName[10];
	int spin2, charge3,cdim;

	ForceUG=0;  /* to Force Unitary Gauge assign 1 */
// sysTimeLim=1000; 
/*
	if you would like to work with superIso
	setenv("superIso","./superiso_v3.1",1);  
*/
#ifdef SUGRA
	{
		double m0,mhf,a0,tb;
		double gMG1, gMG2, gMG3,  gAl, gAt, gAb,  sgn, gMHu,  gMHd,
  gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3;
         
  printf("\n========= mSUGRA scenario =====\n");
  PRINTRGE(RGE);

  if(argc<5) 
  { 
	  printf(" This program needs 4 parameters:\n"
			  "   m0      common scalar mass at GUT scale\n"
			  "   mhf     common gaugino mass at GUT scale\n"
			  "   a0      trilinear soft breaking parameter at GUT scale\n"
			  "   tb      tan(beta) \n");
	  printf(" Auxiliary parameters are:\n"
			  "   sgn     +/-1,  sign of Higgsino mass term (default 1)\n"    
			  "   Mtp     top quark pole mass\n"
			  "   MbMb    Mb(Mb) scale independent b-quark mass\n"
			  "   alfSMZ  strong coupling at MZ\n");
	  /*    printf("Example: ./main 70 250 -300 10\n");  */
	  printf("Example: ./main 120 500 -350 10 1 173.1 \n");
	  exit(1); 
  } else  
  {  double Mtp,MbMb,alfSMZ;
  sscanf(argv[1],"%lf",&m0);
  sscanf(argv[2],"%lf",&mhf);
  sscanf(argv[3],"%lf",&a0);
  sscanf(argv[4],"%lf",&tb);
  if(argc>5)sscanf(argv[5],"%lf",&sgn); else sgn=1;
  if(argc>6){ sscanf(argv[6],"%lf",&Mtp);    assignValW("Mtp",Mtp);      }
  if(argc>7){ sscanf(argv[7],"%lf",&MbMb);   assignValW("MbMb",MbMb);    }
  if(argc>8){ sscanf(argv[8],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);}
  }

  /*==== simulation of mSUGRA =====*/
  gMG1=mhf, gMG2=mhf,gMG3=mhf;
  gAl=a0,   gAt=a0,  gAb=a0;  gMHu=m0,  gMHd=m0;
  gMl2=m0,  gMl3=m0, gMr2=m0, gMr3=m0;
  gMq2=m0,  gMq3=m0, gMu2=m0, gMd2=m0, gMu3=m0, gMd3=m0;

  err= SUGRAMODEL(RGE) (tb,  
		  gMG1, gMG2, gMG3,  gAl,  gAt, gAb,  sgn, gMHu, gMHd,
    gMl2, gMl3, gMr2, gMr3, gMq2,  gMq3, gMu2, gMu3, gMd2, gMd3); 
	}
#elif defined(SUGRANUH)
	{
		double m0,mhf,a0,tb;
		double gMG1, gMG2, gMG3,  gAl, gAt, gAb,  gMl2, gMl3, gMr2, gMr3, gMq2, gMq3, gMu2, gMu3, gMd2, gMd3,mu,MA;
         
		printf("\n========= mSUGRA non-universal Higgs scenario =====\n");
		PRINTRGE(RGE);

		if(argc<7) 
		{ 
			printf(" This program needs 6 parameters:\n"
					"   m0      common scalar mass at GUT scale\n"
					"   mhf     common gaugino mass at GUT scale\n"
					"   a0      trilinear soft breaking parameter at GUT scale\n"
					"   tb      tan(beta) \n" 
					"   mu      mu(EWSB)\n"
					"   MA      mass of pseudoscalar Higgs\n");     
			printf(" Auxiliary parameters are:\n"
					"   Mtp     top quark pole mass\n"
					"   MbMb    Mb(Mb) scale independent b-quark mass\n"
					"   alfSMZ  strong coupling at MZ\n");
			/*    printf("Example: ./main 70 250 -300 10\n");  */
			printf("Example: ./main 120 500 -350 10 680 760  \n");
			exit(1); 
		} else  
		{  double Mtp,MbMb,alfSMZ;
		sscanf(argv[1],"%lf",&m0);
		sscanf(argv[2],"%lf",&mhf);
		sscanf(argv[3],"%lf",&a0);
		sscanf(argv[4],"%lf",&tb);
		sscanf(argv[5],"%lf",&mu);
		sscanf(argv[6],"%lf",&MA); 
		if(argc>7){ sscanf(argv[7],"%lf",&Mtp);    assignValW("Mtp",Mtp);      }
		if(argc>8){ sscanf(argv[8],"%lf",&MbMb);   assignValW("MbMb",MbMb);    }
		if(argc>9){ sscanf(argv[9],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);}
		}

		/*==== simulation of mSUGRA =====*/
		gMG1=mhf, gMG2=mhf,gMG3=mhf;
		gAl=a0,   gAt=a0,  gAb=a0;
		gMl2=m0,  gMl3=m0, gMr2=m0, gMr3=m0;
		gMq2=m0,  gMq3=m0, gMu2=m0, gMd2=m0, gMu3=m0, gMd3=m0;

		err= SUGRANUHMODEL(RGE) (tb,gMG1,gMG2,gMG3,gAl,gAt,gAb,gMl2,gMl3,gMr2,gMr3,gMq2,gMq3,gMu2,gMu3,gMd2,gMd3,mu,MA); 
	}
#elif defined(AMSB)
	{
		double m0,m32,sgn,tb;

		printf("\n========= AMSB scenario =====\n");
		PRINTRGE(RGE);
		if(argc<4) 
		{ 
			printf(" This program needs 3 parameters:\n"
					"   m0      common scalar mass at GUT scale\n"
					"   m3/2    gravitino mass\n"
					"   tb      tan(beta) \n");
			printf(" Auxiliary parameters are:\n"
					"   sgn     +/-1,  sign of Higgsino mass term (default 1)\n"    
					"   Mtp     top quark pole mass\n"
					"   MbMb    Mb(Mb) scale independent b-quark mass\n"
					"   alfSMZ  strong coupling at MZ\n");
			printf("Example: ./main 450  60000 10\n");                                                                          
			exit(1); 
		} else  
		{  double Mtp,MbMb,alfSMZ;
		sscanf(argv[1],"%lf",&m0);
		sscanf(argv[2],"%lf",&m32);
		sscanf(argv[3],"%lf",&tb);
		if(argc>4)sscanf(argv[4],"%lf",&sgn); else sgn=1;
		if(argc>5){ sscanf(argv[5],"%lf",&Mtp);    assignValW("Mtp",Mtp);      }
		if(argc>6){ sscanf(argv[6],"%lf",&MbMb);   assignValW("MbMb",MbMb);    }
		if(argc>7){ sscanf(argv[7],"%lf",&alfSMZ); assignValW("alfSMZ",alfSMZ);}
		}

		err= AMSBMODEL(RGE)(m0,m32,tb,sgn);
 
	}
#elif defined(EWSB)
	{ 
		printf("\n========= EWSB scale input =========\n");
		PRINTRGE(RGE);

		if(argc <2) 
		{  printf("The program needs one argument:the name of file with MSSM parameters.\n"
				"Example: ./main mssm1.par \n");
				exit(1);
		}  
   
		printf("Initial file  \"%s\"\n",argv[1]);
     
		err=readVarMSSM(argv[1]);
          
		if(err==-1)     { printf("Can not open the file\n"); exit(2);}
		else if(err>0)  { printf("Wrong file contents at line %d\n",err);exit(3);}

		err=EWSBMODEL(RGE)();
	}
#else
	{
		printf("\n========= SLHA file input =========\n");

		if(argc <2) 
		{  printf("The program needs one argument:the name of SLHA input file.\n"
				"Example: ./main suspect2_lha.out \n");
				exit(1);
		}  
   
		printf("Initial file  \"%s\"\n",argv[1]);
		err=lesHinput(argv[1]);
		if(err) exit(2);
	}
#endif
#ifdef OBTAIN_LSP          
	if(err==-1)     { printf("Can not open the file\n"); exit(2);}
	else if(err>0)  { printf("Wrong file contents at line %d\n",err);exit(3);}
  
	{ int nw;
	printf("Warnings from spectrum calculator:\n");
	nw=slhaWarnings(stdout);
	if(nw==0) printf(" .....none\n");
	} 

	if(err) exit(1);
	err=sortOddParticles(cdmName);
	if(err) { printf("Can't calculate %s\n",cdmName); return 1;}

	qNumbers(cdmName,&spin2, &charge3, &cdim);
	printf("\nDark matter candidate is '%s' with spin=%d/2  mass=%.2E\n",
	       cdmName,       spin2, Mcdm); 
  
	if(charge3) { printf("Dark Matter has electric charge %d/3\n",charge3); exit(1);}
	if(cdim!=1) { printf("Dark Matter is a color particle\n"); exit(1);}
	if(strcmp(cdmName,"~o1")) printf(" ~o1 is not CDM\n"); 
	else o1Contents(stdout);
#endif
#ifdef OBTAIN_CROSS_SECTION
{ 
  int err,i;
  double Emin=1,SMmev=320;/*Energy cut in GeV and solar potential in MV*/
  double  sigmaV;
  double vcs_gz,vcs_gg;
  char txt[100];
  double SpA[NZ],SpE[NZ],SpP[NZ];
  double FluxA[NZ],FluxE[NZ],FluxP[NZ];
  double SpNe[NZ],SpNm[NZ],SpNl[NZ];  
//  double * SpNe=NULL,*SpNm=NULL,*SpNl=NULL;
  double Etest=Mcdm/2;
 
/* default DarkSUSY parameters */

/*
    K_dif=0.036;
    L_dif=4;  
    Delta_dif=0.6; 
    Vc_dif=10;
    Rdisk=30;
    SMmev=320;
*/                        
  
printf("\n==== Indirect detection =======\n");  

  sigmaV=calcSpectrum( 2+4,SpA,SpE,SpP,SpNe,SpNm,SpNl ,&err);
    /* Returns sigma*v in cm^3/sec.     SpX - calculated spectra of annihilation.
       Use SpectdNdE(E, SpX) to calculate energy distribution in  1/GeV units.
       
       First parameter 1-includes W/Z polarization
                       2-includes gammas for 2->2+gamma
                       4-print cross sections             
    */
  printf("sigmav=%.2E[cm^3/s]\n",sigmaV);
  //sigma_v = Sigma_v(sigmaV);

  if(SpA)
  { 
     double fi=0.,dfi=M_PI/180.; /* angle of sight and 1/2 of cone angle in [rad] */ 
                                                   /* dfi corresponds to solid angle 1.E-3sr */                                             
     printf("Photon flux  for angle of sight f=%.2f[rad]\n"
     "and spherical region described by cone with angle %.4f[rad]\n",fi,2*dfi);
     gammaFluxTab(fi,dfi, sigmaV, SpA, FluxA);

#ifdef SHOWPLOTS
     sprintf(txt,"Photon flux for angle of sight %.2f[rad] and cone angle %.2f[rad]",fi,2*dfi);
     displaySpectrum(FluxA,txt,Emin,Mcdm,1);
#endif
     printf("Photon flux = %.2E[cm^2 s GeV]^{-1} for E=%.1f[GeV]\n",SpectdNdE(Etest, FluxA), Etest);       
#ifdef LoopGAMMA
     if(loopGamma(&vcs_gz,&vcs_gg)==0)
     {
         printf("Gamma  ray lines:\n");
         printf("E=%.2E[GeV]  vcs(Z,A)= %.2E[cm^3/s], flux=%.2E[cm^2 s]^{-1}\n",Mcdm-91.19*91.19/4/Mcdm,vcs_gz,
                               gammaFlux(fi,dfi,vcs_gz));  
         printf("E=%.2E[GeV]  vcs(A,A)= %.2E[cm^3/s], flux=%.2E[cm^2 s]^{-1}\n",Mcdm,vcs_gg, 
                             2*gammaFlux(fi,dfi,vcs_gg));
     }
#endif     
  }

  if(SpE)
  { 
    posiFluxTab(Emin, sigmaV, SpE, FluxE);
    if(SMmev>0)  solarModulation(SMmev,0.0005,FluxE,FluxE);    
#ifdef SHOWPLOTS     
    displaySpectrum(FluxE,"positron flux [cm^2 s sr GeV]^{-1}" ,Emin,Mcdm,1);
#endif
    printf("Positron flux  =  %.2E[cm^2 sr s GeV]^{-1} for E=%.1f[GeV] \n",
    SpectdNdE(Etest, FluxE),  Etest); 
  }
  
  if(SpP)
  {
    pbarFluxTab(Emin, sigmaV, SpP,  FluxP); 
    
    if(SMmev>0)  solarModulation(SMmev,1,FluxP,FluxP);     
#ifdef SHOWPLOTS    
     displaySpectrum(FluxP,"antiproton flux [cm^2 s sr GeV]^{-1}" ,Emin,Mcdm,1);
#endif
    printf("Antiproton flux  =  %.2E[cm^2 sr s GeV]^{-1} for E=%.1f[GeV] \n",
    SpectdNdE(Etest, FluxP),  Etest);     
  }
}  
#endif
                             
	
#ifdef CALCULATION_OF_MU
	{
#ifdef 	TAKE_VALUES_FROM_LSP_OF_MICROMEGAS
	{
	mdm = mdm_calc(Mcdm);
	
	}
#endif
	double z = pow(10,5);
	printf("***************** Values used for energy calculation ********************\n");
	printf("H0 - %.2e \n", H0);
	printf("zeq - %.2e \n", zeq);
	printf("Omega_m - %.2e \n", Omega_m);
	printf("Omega_r - %.2e \n", Omega_r);
	printf("Omega_Lambda - %.2e \n", Omega_Lambda);
	printf("Rho_cr - %.2e \n", Rho_cr);
	printf("mdm - %.2e \n", mdm);
	printf("The H_z - is %.2e \n",H(z));
	printf("The ndm_z is %.2e \n",ndm_z(z));
	printf("The sigma_v is %.2e \n",sigma_v);
	printf("The tau is %.2e \n",tau(z));
	printf("*************************************************************************\n");
	double value = dQdz(z) * ( exp(-tau(z))/ H(z));
	printf("For redshift %.2e ", z);
	printf("the energy injection is %.2e \n",value);
	double value_paper = dummy_energy_injection(z)* ( exp (-tau(z))/ H(z));
	printf("While the calculation as in the paper is %.2e \n", value_paper);
	double z_min = 5 * pow(10,4);
	double z_i = 6 * pow(10,6);
	int subdivisions = 1000;
	value = mu_0(z_i, z_min, subdivisions);
	printf("Mu at our time is  %.2e \n", value);
	}
#endif 
	return 0;
}