int main(int argc, char **argv) { char *env = NULL; int i = 0; simulation_data sim; simulation_data_ctor(&sim); #ifdef PARALLEL /* Initialize MPI */ MPI_Init(&argc, &argv); /* Create a new communicator. */ if (MPI_Comm_dup(MPI_COMM_WORLD, &sim.par_comm) != MPI_SUCCESS) sim.par_comm = MPI_COMM_WORLD; MPI_Comm_rank (sim.par_comm, &sim.par_rank); MPI_Comm_size (sim.par_comm, &sim.par_size); #endif /* Initialize environment variables. */ SimulationArguments(argc, argv); #ifdef PARALLEL /* Install callback functions for global communication. */ VisItSetBroadcastIntFunction2(visit_broadcast_int_callback, (void*)&sim); VisItSetBroadcastStringFunction2(visit_broadcast_string_callback, (void*)&sim); /* Tell libsim whether the simulation is parallel. */ VisItSetParallel(sim.par_size > 1); VisItSetParallelRank(sim.par_rank); /* Tell libsim which communicator to use. You must pass the address of * an MPI_Comm object. */ VisItSetMPICommunicator((void *)&sim.par_comm); #endif /* Only read the environment on rank 0. This could happen before MPI_Init if * we are using an MPI that does not like to let us spawn processes but we * would not know our processor rank. */ if(sim.par_rank == 0) env = VisItGetEnvironment(); /* Pass the environment to all other processors collectively. */ VisItSetupEnvironment2(env); if(env != NULL) free(env); for(i = 1; i < argc; ++i) { if(strcmp(argv[i], "-echo") == 0) sim.echo = 1; } /* Write out .sim file that VisIt uses to connect. Only do it * on processor 0. */ /* CHANGE 3 */ if(sim.par_rank == 0) { /* Write out .sim file that VisIt uses to connect. */ VisItInitializeSocketAndDumpSimFile( #ifdef PARALLEL "ucdcurve_par", #else "ucdcurve", #endif "Demonstrates 1D unstructured mesh", "/path/to/where/sim/was/started", NULL, NULL, SimulationFilename()); } /* Read input problem setup, geometry, data.*/ read_input_deck(); /* Call the main loop. */ mainloop(&sim); simulation_data_dtor(&sim); #ifdef PARALLEL MPI_Finalize(); #endif return 0; }
int main(int argc, char **argv) { int i,nx = 50, ny = 50,nz = 50, batch = 0, echo = 0; char *env = NULL; simulation_data sim; #ifdef PARALLEL /* Initialize MPI */ MPI_Init(&argc, &argv); #endif /* Check for command line arguments. */ for(i = 1; i < argc; ++i) { if((i+1) < argc) { if(strcmp(argv[i], "-nx") == 0) { sscanf(argv[i+1], "%d", &nx); i++; } else if(strcmp(argv[i], "-ny") == 0) { sscanf(argv[i+1], "%d", &ny); i++; } else if(strcmp(argv[i], "-nz") == 0) { sscanf(argv[i+1], "%d", &nz); i++; } else if(strcmp(argv[i], "-dir") == 0) { /* Specify the path to VisIt installation. */ VisItSetDirectory(argv[i+1]); i++; } } else if(strcmp(argv[i], "-batch") == 0) { batch = 1; } else if(strcmp(argv[i], "-echo") == 0) { echo = 1; } } /* Initialize environment variables. */ SimulationArguments(argc, argv); simulation_data_ctor(&sim, nx, ny, nz); sim.echo = echo; #ifdef PARALLEL /* Create a new communicator. */ if (MPI_Comm_dup(MPI_COMM_WORLD, &sim.par_comm) != MPI_SUCCESS) sim.par_comm = MPI_COMM_WORLD; MPI_Comm_rank (sim.par_comm, &sim.par_rank); MPI_Comm_size (sim.par_comm, &sim.par_size); /* Install callback functions for global communication. */ VisItSetBroadcastIntFunction2(SimBroadcastInt, (void*)&sim); VisItSetBroadcastStringFunction2(SimBroadcastString, (void*)&sim); /* Tell libsim whether the simulation is parallel. */ VisItSetParallel(sim.par_size > 1); VisItSetParallelRank(sim.par_rank); /* Tell libsim which communicator to use. You must pass the address of * an MPI_Comm object. */ VisItSetMPICommunicator((void *)&sim.par_comm); #endif /* Only read the environment on rank 0. This could happen before MPI_Init if * we are using an MPI that does not like to let us spawn processes but we * would not know our processor rank. */ if(sim.par_rank == 0) env = VisItGetEnvironment(); /* Pass the environment to all other processors collectively. */ VisItSetupEnvironment2(env); if(env != NULL) free(env); /* Call the main loop. */ if(batch) mainloop_batch(&sim); else { if(sim.par_rank == 0) { /* Write out .sim file that VisIt uses to connect. */ VisItInitializeSocketAndDumpSimFile( #ifdef PARALLEL "zerocopy_par", #else "zerocopy", #endif "Demonstrates VariableData setArrayData functions for zero copy", "/path/to/where/sim/was/started", NULL, NULL, SimulationFilename()); } mainloop_interactive(&sim); } if(VisItIsConnected()) VisItDisconnect(); simulation_data_dtor(&sim); #ifdef PARALLEL MPI_Finalize(); #endif return 0; }