Changeset 785 for trunk/libIGCM/AA_create_ts
- Timestamp:
- 02/04/13 16:39:38 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libIGCM/AA_create_ts
r770 r785 100 100 TsTask=${TsTask:=2D} 101 101 if [ X${TsTask} = Xempty ] ; then 102 102 TsTask="" 103 103 fi 104 104 … … 165 165 MENAGE () 166 166 { 167 167 [ -f $3 ] && ( IGCM_sys_RshArchive rm -f $1/$2 ;) 168 168 } 169 169 … … 179 179 180 180 if [ ${StandAlone} = true ] ; then 181 181 CARD_DIR=${SUBMIT_DIR} 182 182 else 183 184 185 186 187 183 CARD_DIR=${RUN_DIR_PATH} 184 IGCM_sys_Get_Master ${SUBMIT_DIR}/config.card ${RUN_DIR_PATH} 185 IGCM_sys_Get_Master ${SUBMIT_DIR}/run.card ${RUN_DIR_PATH} 186 IGCM_sys_Get_Master ${SUBMIT_DIR}/COMP ${RUN_DIR_PATH} 187 IGCM_sys_Get_Master ${SUBMIT_DIR}/POST ${RUN_DIR_PATH} 188 188 fi 189 189 … … 228 228 # Determine Dimension of the produced time series : 2D or 3D 229 229 if ( [ X${TsTask} = XChunck2D ] || [ X${TsTask} = X2D ] ) ; then 230 230 Dimension=2D 231 231 elif ( [ X${TsTask} = XChunck3D ] || [ X${TsTask} = X3D ] ) ; then 232 232 Dimension=3D 233 233 else 234 234 Dimension="" 235 235 fi 236 236 … … 255 255 DoJob=false 256 256 for comp in ${config_ListOfComponents[*]} ; do 257 # 258 ActiveComp=false 259 # 260 IGCM_card_DefineArrayFromOption ${CARD_DIR}/config.card ListOfComponents ${comp} 261 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 262 # 263 card=${CARD_DIR}/COMP/${compname}.card 264 265 IGCM_card_DefineArrayFromOption ${card} OutputFiles List 266 # 267 ListFilesName=${compname}_OutputFiles_List 268 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 269 # 270 if [ X${FileName0} != X${NULL_STR} ] ; then 271 # 272 #IGCM_debug_Print 1 "Component : ${compname}" 273 # 274 # INITIALISATION 275 # 276 typeset i 277 if [ ${FlagToRead} ] ; then 278 ((NbFiles=${FlagToRead})) 279 ((i=${NbFiles})) 280 else 281 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 282 i=2 283 fi 284 # 285 until [ $i -gt $NbFiles ]; do 286 # 287 eval flag_post=\${${ListFilesName}[$i]} > /dev/null 2>&1 288 # 289 if [ X${flag_post} != XNONE ] ; then 290 # 291 # For each comp and each file who needs post-processing 292 # determine which variables need time series. 293 # 294 FILE=$( echo ${flag_post} | awk "-FPost_" '{print $2}' ) 295 IGCM_card_DefineArrayFromOption ${card} Post_${FILE} TimeSeriesVars${Dimension} 296 IGCM_card_DefineVariableFromOption ${card} Post_${FILE} ChunckJob${Dimension} 297 # 298 # If TimeSeriesVars list is empty we skip 299 # 300 if [ $( eval echo \${${compname}_Post_${FILE}_TimeSeriesVars${Dimension}} ) = ${NULL_STR} ] ; then 301 # 302 IGCM_debug_Print 3 "Nothing to do for ${FILE} according to ${card}" 303 IGCM_debug_Print 3 "TimeSeriesVars${Dimension} for ${FILE} is empty" 304 (( i=i+3 )) 305 continue 306 # 307 fi 308 # 309 # If files/variables has been switch off by ChunckJob${Dimension}=0 we skip 310 # 311 if [ X$( eval echo \${${compname}_Post_${FILE}_ChunckJob${Dimension}} ) = XOFF ] ; then 312 IGCM_debug_Print 3 "Nothing to do for ${FILE} according to ${card}" 313 IGCM_debug_Print 3 "ChunckJob${Dimension}=OFF for ${FILE} so it has been switched off" 314 (( i=i+3 )) 315 continue 316 fi 317 # 318 # If we are not a Chunck type task, we skip files/variables handled by chunck task 319 # 320 if ( [ ! X${TsTask} = XChunck${Dimension} ] && [ ! X${TsTask} = X ] && [ ! XChunck${Dimension} = XChunck ] ) ; then 321 if [ ! $( eval echo \${${compname}_Post_${FILE}_ChunckJob${Dimension}} ) = NONE ] ; then 322 IGCM_debug_Print 3 "Nothing to do for ${FILE} TimeSeriesVars${Dimension} according to ${card}" 323 IGCM_debug_Print 3 "Let another chunck task do the job $( eval echo \${${compname}_Post_${FILE}_ChunckJob${Dimension}} )" 324 (( i=i+3 )) 325 continue 326 fi 327 fi 328 # 329 # Now on we know we have things to do 330 # 331 332 # 333 # We need coordinates axis to properly fill produced time series 334 # 335 IGCM_card_DefineArrayFromOption ${card} Post_${FILE} GatherWithInternal 336 # 337 if [ $( eval echo \${${compname}_Post_${FILE}_GatherWithInternal} ) = ${NULL_STR} ] ; then 338 # 339 IGCM_debug_Print 1 "ERROR !! We miss coordinate axis for ${FILE} according to ${card}" 340 IGCM_debug_Print 1 "So no time series will be produced for ${FILE} !!" 341 (( i=i+3 )) 342 continue 343 # 344 fi 345 # 346 # We need LIST of variables not allready produced (useful for standalone mode) 347 # 348 FlagDir=$( echo ${FILE} | awk -F "_" '{print $1}' ) 349 case ${FlagDir} in 350 *Y) TS_Dir=TS_YE ;; 351 *M) TS_Dir=TS_MO ;; 352 *D) TS_Dir=TS_DA ;; 353 HF) TS_Dir=TS_HF ;; 354 3H) TS_Dir=TS_HF ;; 355 INS) TS_Dir=TS_INS ;; 356 esac 357 # 358 count=0 359 for var in $( eval echo \${${compname}_Post_${FILE}_TimeSeriesVars${Dimension}[*]} ) ; do 360 # 361 DIRECTORY=${R_SAVE}/${comp}/Analyse/${TS_Dir} 362 TestedFile=${config_UserChoices_JobName}_${DateBegin}_${PeriodDateEnd}_${FlagDir}_${var}.nc 363 # 364 IGCM_sys_TestFileArchive ${DIRECTORY}/${TestedFile} 365 if [ ! $? = 0 ] ; then 366 eval set +A LISTE_VARS_${FILE} \${LISTE_VARS_${FILE}[*]} ${var} 367 ActiveComp=true 368 (( count = count + 1 )) 369 fi 370 done 371 # 372 if [ ${count} -gt 0 ] ; then 373 # 374 eval set +A LISTE_FILE_${comp} \${LISTE_FILE_${comp}[*]} ${FILE} 375 eval set +A LISTE_AXIS_${FILE} \${${compname}_Post_${FILE}_GatherWithInternal[*]} 376 # 377 if [ ! X${RebuildFrequency} = Xtrue ] ; then 378 IGCM_card_DefineArrayFromOption ${card} Post_${FILE} Patches 379 eval set +A LISTE_PATCHES_${FILE} \${${compname}_Post_${FILE}_Patches[*]} 380 if [ X$( eval echo \${LISTE_PATCHES_${FILE}[0]} ) != X${NULL_STR} ]; then 381 for Patch in $( eval echo \${LISTE_PATCHES_${FILE}[*]} ); do 382 if [ Xload${Patch} != X ] ; then 383 . ${libIGCM}/libIGCM_post/IGCM_${Patch}.ksh 384 eval load${Patch}=loaded 385 fi 386 done 387 fi 388 fi 389 fi 390 fi 391 (( i=i+3 )) 392 done 257 # 258 ActiveComp=false 259 # 260 IGCM_card_DefineArrayFromOption ${CARD_DIR}/config.card ListOfComponents ${comp} 261 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 262 # 263 card=${CARD_DIR}/COMP/${compname}.card 264 265 IGCM_card_DefineArrayFromOption ${card} OutputFiles List 266 # 267 ListFilesName=${compname}_OutputFiles_List 268 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 269 # 270 if [ X${FileName0} != X${NULL_STR} ] ; then 271 # 272 #IGCM_debug_Print 1 "Component : ${compname}" 273 # 274 # INITIALISATION 275 # 276 typeset i 277 if [ ${FlagToRead} ] ; then 278 ((NbFiles=${FlagToRead})) 279 ((i=${NbFiles})) 280 else 281 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 282 i=2 393 283 fi 394 284 # 395 if [ ${ActiveComp} = true ] ; then 396 set +A ActiveListOfComponents ${ActiveListOfComponents[*]} ${comp} 397 fi 285 until [ $i -gt $NbFiles ]; do 286 # 287 eval flag_post=\${${ListFilesName}[$i]} > /dev/null 2>&1 288 # 289 if [ X${flag_post} != XNONE ] ; then 290 # 291 # For each comp and each file who needs post-processing 292 # determine which variables need time series. 293 # 294 FILE=$( echo ${flag_post} | awk "-FPost_" '{print $2}' ) 295 IGCM_card_DefineArrayFromOption ${card} Post_${FILE} TimeSeriesVars${Dimension} 296 IGCM_card_DefineVariableFromOption ${card} Post_${FILE} ChunckJob${Dimension} 297 # 298 # If TimeSeriesVars list is empty we skip 299 # 300 if [ $( eval echo \${${compname}_Post_${FILE}_TimeSeriesVars${Dimension}} ) = ${NULL_STR} ] ; then 301 # 302 IGCM_debug_Print 3 "Nothing to do for ${FILE} according to ${card}" 303 IGCM_debug_Print 3 "TimeSeriesVars${Dimension} for ${FILE} is empty" 304 (( i=i+3 )) 305 continue 306 # 307 fi 308 # 309 # If files/variables has been switch off by ChunckJob${Dimension}=0 we skip 310 # 311 if [ X$( eval echo \${${compname}_Post_${FILE}_ChunckJob${Dimension}} ) = XOFF ] ; then 312 IGCM_debug_Print 3 "Nothing to do for ${FILE} according to ${card}" 313 IGCM_debug_Print 3 "ChunckJob${Dimension}=OFF for ${FILE} so it has been switched off" 314 (( i=i+3 )) 315 continue 316 fi 317 # 318 # If we are not a Chunck type task, we skip files/variables handled by chunck task 319 # 320 if ( [ ! X${TsTask} = XChunck${Dimension} ] && [ ! X${TsTask} = X ] && [ ! XChunck${Dimension} = XChunck ] ) ; then 321 if [ ! $( eval echo \${${compname}_Post_${FILE}_ChunckJob${Dimension}} ) = NONE ] ; then 322 IGCM_debug_Print 3 "Nothing to do for ${FILE} TimeSeriesVars${Dimension} according to ${card}" 323 IGCM_debug_Print 3 "Let another chunck task do the job $( eval echo \${${compname}_Post_${FILE}_ChunckJob${Dimension}} )" 324 (( i=i+3 )) 325 continue 326 fi 327 fi 328 # 329 # Now on we know we have things to do 330 # 331 332 # 333 # We need coordinates axis to properly fill produced time series 334 # 335 IGCM_card_DefineArrayFromOption ${card} Post_${FILE} GatherWithInternal 336 # 337 if [ $( eval echo \${${compname}_Post_${FILE}_GatherWithInternal} ) = ${NULL_STR} ] ; then 338 # 339 IGCM_debug_Print 1 "ERROR !! We miss coordinate axis for ${FILE} according to ${card}" 340 IGCM_debug_Print 1 "So no time series will be produced for ${FILE} !!" 341 (( i=i+3 )) 342 continue 343 # 344 fi 345 # 346 # We need LIST of variables not allready produced (useful for standalone mode) 347 # 348 FlagDir=$( echo ${FILE} | awk -F "_" '{print $1}' ) 349 case ${FlagDir} in 350 *Y) TS_Dir=TS_YE ;; 351 *M) TS_Dir=TS_MO ;; 352 *D) TS_Dir=TS_DA ;; 353 HF) TS_Dir=TS_HF ;; 354 3H) TS_Dir=TS_HF ;; 355 INS) TS_Dir=TS_INS ;; 356 esac 357 # 358 count=0 359 for var in $( eval echo \${${compname}_Post_${FILE}_TimeSeriesVars${Dimension}[*]} ) ; do 360 # 361 DIRECTORY=${R_SAVE}/${comp}/Analyse/${TS_Dir} 362 TestedFile=${config_UserChoices_JobName}_${DateBegin}_${PeriodDateEnd}_${FlagDir}_${var}.nc 363 # 364 IGCM_sys_TestFileArchive ${DIRECTORY}/${TestedFile} 365 if [ ! $? = 0 ] ; then 366 eval set +A LISTE_VARS_${FILE} \${LISTE_VARS_${FILE}[*]} ${var} 367 ActiveComp=true 368 (( count = count + 1 )) 369 fi 370 done 371 # 372 if [ ${count} -gt 0 ] ; then 373 # 374 eval set +A LISTE_FILE_${comp} \${LISTE_FILE_${comp}[*]} ${FILE} 375 eval set +A LISTE_AXIS_${FILE} \${${compname}_Post_${FILE}_GatherWithInternal[*]} 376 # 377 if [ ! X${RebuildFrequency} = Xtrue ] ; then 378 IGCM_card_DefineArrayFromOption ${card} Post_${FILE} Patches 379 eval set +A LISTE_PATCHES_${FILE} \${${compname}_Post_${FILE}_Patches[*]} 380 if [ X$( eval echo \${LISTE_PATCHES_${FILE}[0]} ) != X${NULL_STR} ]; then 381 for Patch in $( eval echo \${LISTE_PATCHES_${FILE}[*]} ); do 382 if [ Xload${Patch} != X ] ; then 383 . ${libIGCM}/libIGCM_post/IGCM_${Patch}.ksh 384 eval load${Patch}=loaded 385 fi 386 done 387 fi 388 fi 389 fi 390 fi 391 (( i=i+3 )) 392 done 393 fi 394 # 395 if [ ${ActiveComp} = true ] ; then 396 set +A ActiveListOfComponents ${ActiveListOfComponents[*]} ${comp} 397 fi 398 398 done 399 399 … … 414 414 415 415 if [ ${StandAlone} != true ] ; then 416 417 418 419 420 421 ## Time Series Job allready running422 #IGCM_debug_Print 1 "Time Series Job allready running exit"423 #exit424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 #"IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesCompleted ;\439 416 Running_Flag=$( IGCM_sys_RshMaster "IGCM_card_DefineVariableFromOption \ 417 ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesRunning ; \ 418 echo \${run_PostProcessing_TimeSeriesRunning}" ) 419 420 #if [ X${Running_Flag} = Xy ] ; then 421 # # Time Series Job allready running 422 # IGCM_debug_Print 1 "Time Series Job allready running exit" 423 # exit 424 #fi 425 # Now run.card know we are running 426 427 428 429 430 IGCM_sys_RshMaster IGCM_card_WriteOption ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesRunning "y" 431 432 433 434 435 436 # Get information from last execution 437 #CompletedFlag=$( IGCM_sys_RshMaster \ 438 # "IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesCompleted ;\ 439 # echo \${run_PostProcessing_TimeSeriesCompleted}" ) 440 440 fi 441 441 … … 443 443 444 444 if ( [ X${CompletedFlag} = X ] || [ X${CompletedFlag} = X$( IGCM_date_AddDaysToGregorianDate ${DateBegin} -1 ) ] ) ; then 445 446 447 448 445 # First Time Series Submission 446 FIRST_PASS=TRUE 447 Length=$( IGCM_date_DaysInPreviousPeriod ${DateBegin} ${config_UserChoices_PeriodLength} begin) 448 DATE_FIN_JOB_B=$( IGCM_date_AddDaysToGregorianDate ${DateBegin} $(( Length - 1 )) ) 449 449 else 450 # Last Completed Time Series 451 FIRST_PASS=FALSE 452 DATE_FIN_JOB_B=${CompletedFlag} 453 date=${DateBegin}_${DATE_FIN_JOB_B} 454 for comp in ${config_ListOfComponents[*]} ; do 455 # 456 IGCM_sys_Mkdir ${RUN_DIR_PATH}/${comp} 457 # 458 IGCM_sys_Cd ${RUN_DIR_PATH}/${comp} 459 # 460 #set -A liste_file 461 unset liste_file 462 # 463 file_path=${R_SAVE}/${comp}/Analyse 464 # 465 i=0 466 file=${NULL_STR} 467 # 468 for file in $( eval echo \${LISTE_FILE_${comp}[*]} ); do 469 # 470 # Determine in which output can we find file 471 # IE : Analyse/TS or Analyse/DA2TS or ... 472 # 473 FlagDir=$( echo ${file} | awk -F "_" '{print $1}' ) 474 case ${FlagDir} in 475 *Y) TS_Dir=TS_YE ;; 476 *M) TS_Dir=TS_MO ;; 477 *D) TS_Dir=TS_DA ;; 478 HF) TS_Dir=TS_HF ;; 479 3H) TS_Dir=TS_HF ;; 480 INS) TS_Dir=TS_INS ;; 481 esac 482 for var in $( eval echo \${LISTE_VARS_${file}[*]} ) ; do 483 # 484 #set +A liste_file ${liste_file[*]} ${file_path}/${TS_Dir}/${config_UserChoices_JobName}_${date}_${FlagDir}_${var}.nc 485 liste_file[${#liste_file[*]}]=${file_path}/${TS_Dir}/${config_UserChoices_JobName}_${date}_${FlagDir}_${var}.nc 486 # 487 done 488 done 489 if [ X${file} != X${NULL_STR} ] ; then 490 IGCM_sys_Get /l liste_file[*] ${RUN_DIR_PATH}/${comp} 491 # Even if some files are missing we tried to continue 492 # Either ListVar in compname.card are asked but not present in original history file 493 # Either a previous TS task failed 494 ExitFlag=false 495 IGCM_debug_Verif_Exit_Post 496 fi 450 # Last Completed Time Series 451 FIRST_PASS=FALSE 452 DATE_FIN_JOB_B=${CompletedFlag} 453 date=${DateBegin}_${DATE_FIN_JOB_B} 454 for comp in ${config_ListOfComponents[*]} ; do 455 # 456 IGCM_sys_Mkdir ${RUN_DIR_PATH}/${comp} 457 # 458 IGCM_sys_Cd ${RUN_DIR_PATH}/${comp} 459 # 460 #set -A liste_file 461 unset liste_file 462 # 463 file_path=${R_SAVE}/${comp}/Analyse 464 # 465 i=0 466 file=${NULL_STR} 467 # 468 for file in $( eval echo \${LISTE_FILE_${comp}[*]} ); do 469 # 470 # Determine in which output can we find file 471 # IE : Analyse/TS or Analyse/DA2TS or ... 472 # 473 FlagDir=$( echo ${file} | awk -F "_" '{print $1}' ) 474 case ${FlagDir} in 475 *Y) TS_Dir=TS_YE ;; 476 *M) TS_Dir=TS_MO ;; 477 *D) TS_Dir=TS_DA ;; 478 HF) TS_Dir=TS_HF ;; 479 3H) TS_Dir=TS_HF ;; 480 INS) TS_Dir=TS_INS ;; 481 esac 482 for var in $( eval echo \${LISTE_VARS_${file}[*]} ) ; do 483 # 484 #set +A liste_file ${liste_file[*]} ${file_path}/${TS_Dir}/${config_UserChoices_JobName}_${date}_${FlagDir}_${var}.nc 485 liste_file[${#liste_file[*]}]=${file_path}/${TS_Dir}/${config_UserChoices_JobName}_${date}_${FlagDir}_${var}.nc 486 # 487 done 497 488 done 498 # 499 LEVEL=0 500 # 489 if [ X${file} != X${NULL_STR} ] ; then 490 IGCM_sys_Get /l liste_file[*] ${RUN_DIR_PATH}/${comp} 491 # Even if some files are missing we tried to continue 492 # Either ListVar in compname.card are asked but not present in original history file 493 # Either a previous TS task failed 494 ExitFlag=false 495 IGCM_debug_Verif_Exit_Post 496 fi 497 done 498 # 499 LEVEL=0 500 # 501 501 fi 502 502 … … 513 513 514 514 if [ ${DoJob} = true ] ; then 515 516 517 518 519 515 while [ ${DATE_COUNT} -lt ${PeriodDateEnd} ] ; do 516 (( NBRE_FILE_TOT = NBRE_FILE_TOT + 1 )) 517 Length=$( IGCM_date_DaysInNextPeriod ${DATE_COUNT} ${config_UserChoices_PeriodLength} ) 518 DATE_COUNT=$( IGCM_date_AddDaysToGregorianDate ${DATE_COUNT} ${Length} ) 519 done 520 520 else 521 521 NBRE_FILE_TOT=0 522 522 fi 523 523 524 524 if [ ${NBRE_FILE_TOT} -le ${UNIX_MAX_LIMIT} ] ; then 525 525 NBRE_TOUR=1 526 526 elif [ ${NBRE_FILE_TOT}%${UNIX_MAX_LIMIT} -eq 0 ] ; then 527 527 let NBRE_TOUR=${NBRE_FILE_TOT}/${UNIX_MAX_LIMIT} 528 528 else 529 529 let NBRE_TOUR=${NBRE_FILE_TOT}/${UNIX_MAX_LIMIT}+1 530 530 fi 531 531 … … 538 538 539 539 while [ ${CURRENT_LOOP} -le ${NBRE_TOUR} ] ; do 540 541 if [ ${NBRE_FILE_TOT} -le ${UNIX_MAX_LIMIT} ] ; then 542 # - LEVEL 1 : JUST ONE LOOP TO COMPLETE 543 NBRE_FILE_LOOP=${NBRE_FILE_TOT} 544 545 if [ ${FIRST_PASS} = TRUE ] ; then 546 DATE_COURANTE=${DATE_FIN_JOB_B_LOOP} 547 else 548 Length=$( IGCM_date_DaysInNextPeriod ${DATE_FIN_JOB_B_LOOP} ${config_UserChoices_PeriodLength} ) 549 DATE_COURANTE=$( IGCM_date_AddDaysToGregorianDate ${DATE_FIN_JOB_B_LOOP} ${Length} ) 550 fi 551 552 DATE_FIN=${PeriodDateEnd} 553 DATE_FIN_JOB_B_LOOP_PREC=${DATE_FIN_JOB_B_LOOP} 554 555 [ -n "${DATE_LOOP}" ] && DATE_FIN_JOB_B_LOOP=${DATE_LOOP} 556 [ -n "${LEVEL}" ] && FLAG_B="TRUE" || FLAG_B="FALSE" 557 558 LEVEL=1 559 DEPOT="TRUE" 560 elif [ ${CURRENT_LOOP} -ne ${NBRE_TOUR} ] ; then 561 # - LEVEL 2 : WE ARE IN THE "DEEP" LOOP 562 NBRE_FILE_LOOP=${UNIX_MAX_LIMIT} 563 564 if [ ! ${FIRST_PASS} = TRUE ] && [ ${CURRENT_LOOP} -eq 1 ] ; then 565 Length=$( IGCM_date_DaysInNextPeriod ${DATE_FIN_JOB_B_LOOP} ${config_UserChoices_PeriodLength} ) 566 DATE_COURANTE=$( IGCM_date_AddDaysToGregorianDate ${DATE_FIN_JOB_B_LOOP} ${Length} ) 567 elif [ -z "${DATE_COURANTE}" ] ; then 568 DATE_COURANTE=${DATE_FIN_JOB_B} 569 else 570 Length=$( IGCM_date_DaysInNextPeriod ${DATE_FIN} ${config_UserChoices_PeriodLength} ) 571 DATE_COURANTE=$( IGCM_date_AddDaysToGregorianDate ${DATE_FIN} ${Length} ) 572 fi 573 574 (( TotLength = 0 )) 575 COMPTEUR=1 576 DATE_LOOP=${DATE_COURANTE} 577 578 while [ ${COMPTEUR} -lt ${NBRE_FILE_LOOP} ] ; do 579 # 580 Length=$( IGCM_date_DaysInNextPeriod ${DATE_LOOP} ${config_UserChoices_PeriodLength} ) 581 DATE_LOOP=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} ${Length} ) 582 (( TotLength = TotLength + Length )) 583 (( COMPTEUR = COMPTEUR + 1 )) 584 # 585 done # while [ ${COMPTEUR} -le ${NBRE_FILE_LOOP} ] done 586 DATE_FIN=$( IGCM_date_AddDaysToGregorianDate ${DATE_COURANTE} ${TotLength} ) 587 588 [ -n "${DATE_LOOP}" ] && DATE_FIN_JOB_B_LOOP_PREC=${DATE_FIN_JOB_B_LOOP} ; DATE_FIN_JOB_B_LOOP=${DATE_LOOP} 589 [ -n "${LEVEL}" ] && [ ${LEVEL} -eq 0 ] && FLAG_B="TRUE" || [ ${CURRENT_LOOP} -gt 1 ] && FLAG_B="TRUE" || FLAG_B="FALSE" 590 DEPOT="FALSE" 591 LEVEL=2 540 541 if [ ${NBRE_FILE_TOT} -le ${UNIX_MAX_LIMIT} ] ; then 542 # - LEVEL 1 : JUST ONE LOOP TO COMPLETE 543 NBRE_FILE_LOOP=${NBRE_FILE_TOT} 544 545 if [ ${FIRST_PASS} = TRUE ] ; then 546 DATE_COURANTE=${DATE_FIN_JOB_B_LOOP} 592 547 else 593 # - LEVEL 3 : WE ARE IN THE LAST LOOP 594 NBRE_FILE_LOOP=$(( ${NBRE_FILE_TOT} % ( ${UNIX_MAX_LIMIT} * ( ${CURRENT_LOOP} - 1 ) ) )) 595 [ ${NBRE_FILE_LOOP} -eq 0 ] && NBRE_FILE_LOOP=${UNIX_MAX_LIMIT} 596 597 Length=$( IGCM_date_DaysInNextPeriod ${DATE_FIN} ${config_UserChoices_PeriodLength} ) 598 DATE_COURANTE=$(IGCM_date_AddDaysToGregorianDate ${DATE_FIN} ${Length} ) 599 DATE_FIN=${PeriodDateEnd} 600 [ -n "${DATE_LOOP}" ] && DATE_FIN_JOB_B_LOOP_PREC=${DATE_FIN_JOB_B_LOOP} ; DATE_FIN_JOB_B_LOOP=${DATE_LOOP} 601 602 LEVEL=3 603 DEPOT="TRUE" 604 FLAG_B="TRUE" 548 Length=$( IGCM_date_DaysInNextPeriod ${DATE_FIN_JOB_B_LOOP} ${config_UserChoices_PeriodLength} ) 549 DATE_COURANTE=$( IGCM_date_AddDaysToGregorianDate ${DATE_FIN_JOB_B_LOOP} ${Length} ) 605 550 fi 606 551 607 # THEN FOR EACH FILE TYPE WE LOOP BETWEEN DATE_COURANTE AND DATE_FIN. 608 for comp in ${config_ListOfComponents[*]} ; do 609 # 610 IGCM_sys_Mkdir ${RUN_DIR_PATH}/${comp} 611 # 612 IGCM_sys_Cd ${RUN_DIR_PATH}/${comp} 613 # 614 eval R_OUT_${comp}=${R_SAVE}/${comp} 615 # 616 i=0 617 # 618 for file in $( eval echo \${LISTE_FILE_${comp}[*]} ); do 619 # 620 # Determine in which output can we find file 621 # IE : Output/MO or Output/DA or ... 622 # 623 FlagDir=$( echo ${file} | awk -F "_" '{print $1}' ) 624 case ${FlagDir} in 625 *Y) TS_Dir=TS_YE ; FreqDir=YE ;; 626 *M) TS_Dir=TS_MO ; FreqDir=MO ;; 627 *D) TS_Dir=TS_DA ; FreqDir=DA ;; 628 HF) TS_Dir=TS_HF ; FreqDir=HF ;; 629 3H) TS_Dir=TS_HF ; FreqDir=HF ;; 630 INS) TS_Dir=TS_INS ; FreqDir=INS ;; 631 *) 632 IGCM_debug_Print 1 "Error in FlagDir=${FlagDir} for file ${file}." 633 IGCM_sys_Exit "Job create_ts" ;; 634 esac 635 636 # Initialize array 637 #set -A liste_file 638 #set -A liste_file_tmp 639 unset liste_file 640 unset liste_file_tmp 641 eval file_path=\${R_OUT_${comp}}/Output/${FreqDir}/ 642 643 COMPTEUR=1 644 DATE_LOOP=${DATE_COURANTE} 645 646 while [ ${COMPTEUR} -le ${NBRE_FILE_LOOP} ] ; do 647 # 648 Length1=$( IGCM_date_DaysInPreviousPeriod ${DATE_LOOP} ${config_UserChoices_PeriodLength} end) 649 DATE_TAB=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} $(( 1 - Length1 )) )_${DATE_LOOP} 650 651 Length2=$( IGCM_date_DaysInNextPeriod ${DATE_LOOP} ${config_UserChoices_PeriodLength} ) 652 DATE_LOOP=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} ${Length2} ) 653 654 #set +A liste_file ${liste_file[*]} ${file_path}${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc 655 #set +A liste_file_tmp ${liste_file_tmp[*]} ${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc 656 liste_file[${#liste_file[*]}]=${file_path}${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc 657 liste_file_tmp[${#liste_file_tmp[*]}]=${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc 658 (( COMPTEUR = COMPTEUR + 1 )) 659 # 660 done # while [ ${COMPTEUR} -le ${NBRE_FILE_LOOP} ] done 661 DATE_LOOP=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} -${Length2} ) 662 663 # Get selected files 664 IGCM_sys_Get /l liste_file[*] ${RUN_DIR_PATH}/${comp} 665 IGCM_debug_Verif_Exit_Post 666 667 # Apply IGCM_Patch if needed 668 if [ ! X${RebuildFrequency} = Xtrue ] ; then 669 if [ X$( eval echo \${LISTE_PATCHES_${file}[0]} ) != X${NULL_STR} ]; then 670 for file_t in $( eval echo ${liste_file_tmp[*]} ); do 671 for Patch in $( eval echo \${LISTE_PATCHES_${file}[*]} ); do 672 IGCM_${Patch} ${file_t} 673 IGCM_debug_Verif_Exit_Post 674 done 675 done 676 fi 677 fi 678 679 # WE CAN CONCATENATE FILES AT THIS POINT 680 [ "${FLAG_B}" = "TRUE" ] && DATE_BUILD_B=${DateBegin}_${DATE_FIN_JOB_B_LOOP_PREC} 681 Length=$( IGCM_date_DaysInPreviousPeriod ${DATE_COURANTE} ${config_UserChoices_PeriodLength} end) 682 DATE_BUILD1=$( IGCM_date_AddDaysToGregorianDate ${DATE_COURANTE} -$(( Length - 1 )) ) 683 DATE_BUILD=${DATE_BUILD1}_${DATE_FIN} 684 DATE_BUILD_END=${DateBegin}_${DATE_FIN} 685 686 liste_coord=" " 687 for axis in $( eval echo \${LISTE_AXIS_${file}[*]} ); do 688 liste_coord=${liste_coord}${axis}"," 689 done 690 691 # Time axis must be the last dimension 692 time_axis=${axis} 693 694 # SWITCH BETWEEN MODEL TO FIT PARTICULAR CASE 695 for var in $( eval echo \${LISTE_VARS_${file}[*]} ) ; do 696 # 697 if [ "${FLAG_B}" = "TRUE" ] ; then 698 # WE CONCATENATE WITH EXISTING FILES 699 file1=${config_UserChoices_JobName}_${DATE_BUILD_B}_${FlagDir}_${var}.nc 700 file_out=${config_UserChoices_JobName}_${DATE_BUILD_END}_${FlagDir}_${var}.nc 701 IGCM_sys_ncrcat --hst -v ${liste_coord}${var} ${file1} ${liste_file_tmp[*]} ${file_out} 702 # 703 IGCM_sys_Rm ${file1} 704 if [ ! "${DEPOT}" = "TRUE" ] ; then 705 eval IGCM_sys_Put_Out ${file_out} \${R_OUT_${comp}}/Analyse/${TS_Dir}/${file_out} 706 # "${file1} = file_before ? 707 [ ! "${file1}" = "${config_UserChoices_JobName}_${DateBegin}_${DATE_FIN_JOB_B}_${FlagDir}_${var}.nc" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/${TS_Dir} ${file1} ${file_out} 708 fi 709 710 ExitFlag=false 711 else 712 # OR NOT 713 IGCM_sys_ncrcat --hst -v ${liste_coord}${var} ${liste_file_tmp[*]} ${config_UserChoices_JobName}_${DATE_BUILD}_${FlagDir}_${var}.nc 714 fi 715 716 # 717 if [ "${DEPOT}" = "TRUE" ] ; then 718 # WE PUT FINAL FILE ON FILE SYSTEM 719 [ "${FLAG_B}" = "FALSE" ] && file_out=${config_UserChoices_JobName}_${DATE_BUILD}_${FlagDir}_${var}.nc 720 file_before=${config_UserChoices_JobName}_${DateBegin}_${DATE_FIN_JOB_B}_${FlagDir}_${var}.nc 721 # 722 eval IGCM_sys_Put_Out ${file_out} \${R_OUT_${comp}}/Analyse/${TS_Dir}/${file_out} 723 [ "${FLAG_B}" = "TRUE" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/${TS_Dir} ${file_before} ${file_out} 724 if [ ! "X${file1}" = "X" ] ; then 725 [ ! "${file1}" = "${config_UserChoices_JobName}_${DateBegin}_${DATE_FIN_JOB_B}_${FlagDir}_${var}.nc" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/${TS_Dir} ${file1} ${file_out} 726 fi 727 # 728 if ( [ ${FlagDir} = "1M" ] && [ -f ${file_out} ] ) ; then 729 file_before_YE=${config_UserChoices_JobName}_${DateBegin}_${DATE_FIN_JOB_B}_1Y_${var}.nc 730 file_out_YE=${config_UserChoices_JobName}_${DATE_BUILD_END}_1Y_${var}.nc 731 # 732 # Compute yearly average considering calendar 733 # and set date of the mid year to 01/07 at 00:00 734 IGCM_sys_cdo -settime,00:00 -setday,1 -setmon,7 -settunits,days -divdpy -yearsum -muldpm -selvar,${var} ${file_out} ${file_out_YE} 735 # Extract all ancillary variables except $var, they will be appended after the cdo command 736 # Needed because cdo applies calculs on all variables 737 IGCM_sys_ncks -Oh -x -v ${var} ${file_out} ${file_out_YE%%.nc}_tmp1.nc 738 # This will remove the time axis because cdo rewrites severely with only considered useful variables 739 IGCM_sys_cdo -mulc,1 ${file_out_YE%%.nc}_tmp1.nc ${file_out_YE%%.nc}_tmp2.nc 2>/dev/null 740 if [ $? -eq 0 ] ; then 741 # Now append all ancillary variables if previous cdo operator ok 742 IGCM_sys_ncks -h -A ${file_out_YE%%.nc}_tmp2.nc ${file_out_YE} 743 fi 744 745 # Put global history attribut 746 IGCM_sys_ncatted -Oh -a history,global,o,c,"build by libIGCM/create_ts" ${file_out_YE} 747 # 748 eval IGCM_sys_Put_Out ${file_out_YE} \${R_OUT_${comp}}/Analyse/TS_MO_YE/${file_out_YE} 749 [ "${FLAG_B}" = "TRUE" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/TS_MO_YE/ ${file_before_YE} ${file_out_YE} 750 IGCM_sys_Rm ${file_out_YE%%.nc}_tmp*.nc 751 fi 752 # 753 IGCM_sys_Rm ${file_out} 754 ExitFlag=false 755 # 756 fi 757 # 758 done # for var in ${liste_var} ; do 759 IGCM_sys_Rm ${liste_file_tmp[*]} 760 done # for file in ${liste_file_brut} do 761 done # for comp in ${config_ListOfComponents[*]} ; do 762 # GO AHEAD IN DEEPEST LOOP 763 (( CURRENT_LOOP = CURRENT_LOOP + 1 )) 552 DATE_FIN=${PeriodDateEnd} 553 DATE_FIN_JOB_B_LOOP_PREC=${DATE_FIN_JOB_B_LOOP} 554 555 [ -n "${DATE_LOOP}" ] && DATE_FIN_JOB_B_LOOP=${DATE_LOOP} 556 [ -n "${LEVEL}" ] && FLAG_B="TRUE" || FLAG_B="FALSE" 557 558 LEVEL=1 559 DEPOT="TRUE" 560 elif [ ${CURRENT_LOOP} -ne ${NBRE_TOUR} ] ; then 561 # - LEVEL 2 : WE ARE IN THE "DEEP" LOOP 562 NBRE_FILE_LOOP=${UNIX_MAX_LIMIT} 563 564 if [ ! ${FIRST_PASS} = TRUE ] && [ ${CURRENT_LOOP} -eq 1 ] ; then 565 Length=$( IGCM_date_DaysInNextPeriod ${DATE_FIN_JOB_B_LOOP} ${config_UserChoices_PeriodLength} ) 566 DATE_COURANTE=$( IGCM_date_AddDaysToGregorianDate ${DATE_FIN_JOB_B_LOOP} ${Length} ) 567 elif [ -z "${DATE_COURANTE}" ] ; then 568 DATE_COURANTE=${DATE_FIN_JOB_B} 569 else 570 Length=$( IGCM_date_DaysInNextPeriod ${DATE_FIN} ${config_UserChoices_PeriodLength} ) 571 DATE_COURANTE=$( IGCM_date_AddDaysToGregorianDate ${DATE_FIN} ${Length} ) 572 fi 573 574 (( TotLength = 0 )) 575 COMPTEUR=1 576 DATE_LOOP=${DATE_COURANTE} 577 578 while [ ${COMPTEUR} -lt ${NBRE_FILE_LOOP} ] ; do 579 # 580 Length=$( IGCM_date_DaysInNextPeriod ${DATE_LOOP} ${config_UserChoices_PeriodLength} ) 581 DATE_LOOP=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} ${Length} ) 582 (( TotLength = TotLength + Length )) 583 (( COMPTEUR = COMPTEUR + 1 )) 584 # 585 done # while [ ${COMPTEUR} -le ${NBRE_FILE_LOOP} ] done 586 DATE_FIN=$( IGCM_date_AddDaysToGregorianDate ${DATE_COURANTE} ${TotLength} ) 587 588 [ -n "${DATE_LOOP}" ] && DATE_FIN_JOB_B_LOOP_PREC=${DATE_FIN_JOB_B_LOOP} ; DATE_FIN_JOB_B_LOOP=${DATE_LOOP} 589 [ -n "${LEVEL}" ] && [ ${LEVEL} -eq 0 ] && FLAG_B="TRUE" || [ ${CURRENT_LOOP} -gt 1 ] && FLAG_B="TRUE" || FLAG_B="FALSE" 590 DEPOT="FALSE" 591 LEVEL=2 592 else 593 # - LEVEL 3 : WE ARE IN THE LAST LOOP 594 NBRE_FILE_LOOP=$(( ${NBRE_FILE_TOT} % ( ${UNIX_MAX_LIMIT} * ( ${CURRENT_LOOP} - 1 ) ) )) 595 [ ${NBRE_FILE_LOOP} -eq 0 ] && NBRE_FILE_LOOP=${UNIX_MAX_LIMIT} 596 597 Length=$( IGCM_date_DaysInNextPeriod ${DATE_FIN} ${config_UserChoices_PeriodLength} ) 598 DATE_COURANTE=$(IGCM_date_AddDaysToGregorianDate ${DATE_FIN} ${Length} ) 599 DATE_FIN=${PeriodDateEnd} 600 [ -n "${DATE_LOOP}" ] && DATE_FIN_JOB_B_LOOP_PREC=${DATE_FIN_JOB_B_LOOP} ; DATE_FIN_JOB_B_LOOP=${DATE_LOOP} 601 602 LEVEL=3 603 DEPOT="TRUE" 604 FLAG_B="TRUE" 605 fi 606 607 # THEN FOR EACH FILE TYPE WE LOOP BETWEEN DATE_COURANTE AND DATE_FIN. 608 for comp in ${config_ListOfComponents[*]} ; do 609 # 610 IGCM_sys_Mkdir ${RUN_DIR_PATH}/${comp} 611 # 612 IGCM_sys_Cd ${RUN_DIR_PATH}/${comp} 613 # 614 eval R_OUT_${comp}=${R_SAVE}/${comp} 615 # 616 i=0 617 # 618 for file in $( eval echo \${LISTE_FILE_${comp}[*]} ); do 619 # 620 # Determine in which output we can find file 621 # IE : Output/MO or Output/DA or ... 622 # 623 FlagDir=$( echo ${file} | awk -F "_" '{print $1}' ) 624 case ${FlagDir} in 625 *Y) TS_Dir=TS_YE ; FreqDir=YE ;; 626 *M) TS_Dir=TS_MO ; FreqDir=MO ;; 627 *D) TS_Dir=TS_DA ; FreqDir=DA ;; 628 HF) TS_Dir=TS_HF ; FreqDir=HF ;; 629 3H) TS_Dir=TS_HF ; FreqDir=HF ;; 630 INS) TS_Dir=TS_INS ; FreqDir=INS ;; 631 *) IGCM_debug_Print 1 "Error in FlagDir=${FlagDir} for file ${file}." 632 IGCM_sys_Exit "Job create_ts" ;; 633 esac 634 635 # Initialize array 636 #set -A liste_file 637 #set -A liste_file_tmp 638 unset liste_file 639 unset liste_file_tmp 640 eval file_path=\${R_OUT_${comp}}/Output/${FreqDir}/ 641 642 COMPTEUR=1 643 DATE_LOOP=${DATE_COURANTE} 644 645 while [ ${COMPTEUR} -le ${NBRE_FILE_LOOP} ] ; do 646 # 647 Length1=$( IGCM_date_DaysInPreviousPeriod ${DATE_LOOP} ${config_UserChoices_PeriodLength} end) 648 DATE_TAB=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} $(( 1 - Length1 )) )_${DATE_LOOP} 649 650 Length2=$( IGCM_date_DaysInNextPeriod ${DATE_LOOP} ${config_UserChoices_PeriodLength} ) 651 DATE_LOOP=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} ${Length2} ) 652 653 #set +A liste_file ${liste_file[*]} ${file_path}${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc 654 #set +A liste_file_tmp ${liste_file_tmp[*]} ${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc 655 liste_file[${#liste_file[*]}]=${file_path}${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc 656 liste_file_tmp[${#liste_file_tmp[*]}]=${config_UserChoices_JobName}_${DATE_TAB}_${file}.nc 657 (( COMPTEUR = COMPTEUR + 1 )) 658 # 659 done # while [ ${COMPTEUR} -le ${NBRE_FILE_LOOP} ] done 660 DATE_LOOP=$( IGCM_date_AddDaysToGregorianDate ${DATE_LOOP} -${Length2} ) 661 662 # Get selected files 663 IGCM_sys_Get /l liste_file[*] ${RUN_DIR_PATH}/${comp} 664 IGCM_debug_Verif_Exit_Post 665 666 # Apply IGCM_Patch if needed 667 if [ ! X${RebuildFrequency} = Xtrue ] ; then 668 if [ X$( eval echo \${LISTE_PATCHES_${file}[0]} ) != X${NULL_STR} ]; then 669 for file_t in $( eval echo ${liste_file_tmp[*]} ); do 670 for Patch in $( eval echo \${LISTE_PATCHES_${file}[*]} ); do 671 IGCM_${Patch} ${file_t} 672 IGCM_debug_Verif_Exit_Post 673 done 674 done 675 fi 676 fi 677 678 # WE CAN CONCATENATE FILES AT THIS POINT 679 [ "${FLAG_B}" = "TRUE" ] && DATE_BUILD_B=${DateBegin}_${DATE_FIN_JOB_B_LOOP_PREC} 680 Length=$( IGCM_date_DaysInPreviousPeriod ${DATE_COURANTE} ${config_UserChoices_PeriodLength} end) 681 DATE_BUILD1=$( IGCM_date_AddDaysToGregorianDate ${DATE_COURANTE} -$(( Length - 1 )) ) 682 DATE_BUILD=${DATE_BUILD1}_${DATE_FIN} 683 DATE_BUILD_END=${DateBegin}_${DATE_FIN} 684 685 liste_coord=" " 686 for axis in $( eval echo \${LISTE_AXIS_${file}[*]} ); do 687 liste_coord=${liste_coord}${axis}"," 688 done 689 690 # Time axis must be the last dimension 691 time_axis=${axis} 692 693 # SWITCH BETWEEN MODEL TO FIT PARTICULAR CASE 694 for var in $( eval echo \${LISTE_VARS_${file}[*]} ) ; do 695 # 696 if [ "${FLAG_B}" = "TRUE" ] ; then 697 # WE CONCATENATE WITH EXISTING FILES 698 file1=${config_UserChoices_JobName}_${DATE_BUILD_B}_${FlagDir}_${var}.nc 699 file_out=${config_UserChoices_JobName}_${DATE_BUILD_END}_${FlagDir}_${var}.nc 700 IGCM_sys_ncrcat --hst -v ${liste_coord}${var} ${file1} ${liste_file_tmp[*]} ${file_out} 701 # 702 IGCM_sys_Rm ${file1} 703 if [ ! "${DEPOT}" = "TRUE" ] ; then 704 eval IGCM_sys_Put_Out ${file_out} \${R_OUT_${comp}}/Analyse/${TS_Dir}/${file_out} 705 # "${file1} = file_before ? 706 [ ! "${file1}" = "${config_UserChoices_JobName}_${DateBegin}_${DATE_FIN_JOB_B}_${FlagDir}_${var}.nc" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/${TS_Dir} ${file1} ${file_out} 707 fi 708 709 ExitFlag=false 710 else 711 # OR NOT 712 IGCM_sys_ncrcat --hst -v ${liste_coord}${var} ${liste_file_tmp[*]} ${config_UserChoices_JobName}_${DATE_BUILD}_${FlagDir}_${var}.nc 713 fi 714 715 # 716 if [ "${DEPOT}" = "TRUE" ] ; then 717 # WE PUT FINAL FILE ON FILE SYSTEM 718 [ "${FLAG_B}" = "FALSE" ] && file_out=${config_UserChoices_JobName}_${DATE_BUILD}_${FlagDir}_${var}.nc 719 file_before=${config_UserChoices_JobName}_${DateBegin}_${DATE_FIN_JOB_B}_${FlagDir}_${var}.nc 720 # 721 eval IGCM_sys_Put_Out ${file_out} \${R_OUT_${comp}}/Analyse/${TS_Dir}/${file_out} 722 [ "${FLAG_B}" = "TRUE" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/${TS_Dir} ${file_before} ${file_out} 723 if [ ! "X${file1}" = "X" ] ; then 724 [ ! "${file1}" = "${config_UserChoices_JobName}_${DateBegin}_${DATE_FIN_JOB_B}_${FlagDir}_${var}.nc" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/${TS_Dir} ${file1} ${file_out} 725 fi 726 # 727 if ( [ ${FlagDir} = "1M" ] && [ -f ${file_out} ] ) ; then 728 file_before_YE=${config_UserChoices_JobName}_${DateBegin}_${DATE_FIN_JOB_B}_1Y_${var}.nc 729 file_out_YE=${config_UserChoices_JobName}_${DATE_BUILD_END}_1Y_${var}.nc 730 # 731 # Compute yearly average considering calendar 732 # and set date of the mid year to 01/07 at 00:00 733 IGCM_sys_cdo -settime,00:00 -setday,1 -setmon,7 -settunits,days -divdpy -yearsum -muldpm -selvar,${var} ${file_out} ${file_out_YE} 734 # Extract all ancillary variables except $var, they will be appended after the cdo command 735 # Needed because cdo applies calculs on all variables 736 IGCM_sys_ncks -Oh -x -v ${var} ${file_out} ${file_out_YE%%.nc}_tmp1.nc 737 # This will remove the time axis because cdo rewrites severely with only considered useful variables 738 IGCM_sys_cdo -mulc,1 ${file_out_YE%%.nc}_tmp1.nc ${file_out_YE%%.nc}_tmp2.nc 2>/dev/null 739 if [ $? -eq 0 ] ; then 740 # Now append all ancillary variables if previous cdo operator ok 741 IGCM_sys_ncks -h -A ${file_out_YE%%.nc}_tmp2.nc ${file_out_YE} 742 fi 743 744 # Put global history attribut 745 IGCM_sys_ncatted -Oh -a history,global,o,c,"build by libIGCM/create_ts" ${file_out_YE} 746 # 747 eval IGCM_sys_Put_Out ${file_out_YE} \${R_OUT_${comp}}/Analyse/TS_MO_YE/${file_out_YE} 748 [ "${FLAG_B}" = "TRUE" ] && eval MENAGE \${R_OUT_${comp}}/Analyse/TS_MO_YE/ ${file_before_YE} ${file_out_YE} 749 IGCM_sys_Rm ${file_out_YE%%.nc}_tmp*.nc 750 fi 751 # 752 IGCM_sys_Rm ${file_out} 753 ExitFlag=false 754 # 755 fi 756 # 757 done # for var in ${liste_var} ; do 758 IGCM_sys_Rm ${liste_file_tmp[*]} 759 done # for file in ${liste_file_brut} do 760 done # for comp in ${config_ListOfComponents[*]} ; do 761 # GO AHEAD IN DEEPEST LOOP 762 (( CURRENT_LOOP = CURRENT_LOOP + 1 )) 764 763 done # while [ ${CURRENT_LOOP} -le ${NBRE_TOUR} ] do 765 764 # FINISH … … 767 766 # DODS copy 768 767 for comp in ${config_ListOfComponents[*]} ; do 769 770 771 772 768 for TS_Dir in TS_YE TS_MO TS_MO_YE TS_DA TS_HF TS_INS ; do 769 IGCM_sys_TestDirArchive ${R_SAVE}/${comp}/Analyse/${TS_Dir} 770 [ $? = 0 ] && IGCM_sys_Put_Dods ${comp}/Analyse/${TS_Dir} 771 done 773 772 done 774 773 … … 788 787 # -------------------------------------------------------------------- 789 788 if ( [ X${TsTask} = X2D ] || [ X${TsTask} = X3D ] || [ X${TsTask} = X ] ) ; then 790 791 789 Script_Post_Output=monitoring.${PeriodDateEnd} 790 IGCM_sys_QsubPost monitoring 792 791 fi 793 792 … … 797 796 # -------------------------------------------------------------------- 798 797 if [ ${StandAlone} != true ] ; then 799 800 801 802 798 # Put in run.card end period of time series 799 [ X"${DATE_FIN}" = X ] || IGCM_sys_RshMaster IGCM_card_WriteOption ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesCompleted "${DATE_FIN}" 800 # We have finish the job ! 801 IGCM_sys_RshMaster IGCM_card_WriteOption ${SUBMIT_DIR}/run.card PostProcessing TimeSeriesRunning "n" 803 802 fi 804 803
Note: See TracChangeset
for help on using the changeset viewer.