ACCESS ESM1.6 experiment segfault

Hi everyone,

I have been running a freshwater hosing experiment with v1.6 of the ESM and it is now consistently crashing after 272 years of integration due to a segfault, apparently originating somewhere in the atmosphere model.

Error log shows:

forrtl: error (78): process killed (SIGTERM)
Image              PC                Routine            Line        Source             
libpthread-2.28.s  0000147FF784D990  Unknown               Unknown  Unknown
libc-2.28.so       0000147FF7299C0B  __sched_yield         Unknown  Unknown
libopen-pal.so.80  0000147FF46F9519  opal_progress         Unknown  Unknown
libmpi.so.40.40.7  0000147FF47DF396  Unknown               Unknown  Unknown
libmpi.so.40.40.7  0000147FF481FB1E  MPI_Waitall           Unknown  Unknown
libmpi_mpifh_Inte  0000147FF85A9668  mpi_waitall           Unknown  Unknown
um_hg3.exe         00000000012C4910  mpl_waitall                54  mpl_waitall.F90
um_hg3.exe         000000000085953D  swap_bounds               473  swap_bounds-swpbnd2c.f90
um_hg3.exe         0000000000814BCC  sl_thermo                1238  sl_thermo.f90
um_hg3.exe         00000000006F5343  ni_sl_thermo              664  ni_sl_thermo.f90
um_hg3.exe         0000000000595355  Unknown               Unknown  Unknown
um_hg3.exe         0000000000520870  Unknown               Unknown  Unknown
um_hg3.exe         00000000004B8DB1  Unknown               Unknown  Unknown
um_hg3.exe         0000000000462FB2  Unknown               Unknown  Unknown
um_hg3.exe         0000000000416107  um_shell                 3920  um_shell.f90
um_hg3.exe         000000000041112A  flumemain                  29  flumeMain.f90
um_hg3.exe         000000000041108D  Unknown               Unknown  Unknown
libc-2.28.so       0000147FF729B865  __libc_start_main     Unknown  Unknown
um_hg3.exe         0000000000410FAE  Unknown               Unknown  Unknown

If anyone has any idea why this is happening or how to get past it, I’d greatly appreciate it.

In case of interest, the experiment directory is located at:

home/561/wnh561/access-esm1.6/rel_pi+em+CN

That process was terminated (SIGTERM). The PBS job may have run out of memory or walltime (check the footer) or perhaps one of the other ranks has a SIGSEGV causing all the ranks to terminate, see if you can find a trace for that rank.

Hi @WillemH,

Echoing scott’s comments - process killed usually means the job has run out of time or memory and is killed by the scheduler. Usually this shows up in the PBS logs. Can you find them and report back?

Thanks,
Ed

Hi Willem,
Your home directory doesn’t have group read permissions. Given that I’m in your group (y99), you could add them for someone like myself to check over by doing:
chmod -R g+rX /home/561/wnh561

Hi all,

Thanks for the quick replies. @dkhutch the directory should be accessible now. Sorry, should have included the footer from the error log. It shows:

prterun noticed that process rank 163 with PID 1796869 on node gadi-cpu-spr-0570 exited onsignal 11 (Segmentation fault).

And the backtrace implies something going wrong in the atmosphere (though I’m not really that familiar with ACCESS). There is much more than what is shown below; I’ve attached the .err and .out files to this post (the .out shows conservation warnings prior to the crash which I didn’t see in previous runs, but not sure if this is relevant).

access-esm1.6.out.txt (461.6 KB)

access-esm1.6.err.txt (798.3 KB)

