Ignore:
Timestamp:
Jun 3, 2024, 5:27:45 PM (6 months ago)
Author:
jbclement
Message:

PEM:
The launching script can now operate a relaunch from any already computed PCM/PEM run. The starting point is asked to the user interactively on the terminal.
Some features might not work very well yet since not every stituation has not been tested.
JBC

Location:
trunk/LMDZ.COMMON/libf/evolution
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.COMMON/libf/evolution/changelog.txt

    r3354 r3355  
    344344== 03/06/2024 == JBC
    345345Addition of a script to execute multiple scripts in subdirectories (useful to launch multiple jobs at once for ex.) + Updates for several scripts in the deftank.
     346
     347== 03/06/2024 == JBC
     348The launching script can now operate a relaunch from any already computed PCM/PEM run. The starting point is asked to the user interactively on the terminal.
     349Some features might not work very well yet since not every stituation has not been tested.
  • trunk/LMDZ.COMMON/libf/evolution/deftank/launchPEM.sh

    r3349 r3355  
    3636source lib_launchPEM.sh
    3737
    38 if [ $# -eq 0 ]; then # From scratch
     38if [ $# -eq 0 ]; then
     39    # Starting from scratch
    3940    echo "The launching script is starting!"
    4041    echo "The output file is \"log_launchPEM.txt\"."
     
    4546    initlaunch
    4647    cyclelaunch $nPCM_ini
     48
    4749else
    48     if [ $1 = "new" ]; then # New cycle
     50    # Starting a new cycle
     51    if [ $1 = "new" ]; then
    4952        exec >> log_launchPEM.txt 2>&1
     53        echo
    5054        echo "This is a new cycle for the PEM simulation."
    5155        date
    5256        read i_myear n_myear convert_years iPCM iPEM nPCM nPCM_ini < info_PEM.txt
    5357        cyclelaunch $nPCM
    54     elif [ $1 = "re" ]; then # Relaunch
    55         echo "Case not coded yet!"
    56         errlaunch
     58
     59    # Starting a relaunch
     60    elif [ $1 = "re" ]; then
     61        if [ ! -f "info_PEM.txt" ]; then
     62            echo "Error: file \"info_PEM.txt\" does not exist in $dir!"
     63            echo "It is necessary to relaunch a PEM simulation."
     64            errlaunch
     65        fi
     66        while true; do
     67            echo "Do you want to relaunch from a 'PCM' or 'PEM' run?"
     68            read relaunch
     69            if [ $relaunch = "PCM" ] || [ $relaunch = "PEM" ]; then
     70                break
     71            else
     72                echo "Invalid input. Please enter 'PCM' or 'PEM'."
     73            fi
     74        done
     75        read i_myear n_myear convert_years iPCM iPEM nPCM nPCM_ini < info_PEM.txt
     76        echo $i_myear $n_myear $convert_years $iPCM $iPEM $nPCM $nPCM_ini
     77        while true; do
     78            if [ $relaunch = "PCM" ]; then
     79                echo "What is the number of the PCM run?"
     80                echo "It should be between 1 and $iPCM."
     81                read irelaunch
     82                if [ 0 -lt $irelaunch ] && [ $irelaunch -le $iPCM ]; then
     83                    break
     84                else
     85                    echo "Invalid input. Please enter a valid PCM run number."
     86                fi
     87            else
     88                echo "What is the number of the PEM run?"
     89                echo "It should be between 1 and $((iPEM - 1))."
     90                read irelaunch
     91                if [ 0 -lt $irelaunch ] && [ $irelaunch -le $iPEM ]; then
     92                    break
     93                else
     94                    echo "Invalid input. Please enter a valid PEM run number."
     95                fi
     96            fi
     97        done
     98        exec >> log_launchPEM.txt 2>&1
     99        echo
     100        echo "This is a relaunch for the PEM simulation from the run $relaunch$irelaunch."
     101        date
     102        checklaunch
     103        if [ $relaunch = "PCM" ]; then
     104            relaunchPCM
     105        else
     106            relaunchPEM
     107        fi
    57108    else
    58109        echo "Error: given argument '$1' for the launching script is unknown!"
  • trunk/LMDZ.COMMON/libf/evolution/deftank/lib_launchPEM.sh

    r3354 r3355  
    124124    i_myear=0
    125125    iPEM=1
    126     ((iPCM = ($iPEM - 1)*$nPCM + 1))
     126    iPCM=1
    127127    cp startfi.nc starts/
    128128    if [ -f "start.nc" ]; then
     
    139139submitPCM() {
    140140    find . -type f -name "jobPCM*.slurm" ! -name "jobPCM.slurm" -delete
     141    ii=1
     142    if [ ! -z $2 ]; then
     143        ii=$2
     144    fi
    141145    if [ $i_myear -lt $n_myear ]; then
    142         echo "Run PCM $iPCM: call 1/$1..."
     146        echo "Run PCM $iPCM: call $ii/$1..."
    143147        cp jobPCM.slurm jobPCM${iPCM}.slurm
    144148        sed -i "s/#SBATCH --job-name=jobPCM.*/#SBATCH --job-name=jobPCM${iPCM}/" jobPCM${iPCM}.slurm
    145149        sed -i "s/^k=[0-9]\+$/k=$(echo "3 - $nPCM_ini" | bc -l)/" jobPCM${iPCM}.slurm
    146150        jobID=$(sbatch --parsable jobPCM${iPCM}.slurm)
     151        # Create a file to cancel the dependent jobs of the cycle
    147152        echo "#!/bin/bash" > kill_launchPEM.sh
    148153        chmod +x kill_launchPEM.sh
     
    150155        ((iPCM++))
    151156        ((i_myear++))
     157        ((ii++))
    152158    else
    153159        endlaunch
    154160    fi
    155     for ((i = 2; i <= $1; i++)); do
     161    for ((i = $ii; i <= $1; i++)); do
    156162        if [ $i_myear -lt $n_myear ]; then
    157163            echo "Run PCM $iPCM: call $i/$1..."
     
    172178submitPEM() {
    173179    if [ $i_myear -lt $n_myear ]; then
     180        echo "Run PEM $iPEM"
     181        sed -i "s/#SBATCH --job-name=jobPEM.*/#SBATCH --job-name=jobPEM${iPEM}/" jobPEM.slurm
     182        jobID=$(sbatch --parsable jobPEM.slurm)
     183        # Create a file to cancel the dependent jobs of the cycle
     184        echo "#!/bin/bash" > kill_launchPEM.sh
     185        chmod +x kill_launchPEM.sh
     186        echo "scancel" $jobID >> kill_launchPEM.sh
     187    else
     188        endlaunch
     189    fi
     190}
     191
     192# To make one cycle of PCM and PEM runs
     193cyclelaunch() {
     194    # PCM runs
     195    submitPCM $1 $2
     196
     197    # PEM run
     198    if [ $i_myear -lt $n_myear ]; then
     199        echo "Run PEM $iPEM"
    174200        sed -i "s/#SBATCH --job-name=jobPEM.*/#SBATCH --job-name=jobPEM${iPEM}/" jobPEM.slurm
    175201        jobID=$(sbatch --parsable --dependency=afterok:${jobID} jobPEM.slurm)
     
    180206}
    181207
    182 # To make one cycle of PCM and PEM runs
    183 cyclelaunch() {
    184     # PCM runs
    185     submitPCM $1
    186 
    187     # PEM run
    188     submitPEM
    189 }
     208# To relaunch from PCM run
     209relaunchPCM() {
     210    iPCM=$(($irelaunch + 1))
     211    cp starts/restartfi${irelaunch}.nc startfi.nc
     212    if [ -f "starts/restart${irelaunch}.nc" ]; then
     213        cp starts/restart${irelaunch}.nc start.nc
     214    elif [ -f "starts/restart1D${irelaunch}.txt" ]; then
     215        cp starts/restart1D${irelaunch}.txt start1D.txt
     216    fi
     217    if [ $irelaunch -le $nPCM_ini ]; then
     218        # PCM relaunch during the initialization cycle
     219        iPEM=1
     220        i_myear=$irelaunch
     221        sed -i "1s/.*/$i_myear $n_myear $convert_years $iPCM $iPEM $nPCM $nPCM_ini/" info_PEM.txt
     222        if [ $irelaunch -eq $(($nPCM_ini - 1)) ]; then
     223            cp diags/data2reshape${irelaunch}.nc data2reshape_Y1.nc
     224            cyclelaunch $nPCM_ini $irelaunch
     225        elif [ $irelaunch -eq $nPCM_ini ]; then
     226            cp diags/data2reshape$(($irelaunch - 1)).nc data2reshape_Y1.nc
     227            cp diags/data2reshape${irelaunch}.nc data2reshape_Y2.nc
     228            submitPEM # The next job is a PEM run
     229        else
     230            cyclelaunch $nPCM_ini $iPCM
     231        fi
     232    else
     233        # PCM relaunch during a cycle
     234        iPEM=$(($irelaunch/$nPCM + 1))
     235        il=$(echo "($irelaunch - $nPCM_ini)%$nPCM" | bc -l)
     236        i_myear=$(($(awk "NR==$(($iPEM + 1)) {print \$1}" "info_PEM.txt") + $il))
     237        sed -i "1s/.*/$i_myear $n_myear $convert_years $iPCM $iPEM $nPCM $nPCM_ini/" info_PEM.txt
     238        cp starts/restartpem${iPEM}.nc startpem.nc
     239        if [ $il -eq $(($nPCM - 1)) ]; then
     240            cp diags/data2reshape${irelaunch}.nc data2reshape_Y1.nc
     241            cyclelaunch $nPCM $il
     242        elif [ $il -eq $nPCM ]; then
     243            cp diags/data2reshape$(($irelaunch - 1)).nc data2reshape_Y1.nc
     244            cp diags/data2reshape${irelaunch}.nc data2reshape_Y2.nc
     245            submitPEM # The next job is a PEM run
     246        else
     247            cyclelaunch $nPCM $il
     248        fi
     249    fi
     250}
     251
     252# To relaunch from PEM run
     253relaunchPEM() {
     254    iPEM=$irelaunch
     255    iPCM=$(($nPCM_ini + ($nPCM - 1)*$irelaunch + 1))
     256    i_myear=$(awk "NR==$(($iPEM + 1)) {print \$1}" "info_PEM.txt")
     257    sed -i "1s/.*/$i_myear $n_myear $convert_years $iPCM $iPEM $nPCM $nPCM_ini/" info_PEM.txt
     258    cp starts/restartpem${irelaunch}.nc startpem.nc
     259    cp starts/restartfi_postPEM${irelaunch}.nc startfi.nc
     260    if [ -f "starts/restart_postPEM${irelaunch}.nc" ]; then
     261        cp starts/restart_postPEM${irelaunch}.nc start.nc
     262    elif [ -f "starts/restart1D_postPEM${irelaunch}.txt" ]; then
     263        cp starts/restart1D_postPEM${irelaunch}.txt start1D.txt
     264    fi
     265    cyclelaunch $nPCM
     266}
Note: See TracChangeset for help on using the changeset viewer.