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); }
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); }
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; }