[gadi-cpu-spr-0570:1796869:0:1796869] Caught signal 11 (Segmentation fault: Sent by the kernel at address (nil))
[gadi-cpu-spr-0570:1796885:0:1796885] Caught signal 11 (Segmentation fault: Sent by the kernel at address (nil))
==== backtrace (tid:1796885) ====
 0 0x0000000000012990 __funlockfile()  :0
 1 0x0000000000a66bac interpolation_()  /scratch/tm70/tm70_ci/tmp/restricted/spack-stage/spack-stage-um7-git.2026.04.000_access-esm1.6-bdlpvvfpydgedzzktzviqovdeb3fyzbt/spack-src/ummodel_hg3/ppsrc/atmosphere/dynamics_advection/interpolatio
n.f90:993 

Thanks!

Thanks @WillemH Can you also provide a job id?

Hi @edoyango

The job ID for the most recent run is

Job Id: 178445086.gadi-pbs

Though this is the second time it’s crashed in the same way (I restarted to make sure it was consistent).

Hi @WillemH, the atmosphere log file in /home/561/wnh561/access-esm1.6/rel_pi+em+CN/work/atmosphere/atm.fort6.pe0 finishes with

  ==============================================
  initial Absolute Norm :    67248670.7694857     
  GCR(                     2 ) failed to converge in                     50 
  iterations. 
  Final Absolute Norm :    1049.99880463915     
  ==============================================

suggesting a failure in the solver. This can be caused by many different reasons, but often points to a random numerical issue. It’s worth trying to add a random perturbation to the last atmospheric restart to see if it gets around the error. We’re currently writing up some updated recommendations on how to do this, but I’ll copy in a draft here for now:

  1. Load the model-processing environment (note, this may clash with payu and so it’s best to do this in a session without payu loaded):

    module use /g/data/vk83/modules
    module load model-processing
    
  2. Navigate to the latest restartXYZ directory in the experiment’s archive directory, and rename the atmospheric restart file.

    cd restartXYZ/atmosphere
    mv restart_dump.astart restart_dump.astart_orig
    

    It will be worth keeping this unperturbed restart as a backup.

  3. Apply a perturbation to the atmospheric restart file

    perturbIC -s <SEED> restart_dump.astart_orig -o restart_dump.astart
    

    here <SEED> can be any integer, and it’s used to set the random seed for the perturbation. Specifying a random seed is important, as it allows for the exact same perturbation to be reapplied in the future. Make sure to keep track of whichever value you use.

    This will apply a random perturbation with amplitude 0.01 to the atmospheric theta field. If you’d like to change the amplitude, you can add a -a <AMPLITUDE> argument.

    The resulting restart will be written to restart_dump.astart. We need to use this file name for the model to be able to pick up the restart.

  4. Unload the model-processing environment and load the payu environment:

    module unload model-processing
    module load payu
    
  5. Make a record of the perturbation in the experiment runlogs. First cd into the Payu control directory for the experiment and run

    payu setup
    

    This will rewrite the manifest file using the data from the modified restart. To record the pertubation in the experiment history, next run

    $ git commit -a -m "restartXYZ atmospheric restart perturbed using command:   perturbIC -s <SEED> restart_dump.astart_orig -o restart_dump.astart"
    

    filling in the correct information for <SEED>.

    If you run the git log command, it should now include the above record.

    You will finally need to run payu sweep to clear the work directory before setting off the next run with payu run.

Hopefully the crash will be avoided after applying the perturbation. If it occurs again at the same point, it could suggest an issue in the configuration.

Let me know if you have any questions about those steps or if you run into any issues.

Cheers,
Spencer

Thanks @spencerwong for this excellent outline of the perturb_IC process with git-logged perturbation history. @WillemH I was also thinking perturb_IC is your best bet to try first.

Hi @spencerwong

This is fantastic, thanks for the detailed instructions. I’ve done this and now re-submitting the job. I’ll just note that at step 5 when I run payu setup, it threw an error because the work directory still existed, so I had to sweep first. Will keep you all updated…

Hi @WillemH, how did the perturb_IC go?

Hi all,

Apologies, I didn’t have time to check the experiment yesterday. I’ve run another 30 years with the new atmos. restart without any further error, so I would say that’s a success! Thanks again to everyone for such fast assistance.