aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetLib/src/dh.cc
Commit message (Collapse)AuthorAge
...
* CarpetLib: Rename the dh setup functionsErik Schnetter2006-02-25
| | | | darcs-hash:20060225172723-dae7b-27a2d88ad612cd88b33b83095760a55dd03d2dc4.gz
* CarpetLib: Rename some local variablesErik Schnetter2005-11-19
| | | | | | | Rename some local variables in dh.cc and gdata.cc so that their names don't clash with global variables. darcs-hash:20051119203248-dae7b-c371dfbf1e43fbd95577a17201d7cee45e5c8400.gz
* Carpet*: generalise the comm_state class for collective buffer communicationsThomas Radke2005-08-15
| | | | | | | | | CarpetLib's comm_state class (actually, it's still just a struct) has been extended to handle collective buffer communications for all possible C datatypes at the same time. This makes it unnecessary for the higher-level communication routines to loop over each individual datatype separately. darcs-hash:20050815150023-776a0-dddc1aca7ccaebae872f9f451b2c3595cd951fed.gz
* CarpetLib: Implement fast recomposingErik Schnetter2005-08-11
| | | | | | | | For each refinement level that is to be recomposed, check whether it has the same structure as before, and if so, do nothing. This is controlled by a new flag CarpetLib::fast_recomposing. darcs-hash:20050811120347-891bb-f937c21ddeac7d909cae41d487e9fd74a5ce8cc8.gz
* CarpetLib: Add outer buffer zonesErik Schnetter2005-08-08
| | | | | | | | | | | | | | | | | | | | | Rename the previous buffer zones to "inner buffer zones". Introduce additional "outer buffer zones". Their meaning is the same, except that inner buffer zones are taken from the computational domain, making it smaller, while outer buffer zones are added to the outside, similar to ghost zones. This makes them easier to handle, both internally in Carpet and for the end user. This changes the API of the dh class. There is a new field "is_interproc" in the "dboxes" structure; it specifies whether the whole boundary is an interprocessor boundary. (Note that boundaries can be partly interprocessor and partly refinement boundaries.) Both kinds of buffer zones can exist at the same time, although I would not do that. darcs-hash:20050808200647-891bb-9d9a8eefaf7bcb665d09869a8b564f3769d2ecc2.gz
* CarpetLib: Correct typo in commentErik Schnetter2005-08-08
| | | | darcs-hash:20050808132501-891bb-e03ca26e0adfe32f01065ecae0b987785855190a.gz
* CarpetLib: resolve conflict between collective communication and mem<T>Erik Schnetter2005-04-11
| | | | darcs-hash:20050411203309-891bb-5b74d6135f6cd6995f1eed6cc74dd2f29c42f8a8.gz
* Carpet/CarpetLib: deactivate CarpetLib::minimise_outstanding_communicationsThomas Radke2005-04-11
| | | | | | | | | | | | | | The code to minimise the number of outstanding communication requests is superseded by the collective buffers communication code. Therefore the corresponding parameter has been deactivated (but not removed in order to keep backwards compatibility with older checkpoints). It is marked as deprecated in the param.ccl file and should not be used anymore (use CarpetLib::use_collective_communication_buffers instead). A level-2 warning of that meaning is printed at startup if the parameter is still set in a user's parfile. darcs-hash:20050411155524-776a0-ed9919869cc1f2821ab8b2fa23b4abea203b72ed.gz
* CarpetLib: Resolve conflict after introducing mem<T> classErik Schnetter2005-04-10
| | | | | | | | Resolve the conflict that exists between the patches that introduce the mem<T> class conflicts and the option CarpetLib::use_collective_communication_buffers. darcs-hash:20050410175106-891bb-a66f3783fd8c897d65ed07f55b812e346b406baa.gz
* CarpetLib: Introduce new class mem<T> for memory managementErik Schnetter2005-03-05
| | | | | | | | | | | | | | | | | | | Introduce a new class mem<T> for memory management. Memory management has become sufficiently complicated to move into its own class. The class mem<T> features: 1. Allocating nelem items of type T 2. Managing contiguous regions of memory for several data<T> objects for vector groups 3. Allowing a pointer to a memory region to be passed in, which is used instead of allocating memory through new 4. Reference counting, so that the mem<T> object only goes away once the last using data<T> object does not need it any more. This makes it unnecessary to delete the first data<T> objects for a grid function group last. darcs-hash:20050305174647-891bb-e1f53adca34e5a668af96c662845cca0f259f8e6.gz
* CarpetLib, Carpet: implement and use collective communication buffersThomas Radke2005-03-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Collective buffers are used to gather all components' data on a processor before it gets send off to other processors in one go. This minimizes the number of outstanding MPI communications down to O(N-1) and thus improves overall efficiency as benchmarks show. Each processor allocates a pair of single send/recv buffers to communicate with all other processors. For this the class (actually, the struct) comm_state was extended by 3 more states: state_get_buffer_sizes: accumulates the sizes for the send/recv buffers state_fill_send_buffers: gathers all the data into the send buffers state_empty_recv_buffers: copies the data from the recv buffer back into the processor's components Send/recv buffers are exchanged during state_fill_send_buffers and state_empty_recv_buffers. The constructor for a comm_state struct now takes an argument <datatype> which denotes the CCTK datatype to use for the attached collective buffers. If a negative value is passed here then it falls back to using the old send/recv/wait communication scheme. The datatype argument has a default value of -1 to maintain backwards compatibility to existing code (which therefore will keep using the old scheme). The new communication scheme is chosen by setting the parameter CarpetLib::use_collective_communication_buffers to "yes". It defaults to "no" meaning that the old send/recv/wait scheme is still used. So far all the comm_state objects in the higher-level routines in thorn Carpet (restriction/prolongation, regridding, synchronization) have been enabled to use collective communication buffers. Other thorns (CarpetInterp, CarpetIO*, CarpetSlab) will follow in separate commits. darcs-hash:20050330152811-776a0-51f426887fea099d1a67b42bd79e4f786979ba91.gz
* Carpet/CarpetLib: minimise the number of outstanding communication requeststradke2005-03-11
| | | | | | | | | | | | | | | | | | | | | | | This patch greatly reduces the number of outstanding MPI_Isend/MPI_Irecv communication requests by moving the loop over comm_states (recv,send,wait) from the outermost to the innermost. This resolves problems with certain MPI implementations (specifically LAM, MPICH-NCSA, and Mvapich over Infiniband) which potentially resulted in some communication buffer overflow and caused the Cactus application to abort or hang forever. Preliminary benchmarks with BSSN_MoL show that the patch does not have a negative impact on myrinet clusters (measured to 64 processors). It even improves the Carpet performance on GigE clusters (measured up to 16 processors). The order of the communication loops is controlled by the boolean parameter CarpetRegrid::minimise_outstanding_communications which defaults to "no" (preserving the old behaviour). darcs-hash:20050311160040-3fd61-04d40ac79ef218252f9364a8d18796e9b270d295.gz
* Reverse iterator orderIan Hawke2005-02-09
| | | | | | | Reverse the order that variables are destroyed when refinement levels are removed. This ensures that vector GFs are treated correctly. darcs-hash:20050209173129-58c7f-c2507b49252fe45782dd06803201ef1cff74f889.gz
* CarpetLib: Whitespace changeErik Schnetter2005-02-01
| | | | darcs-hash:20050201231759-891bb-db87543a706110d2cd819a7f38c1e67cf27e16a3.gz
* global: Change the way in which the grid hierarchy is storedErik Schnetter2005-02-01
| | | | | | | | | | | | | | | | | | | | Change the way in which the grid hierarchy is stored. The new hierarchy is map mglevel reflevel component timelevel i.e., mglevel moved from the bottom to almost the top. This is because mglevel used to be a true multigrid level, but is now meant to be a convergence level. Do not allocate all storage all the time. Allow storage to be switched on an off per refinement level (and for a single mglevel, which prompted the change above). Handle storage management with CCTK_{In,De}creaseGroupStorage instead of CCTK_{En,Dis}ableGroupStorage. darcs-hash:20050201225827-891bb-eae3b6bd092ae8d6b5e49be84c6f09f0e882933e.gz
* CarpetLib: Add more checks to dh classErik Schnetter2005-01-02
| | | | darcs-hash:20050102173453-891bb-833515dd47ce1469ebe319718ab169e5eb82c6c4.gz
* CarpetLib: Rename some variables to avoid shadowing class membersErik Schnetter2005-01-01
| | | | darcs-hash:20050101191615-891bb-20b262ff1a4468d5e1c5ac8626a3ead0727c2da9.gz
* global: Turn CarpetLib templates into classesErik Schnetter2005-01-01
| | | | | | | | | | | | | | | | | | | Turn most of the templates in CarpetLib, which used to have the form template<int D> class XXX into classes, i.e., into something like class XXX by setting D to the new global integer constant dim, which in turn is set to 3. The templates gf and data, which used to be of the form template<typename T, int D> class XXX are now of the form template<typename T> class XXX The templates vect, bbox, and bboxset remain templates. This change simplifies the code somewhat. darcs-hash:20050101182234-891bb-c3063528841f0d078b12cc506309ea27d8ce730d.gz
* global: Replace "&&" and "||" by "and" and "or"Erik Schnetter2005-02-01
| | | | darcs-hash:20050201214347-891bb-286c20316478d9f1c8384f94764174cab5adb9e0.gz
* global: Remove $Header$ keywords from Carpet arrangementErik Schnetter2005-01-01
| | | | darcs-hash:20050101162121-891bb-ac9d070faecc19f91b4b57389d3507bfc6c6e5ee.gz
* CarpetLib: Use new style instead of old style C++ headersErik Schnetter2004-12-25
| | | | | | That is, say e.g. <cmath> instead of <math.h>. darcs-hash:20041225182902-891bb-2a4502d6a76ed830ab978030fc4e4765b183509f.gz
* CarpetLib:gh exposed data clamp-downswhite2004-12-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | Made all variables in CarpetLib:gh to be const or non-public, to avoid confusion and insanity. Toward this end, created four member accessors for gh: const rexts & extents() const const rbnds & outer_boundaries() const const rprocs & processors() const const vector<vector<ibbox> > & bases() const This involved a few changes in several files throughout the repository: M ./Carpet/Carpet/src/Initialise.cc -2 +2 M ./Carpet/Carpet/src/Recompose.cc -8 +8 M ./Carpet/Carpet/src/SetupGH.cc -2 +2 M ./Carpet/Carpet/src/modes.cc -3 +3 M ./Carpet/CarpetIOHDF5/src/Recover.cc -4 +4 M ./Carpet/CarpetInterp/src/interp.cc -5 +5 M ./Carpet/CarpetLib/src/dh.cc -3 +3 M ./Carpet/CarpetLib/src/gh.cc -33 +33 M ./Carpet/CarpetLib/src/gh.hh -10 +28 M ./Carpet/CarpetReduce/src/mask_carpet.cc -4 +4 M ./Carpet/CarpetRegrid/src/automatic.cc -2 +2 darcs-hash:20041210131459-32473-ff0835ff0e57f6693fbe1ec23b350d1b1d18e3bc.gz
* dh_tidyswhite2004-11-23
| | | | | | | | Fixed indentation Made order of function declarations more like the order they are called in. darcs-hash:20041123182640-32473-a83a83ad132b847bf8b219686e9c88ad277f411c.gz
* dh_decompose_fixswhite2004-11-23
| | | | | | Fixed a crashing bug. Je suis d[_\e9_]sol[_\e9_]. darcs-hash:20041123164102-32473-7746f9871f6e2f58f84825b8eb38416c622f5cb9.gz
* dh_decomposeswhite2004-11-22
| | | | | | | | | | | | | | | | | | | | | | | | | Broke up dh<D>::recompose( bool ) into bite-sized chunks. Made use of member function pointers to cut down as many as three levels of blocks. See 'foreach_reflevel_component_mglevel'. Advantages: 1) the code of the main function 'recompose' now presents an outline of its functionality, rather than a post-ice-age deluge. 2) component functions are named according to some comment found in the code. For those who want to minimise comments. 3) most of the functions conform to my "rule of thumb" (comprehensible chunks of code are no longer than my thumb) 4) nesting substantially reduced (The functions that still have more than 5 levels of nested blocks are mostly those that are also unthumbworthy. More room on the screen, but still room for improvement.) darcs-hash:20041122173415-32473-616506e73f5c93be610bc773adaa7867663cb726.gz
* Remove CVS header tagsErik Schnetter2004-09-18
| | | | | | Replace all CVS header tags with the standard "$Header:$". darcs-hash:20040918132147-891bb-dea889bdd94a479ec412d14d08e9efca63e5c24d.gz
* Recompose vector groups on multiple refinement levels correctly.schnetter2004-09-17
| | | | darcs-hash:20040917143726-07bb3-cdfed6bde9278cc33ad4ad0a04ed13d6a700b65d.gz
* Re-introduce the parameter Carpet::prolongate_initial_data with theschnetter2004-08-07
| | | | | | | | | | | Re-introduce the parameter Carpet::prolongate_initial_data with the default "yes". If set to "no", newly created refinement levels are not initialised through prolongation, which saves quite some time. Remove the unused optional argument checkpoing_recovery from Carpet::Regrid. darcs-hash:20040807174712-07bb3-78054ad80959a2e26238531d9ea54eaac161ffce.gz
* Free vector groups leaders only after the other vector elements haveschnetter2004-06-08
| | | | | | | Free vector groups leaders only after the other vector elements have been freed. darcs-hash:20040608205801-07bb3-96319f89460b351b1d058548e2a2cba6455ea1d0.gz
* Add option to use less memory during regridding.schnetter2004-05-21
| | | | | | | | | Add option to use less memory during regridding. Some more internal consistency checks. Some reformatting. darcs-hash:20040521161341-07bb3-de11e460fb175d3dbbd94708730c18a6e94e370a.gz
* Ensure that vector leaders are handled consistentlyschnetter2004-04-22
| | | | darcs-hash:20040422121713-07bb3-1ef5a3ac1752f5f05d3e010bf9390bc6cff7ea79.gz
* Regrid all grid functions at once. This is necessary to treate vectorschnetter2004-04-19
| | | | | | | | | | Regrid all grid functions at once. This is necessary to treate vector grid functions correctly, where otherwise storage would be released too early. This requires the regridding interface between the dh and ggf classes to change. Another advantage is that this should now be faster on multiple processors. darcs-hash:20040419193833-07bb3-f7474744feaa57f8a1621aeca34de11b65eaeed8.gz
* Remove the parameters Carpet::prolongate_initial_data; this is nowschnetter2004-04-18
| | | | | | | | | | | | Remove the parameters Carpet::prolongate_initial_data; this is now always done. Remove arguments initialise_from and do_prolongate from Regrid(). Regridding is now done in level mode instead of meta mode. Furthermore, CarpetRegrid is called in singlemape mode. darcs-hash:20040418112943-07bb3-2e392df1737ab75f3f0d553bb53bde2ed41f8773.gz
* Comment out self-consistency check that might be too eagerschnetter2004-04-07
| | | | darcs-hash:20040407145642-07bb3-3913deeb11dfa6fea78c757539425b36e87886bf.gz
* Fix bug in calculating the boundary prolongation zones on multipleschnetter2004-03-23
| | | | | | | Fix bug in calculating the boundary prolongation zones on multiple processors. darcs-hash:20040323165600-07bb3-7dff25fdd6fe4a0a3ad350df8c0aa085799ca5d4.gz
* Import the recently announced changes:schnetter2004-01-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Import the recently announced changes: 1. Carpet has now an infrastructure for multiple maps (aka "grid patches"). Instead of a single grid hierarchy there can now be several. This is largely untested, because the remainder of Cactus cannot handle multiple coordinate systems. 2. The order in which the schedule bins are called has changed. As Ian Hawke pointed out, the previous order during time evolution was inconsistent. The initial data ordering did not allow for recovering and was not usable for progressively solving elliptic equations for initial data. 3. Carpet now supports convergence levels. The convergence level specifies by how many factors of two the resolution in the parameter file should be coarsened (or refined, if negative). This should make convergence tests and test runs much easier. It is, in principle, also possible to run several convergence levels at once. This has not been tested because the remainder of Cactus cannot handle multiple resolutions. This will be necessary for a multigrid solver, and also for having a shadow hierarchy to determine where to refine adaptively. 4. Carpet works together with the new CoordBase domain specification parameters. Without these, using convergence levels will lead to very strange results. 5. The "modes" have changed. There are now: meta mode: the whole simulation global mode: one convergence level level mode: one refinement level singlemap mode: one map on one refinement level local mode: as previously The whole mode handling has been cleaned up. 6. The regridding thorn has been cleaned up. 7. The kind of prolongation stencil is now determined in Carpet, i.e. at a fairly hight level, instead of in CarpetLib. 8. The low-order prolongation operators have been made much more efficient (as have previously the higher-order ones). 9. Assorted smaller changes. For Carpet users, there should be no major incompatibilities. The major improvements are 3 and 4 combined. Here is an example: CoordBase::domainsize = extent CoordBase::spacing = gridspacing CoordBase::zero_origin_x = yes CoordBase::zero_origin_y = yes CoordBase::zero_origin_z = yes CoordBase::xextent = 20.0 CoordBase::yextent = 20.0 CoordBase::zextent = 20.0 CoordBase::dx = 1.0 CoordBase::dy = 1.0 CoordBase::dz = 1.0 CoordBase::boundary_shiftout_x_lower = 1 CoordBase::boundary_shiftout_y_lower = 1 CoordBase::boundary_shiftout_z_lower = 1 Carpet::domain_from_coordbase = yes Carpet::convergence_level = 0 grid::type = coordbase grid::domain = octant grid::avoid_origin = no This gives you a grid that extends from the origin ("zero_origin") up to 20.0 with a grid spacing of 1.0. Symmetry zones and boundary zones are added automatically. The "shiftout" says that there is no boundary point on the origin. The staggering parameters (not shown) default to "no". In order to change the resolution, only the convergence level has to be adjusted. Note that the old way of specifying the domain extent still works. For Carpet developers, one major change is the new mode handling. As described in 5, the looping macros (that loop over all refinement levels, or all components) have changed. darcs-hash:20040125135727-07bb3-51c9647c1b5080e7e180b52a1b81fa155cfd19e9.gz
* Fix another (maybe) bug in calculating the prolongation regions.schnetter2004-01-21
| | | | darcs-hash:20040121132535-07bb3-8221de1d3146f586eb13b0fe3acb12836b06efd5.gz
* Use .at() instead of [] to access vectors.schnetter2004-01-20
| | | | | | | | Use .at() instead of [] to access vectors. Fix a bug in the calculation of the restriction regions. Remove unused code. darcs-hash:20040120122505-07bb3-4e4c8c59f712ebe671d261ef1bea3640ab077ada.gz
* While restricting, don't assume that there are buffer zones atschnetter2004-01-16
| | | | | | | While restricting, don't assume that there are buffer zones at interprocessor boundaries. darcs-hash:20040116163644-07bb3-7eef930c1b8bb461228d194dcb9ecddd5534d9ad.gz
* Many changes that accumulated while Cactus and Carpet diverged.schnetter2003-11-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Many changes that accumulated while Cactus and Carpet diverged. Add processor splitting mechanism "along-dir" that splits along a specified direction. Rename group PostRestrict to bin POSTRESTRICT. Prolongate initial data only when desired. This saves much time. Sorry, Ian. Fix bug in time level cycling of grid arrays. (Note: grid arrays should not have time levels.) Fix time_t bug on IRIX. Make sure that there is no integer overflow when there are many refinement levels. Always put parentheses around (maxreflevelfact/reflevelfact). Fix typo in Carpet verbose output. Add debug output in processor splitting. Communicate in three stages: Irecv, (work), Isend, Wait. This might be more efficient. Much more, potentially. Fix bug in processor layout of grid arrays. Sorry, Ian. Make the interpolator interpolate between time levels. Untested. Fix bug in processor communication in interpolator. Sorry, Ian. Rewrite prolongation operators to make them twice as fast. There you are, Ian. Move prolongation operator kind handling from data to gdata. Add official hyperslabbing interfaces to CarpetSlab. Adapt to new cGH * handling. darcs-hash:20031105151837-07bb3-758a87ff0355dba053269df4b7d7d79bea018669.gz
* Fix bug in automatic domain decomposition.schnetter2003-10-16
| | | | darcs-hash:20031016150004-07bb3-9c843c9710adcce8d2b3243b0c02b798d83bab59.gz
* bbox::size() and bboxset::size() return the number of grid points, notschnetter2003-09-19
| | | | | | | | | bbox::size() and bboxset::size() return the number of grid points, not the product of the shape. This makes larger grids possible. Mark necessary future changes for vector grid functions with VGF. darcs-hash:20030919140641-07bb3-94c1897464dcc159725618d611ac28f3f75a3011.gz
* Reformat source code more nicely.schnetter2003-07-23
| | | | darcs-hash:20030723123144-07bb3-a0618075e3de075e10c86a0b244fec87b052a919.gz
* Fix the casing of the postrestrict group to PostRestrict. Update allschnetter2003-07-20
| | | | | | | | | | | | | Fix the casing of the postrestrict group to PostRestrict. Update all schedule.ccl files accordingly. Introduce a Carpet parameter buffer_width. This parameter specifies a region within refined grids that is also boundary-prolongated. Introduce a function CarpetEnableProlongation to dis- and re-enable boundary prolongation. darcs-hash:20030720190343-07bb3-0c5db5cebe769c0d4b3237f11a089aab9da94b1a.gz
* Fix uninitialised variables in vector functions.schnetter2003-07-17
| | | | darcs-hash:20030717134028-07bb3-e4bead1009c4fa048004145ccb0c302f395d3d1d.gz
* Don't put a buffer zone at outer boundaries of refined grids.schnetter2003-07-17
| | | | darcs-hash:20030717102405-07bb3-14d73938a57d6ba625cbd2a90bad5ca3905472f5.gz
* Introduce a buffer zone between the prolongation destination andschnetter2003-07-16
| | | | | | | | Introduce a buffer zone between the prolongation destination and restriction source grid points. Set its width to 2 by default. This seems to be necessary for second order convergence. darcs-hash:20030716194558-07bb3-d34ffc034cb54e4dcce2e2be2bd378184a79304e.gz
* Declare some more routines as taking a const cGH *, to match theschnetter2003-07-14
| | | | | | | Declare some more routines as taking a const cGH *, to match the recent changes in the flesh. darcs-hash:20030714134134-07bb3-6c0078627d40a9d05320632feba2277afdd33bdf.gz
* Don't insert empty bboxes into the bbox lists for the transfer descriptions.schnetter2003-05-23
| | | | darcs-hash:20030523215231-07bb3-7eb2acb8636c41c453126b55d3833abd8457184a.gz
* Handle empty grids.schnetter2003-05-13
| | | | | | | | | | Handle empty grids. Fix global and level mode handling of the interpolator. Allow local mode calls for the interpolator, reduction operator, and hyperslabber, assuming that people know what they are doing. darcs-hash:20030513101400-07bb3-42af7544c2ea98dbef5a7ad6d5112bea2dcc404f.gz