From schnetter at cct.lsu.edu Wed Sep 5 10:04:22 2007 From: schnetter at cct.lsu.edu (Erik Schnetter) Date: Wed, 5 Sep 2007 10:04:22 -0500 Subject: [Developers] Fwd: [CactusMaint] CactusBase/2090: Patch: Provide number of integration substeps In-Reply-To: <46D3F9BD.9010808@soton.ac.uk> References: <200705240319.l4O3JxgX025086@cactus.cct.lsu.edu> <8F4C2356-92CF-4C08-8D5B-F113612129C3@cct.lsu.edu> <435AF30E-D35B-4008-AB48-A5347CB07D18@cct.lsu.edu> <46D2976E.30006@aei.mpg.de> <46D3F9BD.9010808@soton.ac.uk> Message-ID: <99ADF7E1-E390-4E2A-A6AC-1904C655808F@cct.lsu.edu> On Aug 28, 2007, at 05:32:29, I.Hawke wrote: > Thomas Radke wrote: >> Erik Schnetter wrote: >> >>> Ian or Thomas, do you want to have a look at this function? It >>> should >>> be obviously correct, and once it is there, it is not necessary >>> to set >>> the corresponding parameter in Carpet manually. >>> >> >> Looks good to me. Just a very minor thing: I would remove the grdoc >> headers which don't contain any information. >> >> > I agree. My only thought is if you want to pass the GH through; if > (when) multi-models comes in, it may be the case that different time > integrators are required for different models, and I assume that info > would be stored on the GH. None of the other MoL functions take a GH. If you have different models, you would certainly have different variables in these models. -erik -- Erik Schnetter My email is as private as my paper mail. I therefore support encrypting and signing email messages. Get my PGP key from www.keyserver.net. -------------- next part -------------- A non-text attachment was scrubbed... Name: PGP.sig Type: application/pgp-signature Size: 186 bytes Desc: This is a digitally signed message part Url : http://www.cactuscode.org/pipermail/developers/attachments/20070905/8eb00e2c/attachment.bin From i.hawke at soton.ac.uk Wed Sep 5 10:25:42 2007 From: i.hawke at soton.ac.uk (I.Hawke) Date: Wed, 05 Sep 2007 16:25:42 +0100 Subject: [Developers] Fwd: [CactusMaint] CactusBase/2090: Patch: Provide number of integration substeps In-Reply-To: <99ADF7E1-E390-4E2A-A6AC-1904C655808F@cct.lsu.edu> References: <200705240319.l4O3JxgX025086@cactus.cct.lsu.edu> <8F4C2356-92CF-4C08-8D5B-F113612129C3@cct.lsu.edu> <435AF30E-D35B-4008-AB48-A5347CB07D18@cct.lsu.edu> <46D2976E.30006@aei.mpg.de> <46D3F9BD.9010808@soton.ac.uk> <99ADF7E1-E390-4E2A-A6AC-1904C655808F@cct.lsu.edu> Message-ID: <46DECA76.4010008@soton.ac.uk> Erik Schnetter wrote: > On Aug 28, 2007, at 05:32:29, I.Hawke wrote: > >>> >> I agree. My only thought is if you want to pass the GH through; if >> (when) multi-models comes in, it may be the case that different time >> integrators are required for different models, and I assume that info >> would be stored on the GH. > > None of the other MoL functions take a GH. If you have different > models, you would certainly have different variables in these models. True. In fact on second thoughts extending MoL to multimodels will require quite a bit more work than just the public functions, so scratch my thought. Ian From yosef at astro.rit.edu Fri Sep 7 06:36:13 2007 From: yosef at astro.rit.edu (Yosef Zlochower) Date: Fri, 07 Sep 2007 07:36:13 -0400 Subject: [Developers] MoL Scheduling Message-ID: <46E137AD.2070405@astro.rit.edu> Hi, I think that two MoL routines ( MoL_RestoreSandR,MoL_FinishLoop) are schedules incorrectly. These routines are scheduled "IN MoL_Evolution AFTER MoL_PostStep", but MoL_PostStep is not scheduled in MoL_Evolution, it is in the subgroup MoL_Step. Should this rather be "IN MoL_Evolution AFTER MoL_Step" I tried to schedule one of my routines after MoL_FinishLoop, and the result was that MoL_FinishLoop got scheduled before MoL_Step. Yosef From i.hawke at soton.ac.uk Fri Sep 7 09:07:15 2007 From: i.hawke at soton.ac.uk (I.Hawke) Date: Fri, 07 Sep 2007 15:07:15 +0100 Subject: [Developers] MoL Scheduling In-Reply-To: <46E137AD.2070405@astro.rit.edu> References: <46E137AD.2070405@astro.rit.edu> Message-ID: <46E15B13.9070906@soton.ac.uk> Yosef Zlochower wrote: > I think that two MoL routines ( MoL_RestoreSandR,MoL_FinishLoop) > are schedules incorrectly. > These routines are scheduled > "IN MoL_Evolution AFTER MoL_PostStep", > but MoL_PostStep is not scheduled in MoL_Evolution, > it is in the subgroup MoL_Step. Should this rather be > "IN MoL_Evolution AFTER MoL_Step" > > I tried to schedule one of my routines after MoL_FinishLoop, > and the result was that MoL_FinishLoop got scheduled before MoL_Step. > I had always assumed that if B is scheduled in A and C is scheduled after B, then C would implicitly be scheduled after A (in the case where it is not explicitly scheduled in A). I cannot remember if the precise statement is meant to explicitly give the reason for the schedule dependency or is just historical. Tom, does the sorter not recognize this case? Ian From goodale at cct.lsu.edu Fri Sep 7 09:24:52 2007 From: goodale at cct.lsu.edu (Tom Goodale) Date: Fri, 7 Sep 2007 15:24:52 +0100 (BST) Subject: [Developers] MoL Scheduling In-Reply-To: <46E15B13.9070906@soton.ac.uk> References: <46E137AD.2070405@astro.rit.edu> <46E15B13.9070906@soton.ac.uk> Message-ID: On Fri, 7 Sep 2007, I.Hawke wrote: > Yosef Zlochower wrote: >> I think that two MoL routines ( MoL_RestoreSandR,MoL_FinishLoop) >> are schedules incorrectly. >> These routines are scheduled >> "IN MoL_Evolution AFTER MoL_PostStep", >> but MoL_PostStep is not scheduled in MoL_Evolution, >> it is in the subgroup MoL_Step. Should this rather be >> "IN MoL_Evolution AFTER MoL_Step" >> >> I tried to schedule one of my routines after MoL_FinishLoop, >> and the result was that MoL_FinishLoop got scheduled before MoL_Step. >> > > I had always assumed that if B is scheduled in A and C is scheduled > after B, then C would implicitly be scheduled after A (in the case where > it is not explicitly scheduled in A). I cannot remember if the precise > statement is meant to explicitly give the reason for the schedule > dependency or is just historical. Tom, does the sorter not recognize > this case? Scheduling statements are only considered relative to things within the same schedule group/bin, i.e. in your example above you have to explicitly schedule C in A --- without that the scheduler just looks in the current group, sees there is no B there and ignores the AFTER. Cheers, Tom From i.hawke at soton.ac.uk Fri Sep 7 09:52:11 2007 From: i.hawke at soton.ac.uk (I.Hawke) Date: Fri, 07 Sep 2007 15:52:11 +0100 Subject: [Developers] MoL Scheduling In-Reply-To: References: <46E137AD.2070405@astro.rit.edu> <46E15B13.9070906@soton.ac.uk> Message-ID: <46E1659B.4030004@soton.ac.uk> Tom Goodale wrote: > On Fri, 7 Sep 2007, I.Hawke wrote: > > > Scheduling statements are only considered relative to things within the > same schedule group/bin, i.e. in your example above you have to explicitly > schedule C in A --- without that the scheduler just looks in the current > group, sees there is no B there and ignores the AFTER. > Ok, that means it is an error; I have committed a fix. Ian From frank.loeffler at aei.mpg.de Tue Sep 11 03:09:33 2007 From: frank.loeffler at aei.mpg.de (Frank Loeffler) Date: Tue, 11 Sep 2007 10:09:33 +0200 Subject: [Developers] ADMMacros, C version fixes Message-ID: <20070911080933.GN2275@peterpan.ap.op.sissa.it> Hi, this patch fixes some compile problems with the C version of the macros. Obviously nobody used this code before. Now at least it compiles. Frank From frank.loeffler at aei.mpg.de Tue Sep 11 03:10:20 2007 From: frank.loeffler at aei.mpg.de (Frank Loeffler) Date: Tue, 11 Sep 2007 10:10:20 +0200 Subject: [Developers] ADMMacros, C version fixes Message-ID: <20070911081020.GO2275@peterpan.ap.op.sissa.it> Hi, this patch fixes some compile problems with the C version of the macros. Obviously nobody used this code before. Now at least it compiles. Frank Index: src/macro/CDXCDK_guts.h =================================================================== RCS file: /cactusdevcvs/CactusEinstein/ADMMacros/src/macro/CDXCDK_guts.h,v retrieving revision 1.4 diff -r1.4 CDXCDK_guts.h 40c40 < CDXCDK_CDXCDKXX = DXDK_DXDKXX - 2D0*(CHR2_XXX*CDXCDK_KXX --- > CDXCDK_CDXCDKXX = DXDK_DXDKXX - 2.*(CHR2_XXX*CDXCDK_KXX 42c42 < CDXCDK_CDXCDKYY = DXDK_DXDKYY - 2D0*(CHR2_XXY*CDXCDK_KXY --- > CDXCDK_CDXCDKYY = DXDK_DXDKYY - 2.*(CHR2_XXY*CDXCDK_KXY 44c44 < CDXCDK_CDXCDKZZ = DXDK_DXDKZZ - 2D0*(CHR2_XXZ*CDXCDK_KXZ --- > CDXCDK_CDXCDKZZ = DXDK_DXDKZZ - 2.*(CHR2_XXZ*CDXCDK_KXZ Index: src/macro/CDYCDK_guts.h =================================================================== RCS file: /cactusdevcvs/CactusEinstein/ADMMacros/src/macro/CDYCDK_guts.h,v retrieving revision 1.4 diff -r1.4 CDYCDK_guts.h 44c44 < CDYCDK_CDYCDKXX = DYDK_DYDKXX - 2D0*(CHR2_XXY*CDYCDK_KXX + --- > CDYCDK_CDYCDKXX = DYDK_DYDKXX - 2.*(CHR2_XXY*CDYCDK_KXX + 47c47 < CDYCDK_CDYCDKYY = DYDK_DYDKYY - 2D0*(CHR2_XYY*CDYCDK_KXY + --- > CDYCDK_CDYCDKYY = DYDK_DYDKYY - 2.*(CHR2_XYY*CDYCDK_KXY + 50c50 < CDYCDK_CDYCDKZZ = DYDK_DYDKZZ - 2D0*(CHR2_XYZ*CDYCDK_KXZ + --- > CDYCDK_CDYCDKZZ = DYDK_DYDKZZ - 2.*(CHR2_XYZ*CDYCDK_KXZ + Index: src/macro/CDZCDK_guts.h =================================================================== RCS file: /cactusdevcvs/CactusEinstein/ADMMacros/src/macro/CDZCDK_guts.h,v retrieving revision 1.4 diff -r1.4 CDZCDK_guts.h 44c44 < CDZCDK_CDZCDKXX = DZDK_DZDKXX - 2D0*(CHR2_XXZ*CDZCDK_KXX + --- > CDZCDK_CDZCDKXX = DZDK_DZDKXX - 2.*(CHR2_XXZ*CDZCDK_KXX + 47c47 < CDZCDK_CDZCDKYY = DZDK_DZDKYY - 2D0*(CHR2_XYZ*CDZCDK_KXY + --- > CDZCDK_CDZCDKYY = DZDK_DZDKYY - 2.*(CHR2_XYZ*CDZCDK_KXY + 50c50 < CDZCDK_CDZCDKZZ = DZDK_DZDKZZ - 2D0*(CHR2_XZZ*CDZCDK_KXZ + --- > CDZCDK_CDZCDKZZ = DZDK_DZDKZZ - 2.*(CHR2_XZZ*CDZCDK_KXZ + --- StripMime Report -- processed MIME parts --- multipart/mixed text/plain (text body -- kept) text/plain (text body -- kept) --- From schnetter at cct.lsu.edu Tue Sep 11 03:59:27 2007 From: schnetter at cct.lsu.edu (Erik Schnetter) Date: Tue, 11 Sep 2007 10:59:27 +0200 Subject: [Developers] ADMMacros, C version fixes In-Reply-To: <20070911081020.GO2275@peterpan.ap.op.sissa.it> References: <20070911081020.GO2275@peterpan.ap.op.sissa.it> Message-ID: <666F3D54-3E6F-436B-8A27-01C85781B5EE@cct.lsu.edu> On Sep 11, 2007, at 10:10:20, Frank Loeffler wrote: > Hi, > > this patch fixes some compile problems with the C version of the > macros. > Obviously nobody used this code before. Now at least it compiles. There is another problem with the C version of these macros, which are the hydro terms (for T_ab). I believe that they are usually only calculated when called from Fortran -- I assume that they will be just zero when called from C. This is obviously another big surprise for users of the C version. On the other hand, this is the responsibility of the corresponding hydro codes, e.g. AEIThorns/Exact or Whisky, and ADMMacros can't do much about this. Thanks for the patch, I'll commit it later. Did you perform some tests on the C versions of ADMMacros? -erik -- Erik Schnetter My email is as private as my paper mail. I therefore support encrypting and signing email messages. Get my PGP key from www.keyserver.net. -------------- next part -------------- A non-text attachment was scrubbed... Name: PGP.sig Type: application/pgp-signature Size: 186 bytes Desc: This is a digitally signed message part Url : http://www.cactuscode.org/pipermail/developers/attachments/20070911/ce8443ab/attachment.bin From frank.loeffler at aei.mpg.de Tue Sep 11 04:19:45 2007 From: frank.loeffler at aei.mpg.de (Frank Loeffler) Date: Tue, 11 Sep 2007 11:19:45 +0200 Subject: [Developers] ADMMacros, C version fixes In-Reply-To: <666F3D54-3E6F-436B-8A27-01C85781B5EE@cct.lsu.edu> References: <20070911081020.GO2275@peterpan.ap.op.sissa.it> <666F3D54-3E6F-436B-8A27-01C85781B5EE@cct.lsu.edu> Message-ID: <20070911091945.GQ2275@peterpan.ap.op.sissa.it> On Tue, Sep 11, 2007 at 10:59:27AM +0200, Erik Schnetter wrote: > There is another problem with the C version of these macros, which are the > hydro terms (for T_ab). I believe that they are usually only calculated > when called from Fortran -- I assume that they will be just zero when > called from C. The C version of these terms in Whisky have not been used before July this year. But now they should do the same as the Fortran version. > Did you perform some tests on the C versions of ADMMacros? I am about to check that they are the same in some of my tests. However, there is still one big difference: 4th order is only available for Fortran at the moment, the C version falls back to 2nd order derivatives. Frank From schnetter at cct.lsu.edu Tue Sep 11 04:35:06 2007 From: schnetter at cct.lsu.edu (Erik Schnetter) Date: Tue, 11 Sep 2007 11:35:06 +0200 Subject: [Developers] ADMMacros, C version fixes In-Reply-To: <20070911091945.GQ2275@peterpan.ap.op.sissa.it> References: <20070911081020.GO2275@peterpan.ap.op.sissa.it> <666F3D54-3E6F-436B-8A27-01C85781B5EE@cct.lsu.edu> <20070911091945.GQ2275@peterpan.ap.op.sissa.it> Message-ID: <2091AAD8-59B5-4608-B6F6-B204D4681711@cct.lsu.edu> On Sep 11, 2007, at 11:19:45, Frank Loeffler wrote: > > However, > there is still one big difference: 4th order is only available for > Fortran at the moment, the C version falls back to 2nd order > derivatives. Given that, is there a reason to use the C version? All recent code development was independent of ADMMacros and used instead Maple or Mathematica scripts or equivalent systems to produce code from equations. Personally I like Kranc best; not because it's intrinsically better, but rather because it is complete, and one doesn't have to set up many different things to produce code. We had a summer student, Katharina Beer, look at boundary conditions for the scalar wave equation using Kranc for the discretisation. Kranc was reasonably easy to use; the largest problem was the really long-winded error messages that it tends to produce if there is something wrong. (This was with the development version of Kranc; I think that the stable version described in the documentation is much more complicated to use.) One advantage of Kranc is that it does not only create C or Fortran code from equations, but also contains the finite differencing stencils, so that the resulting code is efficient, and one doesn't have to add code by hand which calculates all derivatives before using the generated equations. -erik -- Erik Schnetter My email is as private as my paper mail. I therefore support encrypting and signing email messages. Get my PGP key from www.keyserver.net. -------------- next part -------------- A non-text attachment was scrubbed... Name: PGP.sig Type: application/pgp-signature Size: 186 bytes Desc: This is a digitally signed message part Url : http://www.cactuscode.org/pipermail/developers/attachments/20070911/ee599eda/attachment.bin From frank.loeffler at aei.mpg.de Tue Sep 11 05:29:53 2007 From: frank.loeffler at aei.mpg.de (Frank Loeffler) Date: Tue, 11 Sep 2007 12:29:53 +0200 Subject: [Developers] ADMMacros, C version fixes In-Reply-To: <2091AAD8-59B5-4608-B6F6-B204D4681711@cct.lsu.edu> References: <20070911081020.GO2275@peterpan.ap.op.sissa.it> <666F3D54-3E6F-436B-8A27-01C85781B5EE@cct.lsu.edu> <20070911091945.GQ2275@peterpan.ap.op.sissa.it> <2091AAD8-59B5-4608-B6F6-B204D4681711@cct.lsu.edu> Message-ID: <20070911102952.GR2275@peterpan.ap.op.sissa.it> On Tue, Sep 11, 2007 at 11:35:06AM +0200, Erik Schnetter wrote: >> the C version falls back to 2nd order >> derivatives. > > Given that, is there a reason to use the C version? Yes, if you want to do quick tests in C. In this case to calculate parts of the constraints. Otherwise I think you are right. Especially the C version of the macros is hardly tested and for bigger projects another method might be better. Frank From tbode at gravity.psu.edu Wed Sep 26 11:36:12 2007 From: tbode at gravity.psu.edu (Tanja Bode) Date: Wed, 26 Sep 2007 12:36:12 -0400 (EDT) Subject: [Developers] Evolving grid arrays in time In-Reply-To: <1157360838.2114.11.camel@multiplicity> Message-ID: Hi, Has there been any further work done on evolving grid arrays in time with MoL since the discussion last year? Thanks, Tanja On Mon, 4 Sep 2006, Ian Hawke wrote: > On Tue, 2006-08-29 at 19:19 -0500, Erik Schnetter wrote: > > It is currently not possible to evolve grid arrays in time with MoL > > when using mesh refinement. At the moment, MoL would evolve grid > > arrays multiple times per time step -- once for each refinement > > level. I am toying with different ideas to make Carpet, MoL, and > > grid arrays work together. > > > MoL would need additional code to ensure that grid arrays are evolved > > only in global mode. > > > > When grid functions are evolved in time, one cannot access the values > > of grid arrays which are also evolved in time. This is so because > > their time stepping is non commensurable. > > > > Comments? > > This final point was the thing that made me think that it wasn't worth > doing, as there are few tasks that I could think of fitting this scheme > that couldn't be done with much less effort by post-processing. I would > only see the value if the evolved grid array was going to be used in the > evolution, and hence their values will need to be accessed. > > It might be possible to allow this with a careful use of timelevels, but > that would require quite a bit of communication between Carpet and MoL I > would think. > > Ian > > > > _______________________________________________ > Developers mailing list > Developers at cactuscode.org > http://www.cactuscode.org/mailman/listinfo/developers > From I.Hawke at soton.ac.uk Thu Sep 27 02:14:13 2007 From: I.Hawke at soton.ac.uk (Ian Hawke) Date: Thu, 27 Sep 2007 08:14:13 +0100 Subject: [Developers] Evolving grid arrays in time In-Reply-To: References: Message-ID: <46FB5845.70106@soton.ac.uk> Tanja Bode wrote: > Has there been any further work done on evolving grid arrays in time with > MoL since the discussion last year? > No, and none is planned (by me at least). The situation remains that it can be done, but only when mesh refinement is not used. Ian From schnetter at cct.lsu.edu Thu Sep 27 05:54:37 2007 From: schnetter at cct.lsu.edu (Erik Schnetter) Date: Thu, 27 Sep 2007 12:54:37 +0200 Subject: [Developers] Evolving grid arrays in time In-Reply-To: References: Message-ID: I want to evolve geodesics, which are stored in grid arrays. I'm looking for a way to make this work. This may have to involve some trickery, such as defining your own time levels. I'll send more information once I found a good way. -erik On Sep 26, 2007, at 18:36:12, Tanja Bode wrote: > Hi, > > Has there been any further work done on evolving grid arrays in > time with > MoL since the discussion last year? > > Thanks, > Tanja > > > > On Mon, 4 Sep 2006, Ian Hawke wrote: > >> On Tue, 2006-08-29 at 19:19 -0500, Erik Schnetter wrote: >>> It is currently not possible to evolve grid arrays in time with MoL >>> when using mesh refinement. At the moment, MoL would evolve grid >>> arrays multiple times per time step -- once for each refinement >>> level. I am toying with different ideas to make Carpet, MoL, and >>> grid arrays work together. >> >>> MoL would need additional code to ensure that grid arrays are >>> evolved >>> only in global mode. >>> >>> When grid functions are evolved in time, one cannot access the >>> values >>> of grid arrays which are also evolved in time. This is so because >>> their time stepping is non commensurable. >>> >>> Comments? >> >> This final point was the thing that made me think that it wasn't >> worth >> doing, as there are few tasks that I could think of fitting this >> scheme >> that couldn't be done with much less effort by post-processing. I >> would >> only see the value if the evolved grid array was going to be used >> in the >> evolution, and hence their values will need to be accessed. >> >> It might be possible to allow this with a careful use of >> timelevels, but >> that would require quite a bit of communication between Carpet and >> MoL I >> would think. >> >> Ian >> >> >> >> _______________________________________________ >> Developers mailing list >> Developers at cactuscode.org >> http://www.cactuscode.org/mailman/listinfo/developers >> > > > > _______________________________________________ > Developers mailing list > Developers at cactuscode.org > http://www.cactuscode.org/mailman/listinfo/developers > -- Erik Schnetter My email is as private as my paper mail. I therefore support encrypting and signing email messages. Get my PGP key from www.keyserver.net. -------------- next part -------------- A non-text attachment was scrubbed... Name: PGP.sig Type: application/pgp-signature Size: 186 bytes Desc: This is a digitally signed message part Url : http://www.cactuscode.org/pipermail/developers/attachments/20070927/6a8705c6/attachment.bin From frank.loeffler at aei.mpg.de Thu Sep 27 17:16:44 2007 From: frank.loeffler at aei.mpg.de (Frank Loeffler) Date: Fri, 28 Sep 2007 00:16:44 +0200 Subject: [Developers] latest version of GetCactus Message-ID: <20070927221644.GN7408@peterpan.ap.op.sissa.it> Hi, what is the home of the GetCactus script? I know I can get it off the web, but I guess it must be in some sort of versioning system. Is the version on the web the most recent one? I would like to implement some changes and would like to use the most recent version as starting point. thanks, Frank From frank.loeffler at aei.mpg.de Thu Sep 27 17:29:47 2007 From: frank.loeffler at aei.mpg.de (Frank Loeffler) Date: Fri, 28 Sep 2007 00:29:47 +0200 Subject: [Developers] latest version of GetCactus In-Reply-To: <20070927221644.GN7408@peterpan.ap.op.sissa.it> References: <20070927221644.GN7408@peterpan.ap.op.sissa.it> Message-ID: <20070927222947.GO7408@peterpan.ap.op.sissa.it> Hi, since I asked and found the answer later, I answer it also here: On Fri, Sep 28, 2007 at 12:16:44AM +0200, Frank Loeffler wrote: > what is the home of the GetCactus script? :pserver:cvs_anon at cvs.cactuscode.org:/cactus/Utilities/Scripts/GetCactus > Is the version on the web the most recent one? It is. Frank From schnetter at cct.lsu.edu Fri Sep 28 11:10:31 2007 From: schnetter at cct.lsu.edu (Erik Schnetter) Date: Fri, 28 Sep 2007 18:10:31 +0200 Subject: [Developers] Evolving grid arrays in time In-Reply-To: References: Message-ID: <936B5F28-7FB8-405D-AA5B-2EBDD814B2C7@cct.lsu.edu> I am now evolving geodesics with the following work-around: I use MoL. Each time the RHS is calculated, I check whether the current refinement level is the finest level. If so, the RHS is calculated, otherwise the RHS is set to zero. The current refinement level is accessed by interface.ccl: USES INCLUDE: carpet.hh #include if (Carpet::reflevel == Carpet::reflevels - 1) // do calculation This works only from C++. The RHS calculating routine has to be scheduled in level mode. -erik On Sep 27, 2007, at 12:54:37, Erik Schnetter wrote: > I want to evolve geodesics, which are stored in grid arrays. I'm > looking for a way to make this work. This may have to involve some > trickery, such as defining your own time levels. I'll send more > information once I found a good way. > > -erik > > On Sep 26, 2007, at 18:36:12, Tanja Bode wrote: > >> Hi, >> >> Has there been any further work done on evolving grid arrays in >> time with >> MoL since the discussion last year? >> >> Thanks, >> Tanja >> >> >> >> On Mon, 4 Sep 2006, Ian Hawke wrote: >> >>> On Tue, 2006-08-29 at 19:19 -0500, Erik Schnetter wrote: >>>> It is currently not possible to evolve grid arrays in time with MoL >>>> when using mesh refinement. At the moment, MoL would evolve grid >>>> arrays multiple times per time step -- once for each refinement >>>> level. I am toying with different ideas to make Carpet, MoL, and >>>> grid arrays work together. >>> >>>> MoL would need additional code to ensure that grid arrays are >>>> evolved >>>> only in global mode. >>>> >>>> When grid functions are evolved in time, one cannot access the >>>> values >>>> of grid arrays which are also evolved in time. This is so because >>>> their time stepping is non commensurable. >>>> >>>> Comments? >>> >>> This final point was the thing that made me think that it wasn't >>> worth >>> doing, as there are few tasks that I could think of fitting this >>> scheme >>> that couldn't be done with much less effort by post-processing. I >>> would >>> only see the value if the evolved grid array was going to be used >>> in the >>> evolution, and hence their values will need to be accessed. >>> >>> It might be possible to allow this with a careful use of >>> timelevels, but >>> that would require quite a bit of communication between Carpet >>> and MoL I >>> would think. >>> >>> Ian >>> >>> >>> >>> _______________________________________________ >>> Developers mailing list >>> Developers at cactuscode.org >>> http://www.cactuscode.org/mailman/listinfo/developers >>> >> >> >> >> _______________________________________________ >> Developers mailing list >> Developers at cactuscode.org >> http://www.cactuscode.org/mailman/listinfo/developers >> > > > -- > Erik Schnetter > > My email is as private as my paper mail. I therefore support > encrypting > and signing email messages. Get my PGP key from www.keyserver.net. > > > > _______________________________________________ > Developers mailing list > Developers at cactuscode.org > http://www.cactuscode.org/mailman/listinfo/developers -- Erik Schnetter My email is as private as my paper mail. I therefore support encrypting and signing email messages. Get my PGP key from www.keyserver.net. -------------- next part -------------- A non-text attachment was scrubbed... Name: PGP.sig Type: application/pgp-signature Size: 186 bytes Desc: This is a digitally signed message part Url : http://www.cactuscode.org/pipermail/developers/attachments/20070928/6e0ad4d8/attachment.bin From frank.loeffler at aei.mpg.de Fri Sep 28 16:43:49 2007 From: frank.loeffler at aei.mpg.de (Frank Loeffler) Date: Fri, 28 Sep 2007 23:43:49 +0200 Subject: [Developers] Subversion support for GetCactus Message-ID: <20070928214349.GI7408@peterpan.ap.op.sissa.it> Hi, this patch adds Subversion support for GetCactus. I tried this for some thorns using https as transport method, but it should work for anything that Subversion can handle. I tried not to change anything related to CVS and to keep the structure of the file as it was as much as possible. However, in this patch I also fix a obvious typo ($foundit instead of elsewhere unused $foundif) in the CVS code and I added a comment to what I think is another mistake in the CVS code, but I did not change the actual code (search for 'mistake' and feel free to fix it, which would be trivial). Frank From frank.loeffler at aei.mpg.de Fri Sep 28 16:44:56 2007 From: frank.loeffler at aei.mpg.de (Frank Loeffler) Date: Fri, 28 Sep 2007 23:44:56 +0200 Subject: [Developers] Subversion support for GetCactus Message-ID: <20070928214456.GJ7408@peterpan.ap.op.sissa.it> Hi, this patch adds Subversion support for GetCactus. I tried this for some thorns using https as transport method, but it should work for anything that Subversion can handle. I tried not to change anything related to CVS and to keep the structure of the file as it was as much as possible. However, in this patch I also fix a obvious typo ($foundit instead of elsewhere unused $foundif) in the CVS code and I added a comment to what I think is another mistake in the CVS code, but I did not change the actual code (search for 'mistake' and feel free to fix it, which would be trivial). Frank Index: GetCactus =================================================================== RCS file: /cactus/Utilities/Scripts/GetCactus,v retrieving revision 1.58 diff -u -r1.58 GetCactus --- GetCactus 12 May 2004 16:33:33 -0000 1.58 +++ GetCactus 28 Sep 2007 21:35:25 -0000 @@ -48,6 +48,7 @@ print "\t-install=\"\" : (default: ./Cactus)\n"; print "\t-anonymous=\"\" : [yes/no] (default: yes)\n"; print "\t-cvs=\"\" : [] (default: cvs)\n"; + print "\t-svn=\"\" : [] (default: svn)\n"; print "\t-repository=\"\" : [stable/development] (default: stable)\n"; print "\t-verbose=\"\" : [yes/no] (default: no)\n"; print "\t-defaults : instruct program to use defaults when unsure\n"; @@ -69,6 +70,8 @@ # Check that CVS is on the system $cvs = &CVSFound if (!defined $cvs); DIE("cvs not found") if (!$cvs); +# Check if SVN is on the system +$svn = &SVNFound if (!defined $svn); # Look for ThornList @@ -194,8 +197,9 @@ next if ($key !~ /REPOSITORY/); if ($rep !~ $thorns{$key}) { $thorns{$key} =~ /(.*:)(.*?)(\/.*)/; - if ($2 eq "") { - my $temprepos = "${1}2401${3}"; + my $tmp = $3; + if (($2 eq "") && ($1 =~ /:pserver.*/)) { + my $temprepos = "${1}2401${tmp}"; if ($rep !~ $temprepos) { $unknownreps{$thorns{$key}} = 1; } @@ -214,8 +218,8 @@ chdir $installdir; $thorns{"THORNS"} = &ShouldWeUpdate("$cactusdir/arrangements/", $thorns{"THORNS"}); -# Get CVS options -$cvs_options = &CVSOptions; +# Get client options +($cvs_options,$svn_options) = &CheckoutOptions; # Checkout the flesh # (if already checked out, get the checked out repository) @@ -311,10 +315,11 @@ { $cvs = "cvs "; } - $foundif = 0; + $foundit = 0; open(MODULES,"$cvs -v | "); while () { + # Frank Loeffler: Isn't this '!' in the next line a mistake? if (!/Concurrent Versions System/) { $foundit = $cvs; @@ -327,6 +332,63 @@ } +#/*@@ +# @routine SVNFound +# @date Sep 2007 +# @author Frank Loeffler +# @desc +# See if svn is installed on the machine +# @enddesc +# @calls +# @calledby +# @history copy of CVSFound with small changes +# +# @endhistory +# +#@@*/ + +sub SVNFound +{ + + my($foundit); + + # here we do thing differently than cvs, because I (Frank Loeffler) think + # that way is wrong. This script should by default choose the version of + # Subversion which is first in the user's path, if there is one. + $svn = "svn "; + $foundit = 0; + open(MODULES,"$svn --version | "); + while () + { + if (/Subversion/) + { + $foundit = $svn; + } + } + close(MODULES); + if ($foundit eq 0) + { + if (-e "/usr/local/bin/svn") + { + $svn = "/usr/local/bin/svn "; + } + elsif (-e "/usr/ncsa/bin/svn") + { + $svn = "/usr/ncsa/bin/svn "; + } + } + open(MODULES,"$svn --version | "); + while () + { + if (/Subversion/) + { + $foundit = $svn; + } + } + + return $foundit; + +} #/*@@ # @routine GetLoginName @@ -818,7 +880,7 @@ if ($debug != 1) { - &RunCVSCommand($command, 1); + &RunCommand($command, 1); #open(CVSCO,$command); #while () #{ @@ -849,7 +911,7 @@ if ($debug != 1) { - &RunCVSCommand($command, 1); + &RunCommand($command, 1); #open(CVSCO,$command); #while () #{ @@ -954,6 +1016,7 @@ #################################### sub GetOneThorn { my ($fleshrep, $options, $tag, $th, %thorns) = @_; + my $client, $svn_repository; $answer = ""; @@ -1032,6 +1095,33 @@ } # rep !~ $thorns{$th.... } # ... =~ /pserver... + if ($thorns{"$th REPOSITORY"} =~ /svn/) + { + if ($svn eq 0) + { + DIE("Did not find Subversion binary 'svn', but Subversion repository ". + "checkout/update was requested."); + } + $client = "svn"; + $svn_repository = $thorns{"$th REPOSITORY"}; + if ($svn_repository =~ /svn:(.+)/) + { + $svn_repository = $1; + } + else + { + $svn_repository = "svn://"; + } + } + else + { + $client = "cvs"; + } + if ($svn eq 0) + { + DIE("Did not find Subversion binary 'svn', but Subversion repository ". + "checkout/update was requested."); + } $th =~ /(.*?)\//; my $cur_arrangement = $1; @@ -1045,10 +1135,10 @@ $arrangement_dirs{$cur_arrangement} = 1; my $command = "$cvs $cvs_options checkout -l $cur_arrangement $tag 2>&1 |"; - &RunCVSCommand($command, 0); + &RunCommand($command, 0); $command = "$cvs $cvs_options checkout ${cur_arrangement}/doc $tag 2>&1 |"; - &RunCVSCommand($command, 0); + &RunCommand($command, 0); } # Checkout or update @@ -1067,9 +1157,33 @@ } if ($answer =~ /^y/i) { - open(REP,"<$th/CVS/Root") || DIE("No CVS files for $th"); - $installedrep = ; - close(REP); + if ($client =~ /cvs/) + { + open(REP,"<$th/CVS/Root") || DIE("No CVS files for $th"); + $installedrep = ; + close(REP); + } + if ($client =~ /svn/) + { + $installedrep = 0; + open(REP,"$svn info $th | "); + while () + { + if (!/URL: (.*)$/) + { + my $tmp = quotemeta($th); + if ($1 =~ /(.*)\/$tmp/) + { + $installedrep = $1 + } + } + } + close(REP); + if ($installedrep eq 0) + { + DIE("Could not figure out Subversion URL for $th"); + } + } chomp $installedrep; my $tp = $thorns{"$th REPOSITORY"}; @@ -1079,16 +1193,23 @@ # if (($thorns{"$th REPOSITORY"} !~ m:^$installedrep$:)) if ($tp ne $installedrep) { - print "\n WARNING: GetCactus is refusing to update $th\n Thorn installed from different repository\n ($installedrep)\n"; + print "\n WARNING: GetCactus is refusing to update $th\n Thorn installed from different repository\n ($installedrep!=$tp)\n"; } else { print " Updating $th\n"; - $command_up = "$cvs $cvs_options -d $thorns{\"$th REPOSITORY\"} update -d $tag $th 2>&1|"; - print " (CVS repository: $thorns{\"$th REPOSITORY\"})\n"; + if ($client =~ /cvs/) + { + $command_up = "$cvs $cvs_options -d $thorns{\"$th REPOSITORY\"} update -d $tag $th 2>&1|"; + } + if ($client =~ /svn/) + { + $command_up = "$svn $svn_options update $th 2>&1|"; + } + print " (Repository: $thorns{\"$th REPOSITORY\"})\n"; if ($debug != 1) { - &RunCVSCommand($command_up, 1); + &RunCommand($command_up, 1); #open(CVSCO,$command_up); #while () #{ @@ -1107,12 +1228,19 @@ { - print " Checking out thorn $th\n CVS repository: $thorns{\"$th REPOSITORY\"}\n CVS module: $thorns{\"$th MODULE\"}\n\n"; + print " Checking out thorn $th\n repository: $thorns{\"$th REPOSITORY\"}\n module: $thorns{\"$th MODULE\"}\n\n"; if ($th eq $thorns{"$th MODULE"}) { - $command_co = "$cvs $cvs_options -d $thorns{\"$th REPOSITORY\"} co $CHECKOUT_OPTIONS $tag $th 2>&1|"; + if ($client =~ /cvs/) + { + $command_co = "$cvs $cvs_options -d $thorns{\"$th REPOSITORY\"} co $CHECKOUT_OPTIONS $tag $th 2>&1|"; + } + if ($client =~ /svn/) + { + $command_co = "$svn $svn_options co $CHECKOUT_OPTIONS $tag $svn_repository/$th $th 2>&1|"; + } $check_dir = ""; } else @@ -1120,7 +1248,14 @@ $th =~ m:^(.*)/(.*):; $check_dir = $1; $call_thorn = $2; - $command_co = "$cvs $cvs_options -d $thorns{\"$th REPOSITORY\"} co -d $call_thorn $tag $thorns{\"$th MODULE\"} 2>&1|"; + if ($client =~ /cvs/) + { + $command_co = "$cvs $cvs_options -d $thorns{\"$th REPOSITORY\"} co -d $call_thorn $tag $thorns{\"$th MODULE\"} 2>&1|"; + } + if ($client =~ /svn/) + { + $command_co = "$svn $svn_options co $CHECKOUT_OPTIONS $tag $svn_repository/$thorns{\"$th MODULE\"} $thorns{\"$th MODULE\"} 2>&1|"; + } } if ($debug != 1) @@ -1141,7 +1276,7 @@ chdir $check_dir; } - &RunCVSCommand($command_co, 1); + &RunCommand($command_co, 1); #open(CVSCO,$command_co); #while () #{ @@ -1162,7 +1297,7 @@ } } -sub RunCVSCommand +sub RunCommand { my $command = shift; my $display_results = shift; @@ -1182,19 +1317,19 @@ # @date Sat Mar 11 15:31:55 CET 2000 # @author Gabrielle Allen # @desc -# Get options to be passed to CVS +# Get options to be passed to CVS/Subversion # @enddesc # @calls # @calledby -# @history +# @history Sep 2007, Frank Loeffler, modified to include subversion options # # @endhistory # #@@*/ -sub CVSOptions +sub CheckoutOptions { - my($answer,$cvs_options); + my($answer,$cvs_options,$svn_options); # Chose information or not do @@ -1219,29 +1354,32 @@ elsif ($answer =~ /^y/i) { $cvs_options = " -z9 "; + $svn_options = ""; } else { $cvs_options = " -Q -z9 "; + $svn_options = " -q"; } } while ($answer =~ /^h/i); - return $cvs_options; + return ($cvs_options, $svn_options); } sub VerboseCheckoutHelp { print "\n\n"; - print " CactusCode CVS checkout options\n"; + print " CactusCode checkout options\n"; print " -------------------------------\n\n"; print " By default, all checkouts using this script use the option -z9\n"; - print " which transfers a compressed version of each file across the \n"; + print " for CVS which transfers a compressed version of each file across the \n"; print " network\n\n"; print " Choosing verbose checkout provides a report of all the files\n"; - print " as they are checked out from the chosen CVS repository, by using \n"; - print " the option -Q\n\n"; - print " cvs -z9 [-Q] -d checkout \n\n"; + print " as they are checked out from the chosen repository, by using \n"; + print " the option -Q for CVS and -q fuer Subversion\n\n"; + print " cvs -z9 [-Q] -d checkout \n"; + print " svn [-q] method:// co \n\n"; } @@ -1490,8 +1628,16 @@ } elsif ($directive =~ "REPOSITORY_PORT") { - if ($value ne "2401") { - $repository_port = $value; + if ( $repository_type =~ /svn/ ) + { + $repository_port = $value; + } + else + { + if ($value ne "2401") + { + $repository_port = $value; + } } next; } @@ -1513,7 +1659,18 @@ $name = &StripSpaces($1); # Thorn repository - $rep = ":$repository_type:$repository_user\@$repository_location:${repository_port}${repository_name}"; + if ( $repository_type =~ /svn$/ ) + { + $rep = "$repository_type://$repository_user\@$repository_location:${repository_port}${repository_name}"; + } + elsif ( $repository_type =~ /svn:/ ) + { + $rep = "$repository_type$repository_user\@$repository_location:${repository_port}${repository_name}"; + } + else + { + $rep = ":$repository_type:$repository_user\@$repository_location:${repository_port}${repository_name}"; + } if ($name && $rep) { @@ -1660,6 +1817,13 @@ print " /.\n\n"; print " Sample thorn lists are provided on the Cactus Code web pages at \n\n"; print " www.cactuscode.org/Download/ThornLists/index.html\n\n"; + print " This script also supports thorns in Subversion rather than CVS. In order\n"; + print " to use this, Subversion has to be properly installed on your machine. You\n"; + print " can check that by typing\n\n"; + print " svn --version\n\n"; + print " This should give you information about the version of Subversion which is\n"; + print " installed. If it is not installed, you can freely obtain it from\n\n"; + print " http://subversion.tigris.org/\n\n"; print " The latest release of the Cactus Code (flesh and thorns) can also\n"; print " be obtained as a tar file from our web site at \n\n"; @@ -1746,18 +1910,19 @@ print " DESCRIPTION \n"; print " Description of the thornlist\n"; print " REPOSITORY_TYPE \n"; - print " pserver\n"; + print " e.g. pserver, svn, svn:http://, svn:https://\n"; print " REPOSITORY_TAG \n"; print " tag to use when checking out\n"; print " REPOSITORY_USER \n"; print " user name for checking out\n"; print " REPOSITORY_NAME \n"; - print " name of CVS repository (location in filesystem)\n"; + print " name of repository (location in filesystem)\n"; print " REPOSITORY_LOCATION \n"; - print " CVS server machine\n"; + print " server machine\n"; print " REPOSITORY_PORT\n"; - print " CVS server port number, defaults to 2401\n\n"; - + print " server port number, defaults to 2401 for CVS. For Subversion\n"; + print " you can enter the port directly into REPOSITORY_LOCATION. Use\n"; + print " REPOSITORY_PORT after REPOSITORY_TYPE.\n\n"; } @@ -1826,7 +1991,7 @@ print " Using Non Cactus Repositories\n"; print " -----------------------------\n\n"; print " Thorn lists can also be used to checkout thorns from\n"; - print " other CVS repositories. These repositories may, or may not,\n"; + print " other CVS or Subversion repositories. These repositories may, or may not,\n"; print " require you to give a username and password depending on their\n"; print " access mechanism.\n\n"; } --- StripMime Report -- processed MIME parts --- multipart/mixed text/plain (text body -- kept) text/plain (text body -- kept) --- From frank.loeffler at aei.mpg.de Fri Sep 28 18:26:15 2007 From: frank.loeffler at aei.mpg.de (Frank Loeffler) Date: Sat, 29 Sep 2007 01:26:15 +0200 Subject: [Developers] Subversion support for 'make update' Message-ID: <20070928232615.GK7408@peterpan.ap.op.sissa.it> Hi, this patch adds Subversion support for the Makefile in the following way: make cvsupdate will continue to do what it did in the past: updating Cactus and thorns which are in CVS new: make svnupdate will update thorns which are in Subversion make update will update thorns that are either in CVS or Subversion Frank ? arrangements/Whisky Index: Makefile =================================================================== RCS file: /cactusdevcvs/Cactus/Makefile,v retrieving revision 1.175 diff -u -r1.175 Makefile --- Makefile 21 May 2007 20:58:15 -0000 1.175 +++ Makefile 28 Sep 2007 23:24:24 -0000 @@ -1195,17 +1195,41 @@ .PHONY: cvsupdate cvsupdate: + $(PERL) -s $(CCTK_HOME)/lib/sbin/CVSUpdate.pl only_CVS:arrangements +svnupdate: + $(PERL) -s $(CCTK_HOME)/lib/sbin/CVSUpdate.pl only_SVN:arrangements +update: $(PERL) -s $(CCTK_HOME)/lib/sbin/CVSUpdate.pl arrangements ifneq ($strip($(CONFIGURATIONS)),) .PHONY $(addsuffix -cvsupdate,$(CONFIGURATIONS)): +.PHONY $(addsuffix -svnupdate,$(CONFIGURATIONS)): +.PHONY $(addsuffix -update,$(CONFIGURATIONS)): $(addsuffix -cvsupdate,$(CONFIGURATIONS)): @echo $(DIVIDER) @echo Updating files for configuration $(@:%-cvsupdate=%) if test -r $(CONFIGS_DIR)/$(@:%-cvsupdate=%)/ThornList ; then \ - $(PERL) -s lib/sbin/CVSUpdate.pl arrangements $(CONFIGS_DIR)/$(@:%-cvsupdate=%)/ThornList; \ + $(PERL) -s lib/sbin/CVSUpdate.pl only_CVS:arrangements $(CONFIGS_DIR)/$(@:%-cvsupdate=%)/ThornList; \ + cd $(CCTK_HOME); \ + fi + @echo " Done." + +$(addsuffix -svnupdate,$(CONFIGURATIONS)): + @echo $(DIVIDER) + @echo Updating files for configuration $(@:%-svnupdate=%) + if test -r $(CONFIGS_DIR)/$(@:%-svnupdate=%)/ThornList ; then \ + $(PERL) -s lib/sbin/CVSUpdate.pl only_SVN:arrangements $(CONFIGS_DIR)/$(@:%-svnupdate=%)/ThornList; \ + cd $(CCTK_HOME); \ + fi + @echo " Done." + +$(addsuffix -update,$(CONFIGURATIONS)): + @echo $(DIVIDER) + @echo Updating files for configuration $(@:%-update=%) + if test -r $(CONFIGS_DIR)/$(@:%-update=%)/ThornList ; then \ + $(PERL) -s lib/sbin/CVSUpdate.pl arrangements $(CONFIGS_DIR)/$(@:%-update=%)/ThornList; \ cd $(CCTK_HOME); \ fi @echo " Done." @@ -1216,6 +1240,16 @@ @echo Configuration $(@:%-cvsupdate=%) does not exist. @echo CVS Update aborted. +%-svnupdate: + @echo $(DIVIDER) + @echo Configuration $(@:%-svnupdate=%) does not exist. + @echo Subversion Update aborted. + +%-update: + @echo $(DIVIDER) + @echo Configuration $(@:%-update=%) does not exist. + @echo Update aborted. + .PHONY: cvsdiff cvsdiff: Index: lib/sbin/CVSUpdate.pl =================================================================== RCS file: /cactusdevcvs/Cactus/lib/sbin/CVSUpdate.pl,v retrieving revision 1.14 diff -u -r1.14 CVSUpdate.pl --- lib/sbin/CVSUpdate.pl 11 May 2004 00:11:25 -0000 1.14 +++ lib/sbin/CVSUpdate.pl 28 Sep 2007 23:24:24 -0000 @@ -11,15 +11,17 @@ my $cvs_ops="-z6 -q"; my $cvs_update_ops="-d -P"; +my $svn_ops="-q"; # Set this to eg -r TAGNAME checkout from a TAG my $cvs_symbolic_name=""; +my $svn_symbolic_name=""; require "lib/sbin/MakeUtils.pl"; $debug = 0; if ($debug) { - print "DEBUG mode: cvs commands not issued\n\n"; + print "DEBUG mode: cvs/svn commands not issued\n\n"; } print("\nUpdating Flesh\n"); @@ -56,6 +58,17 @@ ($arrangement_dir, $thornlist) = @ARGV; +if ($arrangement_dir =~ /only_CVS:(.*)/) +{ + $only_CVS = "yes"; + $arrangement_dir = $1; +} +if ($arrangement_dir =~ /only_SVN:(.*)/) +{ + $only_SVN = "yes"; + $arrangement_dir = $1; +} + $arrangement_dir = "$home/$arrangement_dir"; if ($thornlist =~ /^$/) { @@ -108,28 +121,61 @@ if( ! -d "$arrangement_dir/$thorn/CVS") { - print "Ignoring $thorn - no CVS directory\n"; + if ($only_CVS =~ /yes/) + { + print "Ignoring $thorn - no CVS directory\n"; + next; + } + } + else + { + $command = "cvs $cvs_ops update $cvs_update_ops $cvs_symbolic_name"; + } + if( ! -d "$arrangement_dir/$thorn/.svn") + { + if ($only_SVN =~ /yes/) + { + print "Ignoring $thorn - no .svn directory\n"; + next; + } + } + else + { + $command = "svn $svn_ops update $svn_symbolic_name"; + } + if ( ! -d "$arrangement_dir/$thorn/CVS" && + ! -d "$arrangement_dir/$thorn/.svn" ) + { + print "Ignoring $thorn - no CVS or .svn directory\n"; + next; + } + if ( -d "$arrangement_dir/$thorn/CVS" && + -d "$arrangement_dir/$thorn/.svn" ) + { + print "Ignoring $thorn - both CVS and .svn directory\n"; next; } chdir ("$arrangement_dir/$thorn") || die "Cannot change to thorn directory '$arrangement_dir/$thorn'\n"; print("\nUpdating $thorn\n"); - $command = "cvs $cvs_ops update $cvs_update_ops $cvs_symbolic_name"; if($debug) { $this_dir = `pwd`; chop($this_dir); print "In directory $this_dir\n"; print "Issuing command\n $command\n"; - foreach $file (`ls CVS`) + if ( -d "$arrangement_dir/$thorn/CVS" ) { - chop($file); - print "Contents of $file\n"; - open (FILE, ") + foreach $file (`ls CVS`) { - print; + chop($file); + print "Contents of $file\n"; + open (FILE, ") + { + print; + } } } } --- StripMime Report -- processed MIME parts --- multipart/mixed text/plain (text body -- kept) text/plain (text body -- kept) ---