Exemplo n.º 1
0
void MonolithicBlockComposed::coupler( mapPtr_Type& map,
                                       const std::map<ID, ID>& locDofMap,
                                       const vectorPtr_Type& numerationInterface,
                                       const Real& timeStep,
                                       const Real& coefficient,
                                       const Real& rescaleFactor,
                                       UInt couplingBlock)
{
    matrixPtr_Type coupling(new matrix_Type(*map));
    couplingMatrix( coupling,  (*M_couplingFlags)[couplingBlock], M_FESpace, M_offset, locDofMap, numerationInterface, timeStep, 1., coefficient, rescaleFactor);
    UInt totalDofs( map->map(Unique)->NumGlobalElements() );

    coupling->insertValueDiagonal( 1., 0 , M_offset[couplingBlock] );
    coupling->insertValueDiagonal( 1., M_offset[couplingBlock]+M_FESpace[couplingBlock]->map().map(Unique)->NumGlobalElements(), totalDofs );

    if(couplingBlock != M_coupling.size()+1)
    {
        M_coupling.insert(M_coupling.begin()+couplingBlock, coupling);
    }
    else
        M_coupling.push_back(coupling);
}
void MonolithicBlockComposedDN::coupler (mapPtr_Type& map,
                                         const std::map<ID, ID>& locDofMap,
                                         const vectorPtr_Type& numerationInterface,
                                         const Real& timeStep,
                                         const Real& coefficient,
                                         const Real& rescaleFactor)
{
    UInt totalDofs ( map->map (Unique)->NumGlobalElements() );
    UInt solidAndFluid (M_offset[solid] + M_FESpace[solid]->map().map (Unique)->NumGlobalElements() );

    matrixPtr_Type coupling (new matrix_Type (*map) );
    couplingMatrix ( coupling,  (*M_couplingFlags) [solid], M_FESpace, M_offset, locDofMap, numerationInterface, timeStep, 1., coefficient, rescaleFactor);
    coupling->insertValueDiagonal ( 1., M_offset[fluid], M_offset[solid] );
    coupling->insertValueDiagonal ( 1., solidAndFluid, totalDofs );
    M_coupling.push_back (coupling);

    coupling.reset (new matrix_Type (*map) );
    couplingMatrix ( coupling,  (*M_couplingFlags) [fluid], M_FESpace, M_offset, locDofMap, numerationInterface, timeStep, 1., coefficient, rescaleFactor);
    coupling->insertValueDiagonal ( 1. , M_offset[solid], solidAndFluid );
    coupling->insertValueDiagonal ( 1. , solidAndFluid + nDimensions * numerationInterface->map().map (Unique)->NumGlobalElements(), totalDofs );
    M_coupling.push_back (coupling);

}
Exemplo n.º 3
0
static
void computeDerivatives(double t,double y[],double f[] ) {

	int myRank,tasks;
	MPI_Comm_rank(MPI_COMM_WORLD,&myRank);
	MPI_Comm_size(MPI_COMM_WORLD,&tasks);


	int
		NO_Path=0,
		cGMP_Path=0;


	tsoukias_smc_multicell(myRank, tasks,NO_Path,cGMP_Path);

	koenigsberger_ec_multicell(myRank,tasks);

	coupling(myRank,tasks);

	SMC_derivatives(f);

	EC_derivatives(myRank,tasks,f,t);

}
Exemplo n.º 4
0
int main(int argc, char *argv[])  {
int meascount,todo;
int prompt;
double dssplaq,dstplaq,ds_deta,bd_plaq;
double dtime;

initialize_machine(&argc,&argv);

  /* Remap standard I/O */
  if(remap_stdio_from_args(argc, argv) == 1)terminate(1);

 g_sync();
    /* set up */
    prompt = setup();

    /* loop over input sets */
    while( readin(prompt) == 0){

	/* perform warmup trajectories */
	dtime = -dclock();
 
	for(todo=warms; todo > 0; --todo ){
	    update();
	}
	if(this_node==0)printf("WARMUPS COMPLETED\n");

	/* perform measuring trajectories, reunitarizing and measuring  */
	meascount=0;            /* number of measurements               */
	ds_deta = 0.0;
	bd_plaq = 0.0;
	for(todo=trajecs; todo > 0; --todo ){ 

	    /* do the trajectories */
	    update();

	    /* measure every "propinterval" trajectories */
	    if((todo%propinterval) == 0){
            
		/* call plaquette measuring process */
		d_plaquette(&dssplaq,&dstplaq);

		/* call the coupling measuring process */
		if(bc_flag > 0){
		    coupling(&ds_deta,&bd_plaq);
		}
		++meascount;
		if(this_node==0)printf("GMES %e %e %e %e %e\n",
		    ds_deta,bd_plaq,99.9,dssplaq,dstplaq);
		/* dS/deta bd_plaq dummy ss_plaq st_plaq */

		fflush(stdout);
	    }
	}       /* end loop over trajectories */

	if(this_node==0)printf("RUNNING COMPLETED\n");

	dtime += dclock();
	if(this_node==0){
	    printf("Time = %e seconds\n",dtime);
	}
	fflush(stdout);
	dtime = -dclock();

	/* save lattice if requested */
	if( saveflag != FORGET ){
	  save_lattice( saveflag, savefile, stringLFN );
	}
    }
    return 0;
}