# Ensemble run for ACCESS-CM2: Perturbations have no effect

**URL:** <https://forum.access-hive.org.au/t/ensemble-run-for-access-cm2-perturbations-have-no-effect/6038>\
**Category:** Coupled Model\
**Tags:** access-cm2\
**Created:** [11 March 2026 03:36 UTC](https://forum.access-hive.org.au/t/ensemble-run-for-access-cm2-perturbations-have-no-effect/6038 "2026-03-11T03:36:02Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jatreutlein](https://avatars.discourse-cdn.com/v4/letter/j/c89c15/32.png) [@Jatreutlein](https://forum.access-hive.org.au/u/Jatreutlein)\
**Post date:** [11 March 2026 03:36 UTC](https://forum.access-hive.org.au/t/ensemble-run-for-access-cm2-perturbations-have-no-effect/6038/1 "2026-03-11T03:36:02Z")

</div>

Hi all,

I’m interested in running an ensemble for ACCESS-CM2 - I’ll be perturbing the initial air temperatures by about 10^-13 randomly. There are a few people @ars599 @zoegillett27 @spencerwong who have successfully done this 3 years ago [here](https://forum.access-hive.org.au/t/ensemble-runs-with-access-cm2/1107), @sebmckenna did it 2 years ago [here](https://forum.access-hive.org.au/t/access-cm2-perturbed-initial-conditions-not-applying-in-all-cases/1955), and most recently @huazhen [here](https://forum.access-hive.org.au/t/setting-up-ensemble-runs-in-access-cm2/4596). These thread are closed so I can’t comment there. I have the `perturbIC.py` file that is commonly used for this purpose from [here](https://github.com/tammasloughran/esm-esm-piNoCrops/blob/master/scripts/perturbIC.py).

My issue is that whilst I can use the file to perturb the warm restart files, I see no difference in conditions after 1 month, below is the daily mean air temperature at 1.5 m between 4 members.

 ![Screenshot 2026-03-11 at 2.33.55 pm](https://us1.discourse-cdn.com/flex020/uploads/access1/original/2X/9/903a622112ff7899877347bac380e4f52acae595.png)

I would greatly appreciate any advice from those who’ve done this before or anyone with an idea!

Cheers,

Joel

---

<div class="post-metadata">

**Author:** ![Scott](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.access-hive.org.au/scott/32/37_2.png) [@Scott](https://forum.access-hive.org.au/u/Scott)\
**Post date:** [11 March 2026 06:13 UTC](https://forum.access-hive.org.au/t/ensemble-run-for-access-cm2-perturbations-have-no-effect/6038/2 "2026-03-11T06:13:05Z")

</div>

Have you confirmed the perturbed files are actually different, e.g. by running `diff FILEA FILEB` or by plotting the perturbed field in each file?

---

<div class="post-metadata">

**Author:** ![Benoit](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.access-hive.org.au/benoit/32/3115_2.png) [@Benoit](https://forum.access-hive.org.au/u/Benoit)\
**Post date:** [11 March 2026 06:18 UTC](https://forum.access-hive.org.au/t/ensemble-run-for-access-cm2-perturbations-have-no-effect/6038/3 "2026-03-11T06:18:13Z")

</div>

I have no clue if this is important here and I have never done any of these before, but 1e-13 is close to 64-bit floating-point machine precision for temperatures in Kelvin with values ~270:

```julia
julia> eps(270.0)
5.684341886080802e-14 # <- machine precision for 64-big float value of 270.0

```

So you might have such a small perturbation that whatever chaotic bifurcation you were expecting has not had time to be fully realized:

```julia
julia> 270 + 1e-13
270.0000000000001

```

And if by any chance you are adding 32-bit floats, then your perturbation may be actually not perturbing anything:

```julia
julia> 270f0 + 1f-13
270.0f0

```

Maybe that’s your issue here? (Note I’m using Julia but the floating-point arithmetic issues are essentially the same across languages AFAIU.)

For something to be “felt” I would recommend taking the square root of `eps`, so in your case, for T in Kelvins, something on the order of 1e-7 for 64-bit floats and 0.005 for 32-bit floats.

```julia
julia> sqrt(eps(270.0))
2.384185791015625e-7

julia> sqrt(eps(270f0))
0.0055242716f0

```

---

<div class="post-metadata">

**Author:** ![jemmajeffree](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.access-hive.org.au/jemmajeffree/32/228_2.png) [@jemmajeffree](https://forum.access-hive.org.au/u/jemmajeffree)\
**Post date:** [11 March 2026 23:52 UTC](https://forum.access-hive.org.au/t/ensemble-run-for-access-cm2-perturbations-have-no-effect/6038/4 "2026-03-11T23:52:16Z")

</div>

another potential approach for debugging, building on the good suggestions that have come before: maybe hit it with a bigger hammer (say, 10\*\*-2, or even 1 for clarity about whether anything changed) and check if that has an impact on the model’s evolution

---

<div class="post-metadata">

**Author:** ![zoegillett27](https://avatars.discourse-cdn.com/v4/letter/z/74df32/32.png) [@zoegillett27](https://forum.access-hive.org.au/u/zoegillett27)\
**Post date:** [12 March 2026 01:59 UTC](https://forum.access-hive.org.au/t/ensemble-run-for-access-cm2-perturbations-have-no-effect/6038/5 "2026-03-12T01:59:37Z")

</div>

Hi Joel,

In the end I didn’t need an ensemble, so I’m not too sure how that code works. I believe @huazhen has done this recently with ACCESS-CM2 though, so hopefully she can provide more help. I’m interested to know as well.

Cheers,  
Zoe

---

<div class="post-metadata">

**Author:** ![Jatreutlein](https://avatars.discourse-cdn.com/v4/letter/j/c89c15/32.png) [@Jatreutlein](https://forum.access-hive.org.au/u/Jatreutlein)\
**Post date:** [16 March 2026 02:56 UTC](https://forum.access-hive.org.au/t/ensemble-run-for-access-cm2-perturbations-have-no-effect/6038/6 "2026-03-16T02:56:34Z")

</div>

Thanks all for your replies!

@Scott the diff command returns nothing, these files are identical. I even did a histogram of the air temperature differences and got the min, mean, max difference at 15 decimals and still no difference. Is it something to do with the script @tammasloughran?

@Benoit @jemmajeffree I tried a difference of 0.01 and I got the same results, very odd!

@zoegillett27 Thanks for your input, and yes if you have any tips on how you got it working @huazhen please let me know

Cheers,

Joel

---

<div class="post-metadata">

**Author:** ![jemmajeffree](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.access-hive.org.au/jemmajeffree/32/228_2.png) [@jemmajeffree](https://forum.access-hive.org.au/u/jemmajeffree)\
**Post date:** [16 March 2026 05:05 UTC](https://forum.access-hive.org.au/t/ensemble-run-for-access-cm2-perturbations-have-no-effect/6038/7 "2026-03-16T05:05:35Z")

</div>

@MartinDix  
Am I right in remembering that `perturbIC.py` is your script? any suggestions or guidelines on how it should be used?

---

<div class="post-metadata">

**Author:** ![MartinDix](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.access-hive.org.au/martindix/32/32_2.png) [@MartinDix](https://forum.access-hive.org.au/u/MartinDix)\
**Post date:** [17 March 2026 00:55 UTC](https://forum.access-hive.org.au/t/ensemble-run-for-access-cm2-perturbations-have-no-effect/6038/8 "2026-03-17T00:55:48Z")

</div>

The default size perturbation is large enough that significant differences appear very quickly.

Using a copy of `/data/access/access-cm2/cmip6_restarts/bi889/restart/atm/bi889a.da09500101_00`

```auto
module use ~access/modules
module load pythonlib/umfile_utils/access_cm2
perturbIC.py -s 0 bi889a.da09500101_00

```

`mule-cumf` shows theta differences with the expected default amplitude of 0.01.

```auto
mule-cumf bi889a.da09500101_00 /g/data/access/access-cm2/cmip6_restarts/bi889/restart/atm/bi889a.da09500101_00 
...
%%%%%%%%%%%%%%%%%%%%
* Field 171/15610 *
%%%%%%%%%%%%%%%%%%%%
Lookup compares, data DOES NOT compare
Compared 64/64 lookup values.
File_1 lookup info:
  t1(0950/01/01 00:00:00) lblev(9999)/blev(0.0) lbproc(0)
Data differences:
  Number of point differences : 27264/27648
  Maximum absolute difference : 0.009999598438156454
  RMS difference : 0.0057510709134938765
  RMS diff as % of file_1 data : 0.0020506374334412678
  RMS diff as % of file_2 data : 0.0020506375586943374

```

Running with the perturbed file shows solver differences from the first step, e.g.  
Original

```auto
********************************************
* Linear solve for Helmholtz problem *
* Outer Inner Iterations InitialError *
* 1 1 16 0.100000E+01 *
* 1 2 7 0.108265E-01 *
********************************************

********************************************
* Linear solve for Helmholtz problem *
* Outer Inner Iterations InitialError *
* 2 1 5 0.117254E+00 *
* 2 2 3 0.121000E-02 *
********************************************

```

Perturbed

```auto
********************************************
* Linear solve for Helmholtz problem *
* Outer Inner Iterations InitialError *
* 1 1 16 0.100000E+01 *
* 1 2 11 0.108264E-01 *
********************************************

********************************************
* Linear solve for Helmholtz problem *
* Outer Inner Iterations InitialError *
* 2 1 5 0.117142E+00 *
* 2 2 1 0.120943E-02 *
********************************************

```

Is it possible that you specified the amplitude as zero rather than the seed as zero? I’ve now modified the script to make this an error.

---

<div class="post-metadata">

**Author:** ![Jatreutlein](https://avatars.discourse-cdn.com/v4/letter/j/c89c15/32.png) [@Jatreutlein](https://forum.access-hive.org.au/u/Jatreutlein)\
**Post date:** [17 March 2026 04:16 UTC](https://forum.access-hive.org.au/t/ensemble-run-for-access-cm2-perturbations-have-no-effect/6038/9 "2026-03-17T04:16:09Z")

</div>

> [@MartinDix](#):
>
> ```auto
> 
> ```

This worked well, thanks @MartinDix and @jemmajeffree for the help. It seems to be the script I was using was not working correctly, your script accessible with the modules

```auto
module use ~access/modules
module load pythonlib/umfile_utils/access_cm2

```

works as expected.
