Changeset 6040 for BOL/Replay
- Timestamp:
- Jan 21, 2026, 2:58:05 AM (3 days ago)
- File:
-
- 1 edited
-
BOL/Replay/replay_equip.sh (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
BOL/Replay/replay_equip.sh
r5863 r6040 1 1 #!/bin/bash 2 2 3 #set -vx3 #set -vx 4 4 5 5 #============================================================================= … … 74 74 #============================================================================= 75 75 76 #-----------------------------------------------------------------------------77 # Reading rguments78 #-----------------------------------------------------------------------------79 76 nconly=false 80 77 where=-before_return … … 113 110 if [ "$param" = "" ] ; then $0 -h ; exit ; fi 114 111 112 #----------------------------------------------------------------------------- 113 function get_file_names { 114 #----------------------------------------------------------------------------- 115 115 case $param in 116 116 vdif_k|vdif_cd|vdif|my_25|vdif_dq) param_ini=vdif_ini ; inimod=simple_vdif_ini ; klon=ngrid ; klev=nlay ;; … … 128 128 set -u ; inimod_file=$( ls $inimod.[fF]90 ) ; set +u 129 129 replay_comment="replay automatic include" 130 paraminc1=dump_replay_${param}_head.h131 paraminc2=dump_replay_${param}_nc_${prefix}.h130 dump_param_head=dump_replay_${param}_head.h 131 dump_param_nc=dump_replay_${param}_nc_${prefix}.h 132 132 iniinc=dump_replay_ini.h 133 133 echo "grep -i \"subro.* ${param}[\ (]\" *.[fF]90 | sed -e 's/ //g' | grep \"${param}(\" | cut -d: -f1" … … 138 138 if [ `echo ${paramfile} | wc -w` != 1 ] ; then echo file $paramfile multiple ; $0 -h ; exit ; fi 139 139 140 141 #----------------------------------------------------------------------------- 142 # Transformer l'entete d'une subroutine en un call 143 #----------------------------------------------------------------------------- 144 140 } 141 142 #----------------------------------------------------------------------------- 145 143 function get_subroutine_arg(){ 144 #----------------------------------------------------------------------------- 146 145 tmp=tmp_get_subroutine_arg$1 147 146 cat $2 | tr '[A-Z]' '[a-z]' > ${tmp} … … 164 163 fi 165 164 } 165 166 166 #----------------------------------------------------------------------------- 167 167 function var_dims(){ … … 180 180 echo \(${dims_}\) | sed -e 's/( /(/' -e 's/ /,/g' 181 181 fi 182 183 } 182 } 183 184 184 #----------------------------------------------------------------------------- 185 185 function var_recl(){ … … 219 219 } 220 220 221 222 221 #----------------------------------------------------------------------------- 223 222 function extract_subroutine(){ … … 235 234 \rm -f ${tmp} ${tmp}2 236 235 } 237 238 236 239 237 #----------------------------------------------------------------------------- … … 297 295 } 298 296 299 300 301 302 297 #----------------------------------------------------------------------------- 303 298 function block_Replay0() { … … 344 339 } 345 340 346 341 #----------------------------------------------------------------------------- 342 function get_all_inout_and_in_variables { 343 #----------------------------------------------------------------------------- 344 345 varin0=`grep inten.*.in input | sed -e 's/\!.*$//' | cut -d: -f3 | sed -e 's/,/ /g'` 346 varinout0=`grep inten.*.inout input | sed -e 's/\!.*$//' | cut -d: -f3 | sed -e 's/,/ /g'` 347 echo varin0 $varin0 348 varin_rec= ; for v in $varin0 ; do varin_rec="$varin_rec $v$( var_dims $v)" ; done 349 varin=`echo $varin_rec | sed -e 's/ /,/g' -e "s/,,,/,/g" -e "s/,,/,/g"` 350 #echo $varin $varin 351 nvar0D=0 ; nvar1D=0 ; nvar2D=0 352 } 353 354 #----------------------------------------------------------------------------- 355 function get_vars { 356 #----------------------------------------------------------------------------- 357 358 # Extracting list of array variables, either 1D or 2D, and depending 359 # on their status : in, out, inout 360 361 output=full # Attention, l'option full ne marche pas a cause de tableaux locaux undef 362 case $output in 363 light) str_='real.*intent' ;; 364 full) str_='real' 365 esac 366 367 str_=real 368 case $1 in 369 in|inout|out) filtre_='grep intent('$1')' ;; 370 local) filtre_='sed -e /intent/d' ;; 371 all) filtre_='grep '$str_ ;; # Pas très joli 372 *) echo Pffff ; exit 1 373 esac 374 375 if [ $2 = 1D ] ; then 376 grep $str_ input | sed -e 's/ //g' | $filtre_ | grep $klon | sed -e 's/!.*$//' -e /$klev/d | cut -d: -f3 | sed -e 's/,/ /g' 377 else 378 grep $str_ input | sed -e 's/ //g' | $filtre_ | grep $klon | grep $klev | cut -d: -f3 | sed -e 's/!.*$//' -e 's/,/ /g' 379 fi 380 381 } 382 383 #----------------------------------------------------------------------------- 384 function get_variable_lists { 385 #----------------------------------------------------------------------------- 386 var_1D_in=$( get_vars in 1D ) 387 var_2D_in=$( get_vars in 2D ) 388 389 var_1D_inout=$( get_vars inout 1D ) 390 var_2D_inout=$( get_vars inout 2D ) 391 392 var_1D=$( get_vars all 1D ) 393 var_2D=$( get_vars all 2D ) 394 395 var_1D_local=$( get_vars local 1D ) 396 var_2D_local=$( get_vars local 2D ) 397 398 if [ "$ncvars" != "" ] ; then 399 var_1D=$( b_among_a "$var_1D" "$ncvars" ) 400 var_2D=$( b_among_a "$var_2D" "$ncvars" ) 401 fi 402 403 echo Variables in and inout : $varin0 404 echo 1D variables "(all)" : $var_1D 405 echo 2D variables "(all)" : $var_2D 406 echo 1D variables "intent(in)" : $var_1D_in 407 echo 2D variables "intent(in)" : $var_2D_in 408 echo 1D variables "intent(inout)" : $var_1D_inout 409 echo 2D variables "intent(inout)" : $var_2D_inout 410 echo local 1D variables : $var_1D_local 411 echo local 2D variables : $var_2D_local 412 } 413 414 #----------------------------------------------------------------------------- 415 function clean_other_routines { 347 416 #----------------------------------------------------------------------------- 348 417 # On nettoye les inclusions précédente dans les fichiers .f90 349 #-----------------------------------------------------------------------------350 351 418 if [ $nconly = false ] ; then 352 419 for file in `grep "$replay_comment" *.[fF]90 2> /dev/null | cut -d: -f1` ; do … … 368 435 sed -i"" -e "${line}s/^/ $pattern ! $replay_comment ! $replay_comment\n/" physiq_mod.F90 369 436 fi 370 371 #----------------------------------------------------------------------------- 372 # Analysis of the variables to be stored and there nature 373 #----------------------------------------------------------------------------- 374 375 extract_subroutine $param $paramfile # -> input file 376 #var_get_dims ztv 377 #var_dims ztv 378 #exit 379 # var_recl ztv 380 # var_dims pplev 381 # var_recl pplev 382 # var_dims ngrid 383 # var_recl ngrid 384 # exit 385 386 varin0=`grep inten.*.in input | sed -e 's/\!.*$//' | cut -d: -f3 | sed -e 's/,/ /g'` 387 varinout0=`grep inten.*.inout input | sed -e 's/\!.*$//' | cut -d: -f3 | sed -e 's/,/ /g'` 388 echo varin0 $varin0 389 varin_rec= ; for v in $varin0 ; do varin_rec="$varin_rec $v$( var_dims $v)" ; done 390 varin=`echo $varin_rec | sed -e 's/ /,/g' -e "s/,,,/,/g" -e "s/,,/,/g"` 391 #echo $varin $varin 392 output=full # Attention, l'option full ne marche pas a cause de tableaux locaux undef 393 nvar0D=0 ; nvar1D=0 ; nvar2D=0 394 case $output in 395 light) search_str='real.*intent' ;; 396 full) search_str='real' 397 esac 398 var_1D_inout=`grep -i "$search_str" input | grep intent.*inout | grep $klon | sed -e 's/!.*$//' -e /$klev/d | cut -d: -f3 | sed -e 's/,/ /g'` 399 var_2D_inout=`grep -i "$search_str" input | grep intent.*inout | grep $klon | grep $klev | cut -d: -f3 | sed -e 's/!.*$//' -e 's/,/ /g'` 400 var_1D_noarg=`grep -i "$search_str" input | sed -e /intent/d | grep $klon | sed -e 's/!.*$//' -e /$klev/d | cut -d: -f3 | sed -e 's/,/ /g'` 401 var_2D_noarg=`grep -i "$search_str" input | sed -e /intent/d | grep $klon | grep $klev | cut -d: -f3 | sed -e 's/!.*$//' -e 's/,/ /g'` 402 var_1D=`grep -i "$search_str" input | grep $klon | sed -e 's/!.*$//' -e /$klev/d | cut -d: -f3 | sed -e 's/,/ /g'` 403 var_2D=`grep -i "$search_str" input | grep $klon | grep $klev | cut -d: -f3 | sed -e 's/!.*$//' -e 's/,/ /g'` 404 if [ "$ncvars" != "" ] ; then 405 var_1D=`b_among_a "$var_1D" "$ncvars"` 406 var_2D=`b_among_a "$var_2D" "$ncvars"` 407 fi 408 echo Variables in and inout : $varin0 409 echo 1D variables "(all)" : $var_1D 410 echo 2D variables "(all)" : $var_2D 411 echo 1D variables "intent(inout)" : $var_1D_inout 412 echo 2D variables "intent(inout)" : $var_2D_inout 413 echo local 1D variables : $var_1D_noarg 414 echo local 2D variables : $var_2D_noarg 415 416 #----------------------------------------------------------------------------- 417 # Ecriture de la routine d'appel a la parametrisation en mode replay 418 #----------------------------------------------------------------------------- 419 420 if [ $nconly = false ] ; then 437 } 438 439 440 #----------------------------------------------------------------------------- 441 function create_call_param_replay { 442 #----------------------------------------------------------------------------- 421 443 422 444 cat > call_param_replay.f90 <<eod 423 445 subroutine call_param_replay($klon,$klev) 424 USE IOIPSL, ONLY : getin 425 `echo_use_module $param $paramfile` 446 use IOIPSL, only : getin 447 use netcdf 448 $( echo_use_module $param $paramfile ) 426 449 IMPLICIT NONE 427 450 integer :: ifin,irec,it,rec_length_replay=0,replay_irec0=1,replay_nt=1000 451 integer :: status,ncid,varid 452 real*4,dimension($klon,$klev) :: v2d 453 real*4,dimension($klon) :: v1d 428 454 eod 429 455 grep 'intent.*::' input | sed -e 's/ //g' -e 's/,intent(.*[nt])//'>> call_param_replay.f90 … … 451 477 read(82,rec=irec,iostat=ifin) $varin 452 478 if (.NOT. ifin == 0 ) stop "Fin du fichier fort.82" 479 status = nf90_open("replay_in.nc", nf90_nowrite, ncid) 480 if (status == nf90_noerr) then 453 481 eod 482 483 for var in $var_2D_in $var_2D_inout ; do 484 echo "status=nf90_inq_varid(ncid,\"$var\",varid)" >> call_param_replay.f90 485 echo "status=nf90_get_var(ncid,varid,v2d,start=(/1,1,1,it/), count=(/1,1,$klev,it/))" >> call_param_replay.f90 486 echo "$var(:,1:$klev)=v2d(:,1:$klev)" >> call_param_replay.f90 487 done 488 489 for var in $var_1D_in $var_1D_inout ; do 490 echo "status=nf90_inq_varid(ncid,\"$var\",varid)" >> call_param_replay.f90 491 echo "status=nf90_get_var(ncid, varid, v1d, start=(/1,1,it/), count=(/1,1,it/))" >> call_param_replay.f90 492 echo "$var=v1d" >> call_param_replay.f90 493 done 454 494 455 495 block_Replay0 "it == 1" _Replay0 "" $varinout0 >> call_param_replay.f90 … … 457 497 get_subroutine_arg $param $paramfile | sed -e 's/subroutine/ call/' >> call_param_replay.f90 458 498 block_Replay0 "replay_irec0 < 0" _Replay0 "" $varinout0 >> call_param_replay.f90 499 459 500 cat >> call_param_replay.f90 <<eod 501 end if 460 502 enddo 461 503 return 462 504 end subroutine call_param_replay 463 505 eod 464 465 fi # nconly = false 466 467 #----------------------------------------------------------------------------- 468 # Creating file dump_${param}_head.h 469 #----------------------------------------------------------------------------- 470 471 if [ $nconly = false ] ; then 472 \rm $paraminc1 473 cat> $paraminc1 <<eod 506 } 507 508 #----------------------------------------------------------------------------- 509 function create_dump_param_head { 510 #----------------------------------------------------------------------------- 511 \rm $dump_param_head 512 cat> $dump_param_head <<eod 474 513 logical, save :: first_replay=.true. 475 514 integer, save :: rec_length_replay=0,irec=0,gr_index_=-1 … … 477 516 integer, external :: grid_index 478 517 eod 479 if [ "$lonlat" != "" ] ; then echo "if (first_replay) gr_index_=grid_index($lonlat)" >> $ paraminc1; fi480 echo "if ($klon==1) gr_index_=1" >> $ paraminc1481 echo "if (abs(gr_index_)>0) then" >> $ paraminc1482 echo "if (first_replay) then" >> $ paraminc1483 dump_param_open out $varin0 >> $ paraminc1484 cat>> $ paraminc1<<eod518 if [ "$lonlat" != "" ] ; then echo "if (first_replay) gr_index_=grid_index($lonlat)" >> $dump_param_head ; fi 519 echo "if ($klon==1) gr_index_=1" >> $dump_param_head 520 echo "if (abs(gr_index_)>0) then" >> $dump_param_head 521 echo "if (first_replay) then" >> $dump_param_head 522 dump_param_open out $varin0 >> $dump_param_head 523 cat>> $dump_param_head <<eod 485 524 endif 486 525 irec=irec+1 … … 490 529 eod 491 530 492 iotd_calls 1 in_${prefix} $var_1D_inout 493 iotd_calls 1 in_${prefix} $var_1D_inout >> $paraminc1 494 iotd_calls $klev in_${prefix} $var_2D_inout >> $paraminc1 495 fi # nconly = false 496 if [ "`grep $paraminc1 $paramfile`" = "" ] ; then 497 # Not changing $paraminc1 if it is already included in the file 531 #iotd_calls 1 in_${prefix} $var_1D_inout 532 iotd_calls 1 in_${prefix} $var_1D_inout >> $dump_param_head 533 iotd_calls $klev in_${prefix} $var_2D_inout >> $dump_param_head 534 if [ "`grep $dump_param_head $paramfile`" = "" ] ; then 535 # Not changing $dump_param_head if it is already included in the file 498 536 # To allow adding new nc outputs in a routine equiped for replay 499 for var in $var_1D_noarg $var_2D_noarg ; do echo $var=0. >> $paraminc1 ; done 500 include_line "include \"$paraminc1\"" $param $paramfile -after_declarations 501 fi 502 503 #----------------------------------------------------------------------------- 504 # Creating file dump_${param}_nc_${prefix}.h 505 #----------------------------------------------------------------------------- 506 507 \rm $paraminc2 508 iotd_calls 1 "${prefix}" $var_1D >> $paraminc2 509 iotd_calls $klev "${prefix}" $var_2D >> $paraminc2 510 include_line "include \"$paraminc2\"" $param $paramfile "$where" 537 for var in $var_1D_local $var_2D_local ; do echo $var=0. >> $dump_param_head ; done 538 include_line "include \"$dump_param_head\"" $param $paramfile -after_declarations 539 fi 540 } 541 542 #----------------------------------------------------------------------------- 543 function create_dump_param_nc { 544 #----------------------------------------------------------------------------- 545 546 \rm $dump_param_nc 547 iotd_calls 1 "${prefix}" $var_1D >> $dump_param_nc 548 iotd_calls $klev "${prefix}" $var_2D >> $dump_param_nc 549 include_line "include \"$dump_param_nc\"" $param $paramfile "$where" 511 550 512 551 if [[ "$lonlat" != "" ]] ; then 513 for file in $paraminc1 $paraminc2 ; do sed -i -e "s/1:$klon/gr_index_/g" -e '/rec_l/s/\*('$klon')//g' $file ; done 514 sed -i -e "/(81/s/,$klon/,1/" $paraminc1 515 fi 516 517 #---------------------------------------------------------------------------- 518 # dump_ini_module gere l'ecriture des variables d'interface de l'intialisation 519 # du module en mode replay 520 #----------------------------------------------------------------------------- 521 522 if [ $nconly = false -a $param_ini != None ] ; then 523 varinmod=`grep -i 'intent.in' $inimod_file | sed -e 's/\!.*$//' | cut -d: -f3 | sed -e 's/,/ /g'` 524 varinmodv=`echo $varinmod | sed -e 's/ /,/g'` 525 cat > $iniinc <<...eod............................................... 552 for file in $dump_param_head $dump_param_nc ; do sed -i -e "s/1:$klon/gr_index_/g" -e '/rec_l/s/\*('$klon')//g' $file ; done 553 sed -i -e "/(81/s/,$klon/,1/" $dump_param_head 554 fi 555 556 } 557 558 #----------------------------------------------------------------------------- 559 function create_call_ini_replay { 560 #----------------------------------------------------------------------------- 561 varinmod=`grep -i 'intent.in' $inimod_file | sed -e 's/\!.*$//' | cut -d: -f3 | sed -e 's/,/ /g'` 562 varinmodv=`echo $varinmod | sed -e 's/ /,/g'` 563 cat > $iniinc <<eod............................................... 526 564 open(90,file='$inimod.bin',form='unformatted') 527 565 write(90) $varinmodv 528 566 close(90) 529 ...eod............................................... 530 for var_ in $varinmod ; do echo "print*,'Interface $param_ini $var_',$var_" >> $iniinc ; done 531 include_line "include \"$iniinc\"" $param_ini $inimod_file -before_return 532 fi # nconly = false 533 534 #----------------------------------------------------------------------------- 535 # call_ini_replay.f90 gere l'initialisation du module en mode replay 536 #----------------------------------------------------------------------------- 537 if [ $nconly = false -a $param_ini != None ] ; then 538 cat > call_ini_replay.f90 <<....eod............................................ 567 eod............................................... 568 for var_ in $varinmod ; do echo "print*,'Interface $param_ini $var_',$var_" >> $iniinc ; done 569 include_line "include \"$iniinc\"" $param_ini $inimod_file -before_return 570 571 cat > call_ini_replay.f90 <<eod............................................ 539 572 subroutine call_ini_replay 540 573 use $inimod 541 574 IMPLICIT NONE 542 ....eod............................................543 grep -i intent.in $inimod_file | tr '[A-Z]' '[a-z]' | sed -e 's/,.*intent.i.*)//' >> call_ini_replay.f90544 cat >> call_ini_replay.f90 <<....eod...........................................575 eod............................................ 576 grep -i intent.in $inimod_file | tr '[A-Z]' '[a-z]' | sed -e 's/,.*intent.i.*)//' >> call_ini_replay.f90 577 cat >> call_ini_replay.f90 <<eod........................................... 545 578 open(90,file='$inimod.bin',form='unformatted') 546 579 read(90) $varinmodv 547 580 close(90) 548 ....eod...........................................549 get_subroutine_arg $param_ini $inimod_file | sed -e 's/subroutine/call/' >> call_ini_replay.f90550 cat >> call_ini_replay.f90 <<....eod...........................................581 eod........................................... 582 get_subroutine_arg $param_ini $inimod_file | sed -e 's/subroutine/call/' >> call_ini_replay.f90 583 cat >> call_ini_replay.f90 <<eod........................................... 551 584 return 552 585 end subroutine call_ini_replay 553 ....eod........................................... 554 fi # nconly = false 586 eod........................................... 587 } 588 589 590 #----------------------------------------------------------------------------- 591 #----------------------------------------------------------------------------- 592 # Starting here 593 #----------------------------------------------------------------------------- 594 #----------------------------------------------------------------------------- 595 596 get_file_names 597 598 if [ $nconly = false ] ; then 599 clean_other_routines 600 fi 601 602 # Extracting/formating the target subroutine in "input" file 603 extract_subroutine $param $paramfile 604 605 # Getting all in and inout variables from "input" 606 get_all_inout_and_in_variables 607 608 # Getting lists of 1D and 2D arrays selecting status and 1D and 2D 609 get_variable_lists 610 611 # Specific of routines to be replayed 612 if [ $nconly = false ] ; then 613 create_call_param_replay 614 create_dump_param_head 615 if [ $param_ini != None ] ; then 616 create_call_ini_replay 617 fi 618 fi 619 620 # Netcdf outputs in all cases 621 create_dump_param_nc 622 623 # Some cleaning 624 \rm -f input tmp_get* tmp_include* tmpline*
Note: See TracChangeset
for help on using the changeset viewer.
