Changeset 2587 for branches/TAM_V3_0/NEMOTAM/OPATAM_SRC/TAM/trj_tam.F90
- Timestamp:
- 2011-02-15T12:58:59+01:00 (13 years ago)
- Location:
- branches/TAM_V3_0/NEMOTAM/OPATAM_SRC/TAM
- Files:
-
- 1 added
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/TAM_V3_0/NEMOTAM/OPATAM_SRC/TAM/trj_tam.F90
r2586 r2587 32 32 USE wzvmod ! vertical velocity 33 33 34 USE oce_tam, ONLY : & ! Dynamics and active tracers defined in memory 35 & un_tl, vn_tl, tn_tl, & 36 & wn_tl, hdivn_tl, rotn_tl, & 37 #if defined key_dynspg_flt 38 & sshn_tl, & 39 #endif 40 & sn_tl 41 34 42 IMPLICIT NONE 35 43 … … 39 47 & trj_rea, & !: Read trajectory at time step kstep into now fields 40 48 & trj_rd_spl, & !: Read simple data (without interpolation) 41 & trj_wri_spl !: Write simple data (without interpolation) 49 & trj_wri_spl, & !: Write simple data (without interpolation) 50 & tl_trj_wri, & !: Write simple linear-tangent data 51 & tl_trj_ini, & !: initialize the model-tangent state trajectory 52 & trj_deallocate !: Deallocate all the saved variable 53 54 LOGICAL, PUBLIC :: & 55 & ln_trjwri_tan = .FALSE. !: No output of the state trajectory fields 56 57 CHARACTER (LEN=40), PUBLIC, PARAMETER :: & 58 & c_tantrj = 'tl_trajectory' !: Filename for storing the 59 !: linear-tangent trajectory 60 INTEGER, PUBLIC :: & 61 & nittrjfrq_tan !: Frequency of trajectory output for linear-tangent 42 62 43 63 !! * Module variables 64 LOGICAL, SAVE :: & 65 & ln_mem = .FALSE. !: Flag for allocation 44 66 INTEGER, SAVE :: inumtrj1 = -1, inumtrj2 = -1 45 67 REAL(wp), SAVE :: & … … 107 129 CONTAINS 108 130 131 SUBROUTINE tl_trj_ini 132 !!----------------------------------------------------------------------- 133 !! 134 !! *** ROUTINE tl_trj_ini *** 135 !! 136 !! ** Purpose : initialize the model-tangent state trajectory 137 !! 138 !! ** Method : 139 !! 140 !! ** Action : 141 !! 142 !! References : 143 !! 144 !! History : 145 !! ! 10-07 (F. Vigilant) 146 !!----------------------------------------------------------------------- 147 148 IMPLICIT NONE 149 150 !! * Modules used 151 NAMELIST/namtl_trj/ nittrjfrq_tan, ln_trjwri_tan 152 153 ln_trjwri_tan = .FALSE. 154 nittrjfrq_tan = 1 155 156 REWIND ( numnam ) 157 READ ( numnam, namtl_trj ) 158 159 ! Control print 160 IF(lwp) THEN 161 WRITE(numout,*) 162 WRITE(numout,*) 'tl_trj_ini : Linear-Tagent Trajectory handling:' 163 WRITE(numout,*) '~~~~~~~~~~~~' 164 WRITE(numout,*) ' Namelist namtl_trj : set trajectory parameters' 165 WRITE(numout,*) ' Logical switch for writing out state trajectory ', & 166 & ' ln_trjwri_tan = ', ln_trjwri_tan 167 WRITE(numout,*) ' Frequency of trajectory output ', & 168 & ' nittrjfrq_tan = ', nittrjfrq_tan 169 END IF 170 END SUBROUTINE tl_trj_ini 171 109 172 SUBROUTINE trj_rea( kstp, kdir ) 110 173 !!----------------------------------------------------------------------- … … 242 305 & ) 243 306 #endif 307 ln_mem = .TRUE. 244 308 245 309 ENDIF … … 310 374 311 375 ENDIF 312 ! added 376 313 377 IF ( ( kstp - nit000 + 1 /= 0 ) .AND. ( kdir == -1 ) ) THEN 314 378 ! We update the input filename … … 321 385 ENDIF 322 386 ENDIF 323 ! end added 387 324 388 ! Read record 1 325 389 … … 328 392 329 393 IF ( kdir == -1 ) inrcm = inrcm - 1 330 !added331 394 ! inrc = inrcm 332 395 ! temporary fix: currently, only one field by step time 333 396 inrc = 1 334 397 stpr1 = (inrcm - 1) * nittrjfrq 335 ! stpr1 = (inrc - 1) * nittrjfrq336 !end added337 398 338 399 ! bug fixed to read several time the initial data … … 351 412 IF ( inumtrj1 /= -1 ) CALL iom_open( cl_asmtrj, inumtrj1 ) 352 413 353 CALL iom_get( inumtrj1, jpdom_ data, 'emp' , empr1 , inrc )354 CALL iom_get( inumtrj1, jpdom_ data, 'emps' , empsr1 , inrc )355 CALL iom_get( inumtrj1, jpdom_ data, 'un' , unr1 , inrc )356 CALL iom_get( inumtrj1, jpdom_ data, 'vn' , vnr1 , inrc )357 CALL iom_get( inumtrj1, jpdom_ data, 'tn' , tnr1 , inrc )358 CALL iom_get( inumtrj1, jpdom_ data, 'sn' , snr1 , inrc )359 CALL iom_get( inumtrj1, jpdom_ data, 'avmu' , avmur1 , inrc )360 CALL iom_get( inumtrj1, jpdom_ data, 'avmv' , avmvr1 , inrc )361 CALL iom_get( inumtrj1, jpdom_ data, 'avt' , avtr1 , inrc )414 CALL iom_get( inumtrj1, jpdom_autoglo, 'emp' , empr1 , inrc ) 415 CALL iom_get( inumtrj1, jpdom_autoglo, 'emps' , empsr1 , inrc ) 416 CALL iom_get( inumtrj1, jpdom_autoglo, 'un' , unr1 , inrc ) 417 CALL iom_get( inumtrj1, jpdom_autoglo, 'vn' , vnr1 , inrc ) 418 CALL iom_get( inumtrj1, jpdom_autoglo, 'tn' , tnr1 , inrc ) 419 CALL iom_get( inumtrj1, jpdom_autoglo, 'sn' , snr1 , inrc ) 420 CALL iom_get( inumtrj1, jpdom_autoglo, 'avmu' , avmur1 , inrc ) 421 CALL iom_get( inumtrj1, jpdom_autoglo, 'avmv' , avmvr1 , inrc ) 422 CALL iom_get( inumtrj1, jpdom_autoglo, 'avt' , avtr1 , inrc ) 362 423 #if defined key_ldfslp 363 CALL iom_get( inumtrj1, jpdom_ data, 'uslp' , uslpr1 , inrc )364 CALL iom_get( inumtrj1, jpdom_ data, 'vslp' , vslpr1 , inrc )365 CALL iom_get( inumtrj1, jpdom_ data, 'wslpi' , wslpir1 , inrc )366 CALL iom_get( inumtrj1, jpdom_ data, 'wslpj' , wslpjr1 , inrc )424 CALL iom_get( inumtrj1, jpdom_autoglo, 'uslp' , uslpr1 , inrc ) 425 CALL iom_get( inumtrj1, jpdom_autoglo, 'vslp' , vslpr1 , inrc ) 426 CALL iom_get( inumtrj1, jpdom_autoglo, 'wslpi' , wslpir1 , inrc ) 427 CALL iom_get( inumtrj1, jpdom_autoglo, 'wslpj' , wslpjr1 , inrc ) 367 428 #endif 368 429 #if defined key_zdfddm 369 CALL iom_get( inumtrj1, jpdom_ data, 'avs' , avsr1 , inrc )370 #endif 371 CALL iom_get( inumtrj1, jpdom_ data, 'ta' , tar1 , inrc )372 CALL iom_get( inumtrj1, jpdom_ data, 'sa' , sar1 , inrc )373 CALL iom_get( inumtrj1, jpdom_ data, 'tb' , tbr1 , inrc )374 CALL iom_get( inumtrj1, jpdom_ data, 'sb' , sbr1 , inrc )430 CALL iom_get( inumtrj1, jpdom_autoglo, 'avs' , avsr1 , inrc ) 431 #endif 432 CALL iom_get( inumtrj1, jpdom_autoglo, 'ta' , tar1 , inrc ) 433 CALL iom_get( inumtrj1, jpdom_autoglo, 'sa' , sar1 , inrc ) 434 CALL iom_get( inumtrj1, jpdom_autoglo, 'tb' , tbr1 , inrc ) 435 CALL iom_get( inumtrj1, jpdom_autoglo, 'sb' , sbr1 , inrc ) 375 436 #if defined key_tradmp 376 CALL iom_get( inumtrj1, jpdom_ data, 'hmlp' , hmlp1 , inrc )437 CALL iom_get( inumtrj1, jpdom_autoglo, 'hmlp' , hmlp1 , inrc ) 377 438 #endif 378 439 #if defined key_traldf_eiv 379 CALL iom_get( inumtrj1, jpdom_ data, 'aeiu' , aeiur1 , inrc )380 CALL iom_get( inumtrj1, jpdom_ data, 'aeiv' , aeivr1 , inrc )381 CALL iom_get( inumtrj1, jpdom_ data, 'aeiw' , aeiwr1 , inrc )440 CALL iom_get( inumtrj1, jpdom_autoglo, 'aeiu' , aeiur1 , inrc ) 441 CALL iom_get( inumtrj1, jpdom_autoglo, 'aeiv' , aeivr1 , inrc ) 442 CALL iom_get( inumtrj1, jpdom_autoglo, 'aeiw' , aeiwr1 , inrc ) 382 443 #endif 383 444 CALL iom_close( inumtrj1 ) … … 450 511 ! Read record 2 451 512 452 !! IF ( ( kstp /= nitend ) .AND. ( kdir == 1 ) .OR. &453 !! & ( kstp == nitend ) .AND. ( kdir == -1 ) ) THEN454 ! change455 513 IF ( ( ( kstp /= nitend ) .AND. ( kdir == 1 )) .OR. & 456 514 & ( kstp == nitend ) .AND.( kdir == -1 ) ) THEN 457 ! end change 458 !added 459 ! ! Need to open next saved file when kstp = initial step 460 ! IF ( kstp - nit000 + 1 == 0 ) THEN 461 ! Need to open next saved file when kstp = initial step 462 ! change 463 ! IF ( ( kstp /= nitend ) .AND. ( kdir == 1 ) ) THEN 464 ! end change 465 ! end added 515 466 516 ! Define the input file 467 517 IF ( kdir == -1 ) THEN … … 479 529 480 530 CALL iom_open( cl_asmtrj, inumtrj2 ) 481 ! change 482 ! END IF 483 !end change 531 484 532 485 533 inrcp = inrcm + 1 486 534 ! inrc = inrcp 487 !added488 535 inrc = 1 ! temporary fix 489 !end added 536 490 537 stpr2 = (inrcp - 1) * nittrjfrq 491 CALL iom_get( inumtrj2, jpdom_ data, 'emp' , empr2 , inrc )492 CALL iom_get( inumtrj2, jpdom_ data, 'emps' , empsr2 , inrc )493 CALL iom_get( inumtrj2, jpdom_ data, 'un' , unr2 , inrc )494 CALL iom_get( inumtrj2, jpdom_ data, 'vn' , vnr2 , inrc )495 CALL iom_get( inumtrj2, jpdom_ data, 'tn' , tnr2 , inrc )496 CALL iom_get( inumtrj2, jpdom_ data, 'sn' , snr2 , inrc )497 CALL iom_get( inumtrj2, jpdom_ data, 'avmu' , avmur2 , inrc )498 CALL iom_get( inumtrj2, jpdom_ data, 'avmv' , avmvr2 , inrc )499 CALL iom_get( inumtrj2, jpdom_ data, 'avt' , avtr2 , inrc )538 CALL iom_get( inumtrj2, jpdom_autoglo, 'emp' , empr2 , inrc ) 539 CALL iom_get( inumtrj2, jpdom_autoglo, 'emps' , empsr2 , inrc ) 540 CALL iom_get( inumtrj2, jpdom_autoglo, 'un' , unr2 , inrc ) 541 CALL iom_get( inumtrj2, jpdom_autoglo, 'vn' , vnr2 , inrc ) 542 CALL iom_get( inumtrj2, jpdom_autoglo, 'tn' , tnr2 , inrc ) 543 CALL iom_get( inumtrj2, jpdom_autoglo, 'sn' , snr2 , inrc ) 544 CALL iom_get( inumtrj2, jpdom_autoglo, 'avmu' , avmur2 , inrc ) 545 CALL iom_get( inumtrj2, jpdom_autoglo, 'avmv' , avmvr2 , inrc ) 546 CALL iom_get( inumtrj2, jpdom_autoglo, 'avt' , avtr2 , inrc ) 500 547 #if defined key_ldfslp 501 CALL iom_get( inumtrj2, jpdom_ data, 'uslp' , uslpr2 , inrc )502 CALL iom_get( inumtrj2, jpdom_ data, 'vslp' , vslpr2 , inrc )503 CALL iom_get( inumtrj2, jpdom_ data, 'wslpi' , wslpir2 , inrc )504 CALL iom_get( inumtrj2, jpdom_ data, 'wslpj' , wslpjr2 , inrc )548 CALL iom_get( inumtrj2, jpdom_autoglo, 'uslp' , uslpr2 , inrc ) 549 CALL iom_get( inumtrj2, jpdom_autoglo, 'vslp' , vslpr2 , inrc ) 550 CALL iom_get( inumtrj2, jpdom_autoglo, 'wslpi' , wslpir2 , inrc ) 551 CALL iom_get( inumtrj2, jpdom_autoglo, 'wslpj' , wslpjr2 , inrc ) 505 552 #endif 506 553 #if defined key_zdfddm 507 CALL iom_get( inumtrj2, jpdom_ data, 'avs' , avsr2 , inrc )508 #endif 509 CALL iom_get( inumtrj2, jpdom_ data, 'ta' , tar2 , inrc )510 CALL iom_get( inumtrj2, jpdom_ data, 'sa' , sar2 , inrc )511 CALL iom_get( inumtrj2, jpdom_ data, 'tb' , tbr2 , inrc )512 CALL iom_get( inumtrj2, jpdom_ data, 'sb' , sbr2 , inrc )554 CALL iom_get( inumtrj2, jpdom_autoglo, 'avs' , avsr2 , inrc ) 555 #endif 556 CALL iom_get( inumtrj2, jpdom_autoglo, 'ta' , tar2 , inrc ) 557 CALL iom_get( inumtrj2, jpdom_autoglo, 'sa' , sar2 , inrc ) 558 CALL iom_get( inumtrj2, jpdom_autoglo, 'tb' , tbr2 , inrc ) 559 CALL iom_get( inumtrj2, jpdom_autoglo, 'sb' , sbr2 , inrc ) 513 560 #if defined key_tradmp 514 CALL iom_get( inumtrj2, jpdom_ data, 'hmlp' , hmlp2 , inrc )561 CALL iom_get( inumtrj2, jpdom_autoglo, 'hmlp' , hmlp2 , inrc ) 515 562 #endif 516 563 #if defined key_traldf_eiv 517 CALL iom_get( inumtrj2, jpdom_ data, 'aeiu' , aeiur2 , inrc )518 CALL iom_get( inumtrj2, jpdom_ data, 'aeiv' , aeivr2 , inrc )519 CALL iom_get( inumtrj2, jpdom_ data, 'aeiw' , aeiwr2 , inrc )564 CALL iom_get( inumtrj2, jpdom_autoglo, 'aeiu' , aeiur2 , inrc ) 565 CALL iom_get( inumtrj2, jpdom_autoglo, 'aeiv' , aeivr2 , inrc ) 566 CALL iom_get( inumtrj2, jpdom_autoglo, 'aeiw' , aeiwr2 , inrc ) 520 567 #endif 521 568 CALL iom_close( inumtrj2 ) … … 526 573 ENDIF 527 574 575 ENDIF 576 577 ! Add warning for user 578 IF ( (kstp == nitend) .AND. ( MOD( kstp - nit000 + 1, nittrjfrq ) /= 0 ) ) THEN 579 IF(lwp) WRITE(numout,*) ' Warning ! nitend (=',nitend, ')', & 580 & ' and saving frequency (=',nittrjfrq,') not compatible.' 528 581 ENDIF 529 582 … … 611 664 !! *Module udes 612 665 USE iom 666 USE sol_oce, ONLY : & ! solver variables 667 & gcb, gcx 613 668 !! * Arguments 614 669 !! * Local declarations … … 647 702 CALL iom_rstput( fd, fd, inum, 'grv' , grv ) 648 703 CALL iom_rstput( fd, fd, inum, 'rn2' , rn2 ) 704 CALL iom_rstput( fd, fd, inum, 'gcb' , gcb ) 705 CALL iom_rstput( fd, fd, inum, 'gcx' , gcx ) 649 706 650 707 CALL iom_close( inum ) … … 668 725 !! *Module udes 669 726 USE iom ! I/O module 727 USE sol_oce, ONLY : & ! solver variables 728 & gcb, gcx 670 729 !! * Arguments 671 730 !! * Local declarations … … 704 763 CALL iom_get( inum, jpdom_autoglo, 'grv' , grv, fd ) 705 764 CALL iom_get( inum, jpdom_autoglo, 'rn2' , rn2, fd ) 765 CALL iom_get( inum, jpdom_autoglo, 'gcb' , gcb, fd ) 766 CALL iom_get( inum, jpdom_autoglo, 'gcx' , gcx, fd ) 706 767 707 768 CALL iom_close( inum ) … … 709 770 END SUBROUTINE trj_rd_spl 710 771 772 SUBROUTINE tl_trj_wri(kstp) 773 !!----------------------------------------------------------------------- 774 !! 775 !! *** ROUTINE tl_trj_wri *** 776 !! 777 !! ** Purpose : Write SimPLe data to file the model state trajectory 778 !! 779 !! ** Method : 780 !! 781 !! ** Action : 782 !! 783 !! History : 784 !! ! 10-07 (F. Vigilant) 785 !!----------------------------------------------------------------------- 786 !! *Module udes 787 USE iom 788 !! * Arguments 789 INTEGER, INTENT(in) :: & 790 & kstp ! Step for requested trajectory 791 !! * Local declarations 792 INTEGER :: & 793 & inum ! File unit number 794 INTEGER :: & 795 & it 796 CHARACTER (LEN=50) :: & 797 & filename 798 CHARACTER (LEN=100) :: & 799 & cl_tantrj 800 801 ! Initialize data and open file 802 !! if step time is corresponding to a saved state 803 IF ( ( MOD( kstp - nit000 + 1, nittrjfrq_tan ) == 0 ) ) THEN 804 805 it = kstp - nit000 + 1 806 807 ! Define the input file 808 WRITE(cl_tantrj, FMT='(A,A,I5.5,".nc")' ) TRIM( c_tantrj ), '_', it 809 cl_tantrj = TRIM( cl_tantrj ) 810 811 IF(lwp) THEN 812 WRITE(numout,*) 813 WRITE(numout,*)'Writing linear-tangent fields from : ',TRIM(cl_tantrj) 814 WRITE(numout,*) 815 ENDIF 816 817 CALL iom_open( cl_tantrj, inum, ldwrt = .TRUE., kiolib = jprstlib) 818 819 ! Output trajectory fields 820 CALL iom_rstput( it, it, inum, 'un_tl' , un_tl ) 821 CALL iom_rstput( it, it, inum, 'vn_tl' , vn_tl ) 822 CALL iom_rstput( it, it, inum, 'tn_tl' , tn_tl ) 823 CALL iom_rstput( it, it, inum, 'sn_tl' , sn_tl ) 824 CALL iom_rstput( it, it, inum, 'wn_tl' , wn_tl ) 825 CALL iom_rstput( it, it, inum, 'hdivn_tl', hdivn_tl) 826 CALL iom_rstput( it, it, inum, 'rotn_tl' , rotn_tl ) 827 #if defined key_dynspg_flt 828 CALL iom_rstput( it, it, inum, 'sshn_tl' , sshn_tl ) 829 #endif 830 CALL iom_close( inum ) 831 832 ENDIF 833 834 END SUBROUTINE tl_trj_wri 835 836 837 SUBROUTINE trj_deallocate 838 !!----------------------------------------------------------------------- 839 !! 840 !! *** ROUTINE trj_deallocate *** 841 !! 842 !! ** Purpose : Deallocate saved trajectory arrays 843 !! 844 !! ** Method : 845 !! 846 !! ** Action : 847 !! 848 !! History : 849 !! ! 2010-06 (A. Vidard) 850 !!----------------------------------------------------------------------- 851 852 IF ( ln_mem ) THEN 853 DEALLOCATE( & 854 & empr1, & 855 & empsr1, & 856 & empr2, & 857 & empsr2 & 858 & ) 859 860 DEALLOCATE( & 861 & unr1, & 862 & vnr1, & 863 & tnr1, & 864 & snr1, & 865 & avmur1, & 866 & avmvr1, & 867 & avtr1, & 868 & tar1, & 869 & sar1, & 870 & tbr1, & 871 & sbr1, & 872 & unr2, & 873 & vnr2, & 874 & tnr2, & 875 & snr2, & 876 & avmur2, & 877 & avmvr2, & 878 & avtr2, & 879 & tar2, & 880 & sar2, & 881 & tbr2, & 882 & sbr2 & 883 & ) 884 885 #if defined key_traldf_eiv 886 #if defined key_traldf_c3d 887 #elif defined key_traldf_c2d 888 DEALLOCATE( & 889 & aeiur1, & 890 & aeivr1, & 891 & aeiwr1, & 892 & aeiur2, & 893 & aeivr2, & 894 & aeiwr2 & 895 & ) 896 #elif defined key_traldf_c1d 897 #endif 898 #endif 899 900 #if defined key_ldfslp 901 DEALLOCATE( & 902 & uslpr1, & 903 & vslpr1, & 904 & wslpir1, & 905 & wslpjr1, & 906 & uslpr2, & 907 & vslpr2, & 908 & wslpir2, & 909 & wslpjr2 & 910 & ) 911 #endif 912 913 #if defined key_zdfddm 914 DEALLOCATE( & 915 & avsr1, & 916 & avsr2 & 917 & ) 918 #endif 919 920 #if defined key_tradmp 921 DEALLOCATE( & 922 & hmlp1, & 923 & hmlp2 & 924 & ) 925 #endif 926 ENDIF 927 END SUBROUTINE trj_deallocate 711 928 #endif 712 929 END MODULE trj_tam
Note: See TracChangeset
for help on using the changeset viewer.