Changeset 93
- Timestamp:
- 2004-06-25T08:33:00+02:00 (20 years ago)
- Location:
- trunk/NEMO/OPA_SRC
- Files:
-
- 1 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/DOM/domain.F90
r72 r93 143 143 NAMELIST/namrun/ no , cexper , ln_rstart , nrstdt , nit000, & 144 144 & nitend, ndate0 , nleapy , ninist , nstock, & 145 & nprint, nwrite , nrunoff , ln_ctl 145 & nprint, nwrite , nrunoff , ln_ctl , nbench 146 146 NAMELIST/namdom/ ntopo , e3zps_min, e3zps_rat, ngrid , nmsh , & 147 147 & nacc , atfp , rdt , rdtmin , rdtmax, & … … 176 176 WRITE(numout,*) ' runoff option nrunoff = ', nrunoff 177 177 WRITE(numout,*) ' run control (for debugging) ln_ctl = ', ln_ctl 178 WRITE(numout,*) ' benchmark parameter (0/1) nbench = ', nbench 178 179 ENDIF 179 180 … … 324 325 325 326 IF( lk_mpp ) THEN 326 CALL mpp_isl( iimi1 ) 327 CALL mpp_isl( ijmi1 ) 328 CALL mpp_isl( iimi2 ) 329 CALL mpp_isl( ijmi2 ) 330 CALL mpp_isl( iima1 ) 331 CALL mpp_isl( ijma1 ) 332 CALL mpp_isl( iima2 ) 333 CALL mpp_isl( ijma2 ) 334 ENDIF 335 336 IF(lwp) THEN 327 !CT bug CALL mpp_isl( iimi1 ) 328 !CT bug CALL mpp_isl( ijmi1 ) 329 !CT bug CALL mpp_isl( iimi2 ) 330 !CT bug CALL mpp_isl( ijmi2 ) 331 !CT bug CALL mpp_isl( iima1 ) 332 !CT bug CALL mpp_isl( ijma1 ) 333 !CT bug CALL mpp_isl( iima2 ) 334 !CT bug CALL mpp_isl( ijma2 ) 335 ENDIF 336 337 IF(lwp) THEN 338 IF(lk_mpp) THEN 339 WRITE(numout,cform_war) 340 WRITE(numout,*)' Min(Max) of e1t, e2t are those of the first proc only' 341 WRITE(numout,*) 342 END IF 337 343 WRITE(numout,"(14x,'e1t maxi: ',1f10.2,' at i = ',i3,' j= ',i3)") ze1max, iima1, ijma1 338 344 WRITE(numout,"(14x,'e1t mini: ',1f10.2,' at i = ',i3,' j= ',i3)") ze1min, iimi1, ijmi1 -
trunk/NEMO/OPA_SRC/DOM/domhgr.F90
r81 r93 1 1 MODULE domhgr 2 2 !!============================================================================== 3 !! *** MODULE dom ain***3 !! *** MODULE domhgr *** 4 4 !! Ocean initialization : domain initialization 5 5 !!============================================================================== … … 19 19 20 20 !! * Module variables 21 REAL (wp) :: glam0, gphi0! variables corresponding to parameters22 ! ! ppglam0 ppgphi0 set in par_oce21 REAL(wp) :: glam0, gphi0 ! variables corresponding to parameters 22 ! ! ppglam0 ppgphi0 set in par_oce 23 23 24 24 !! * Routine accessibility … … 95 95 !! 9.0 ! 04-01 (A.M. Treguier, J.M. Molines) Case 4 (Mercator mesh) 96 96 !! use of parameters in par_CONFIG-Rxx.h90, not in namelist 97 !! ! 04-05 (A. Koch-Larrouy) Add Gyre configuration 97 98 !!---------------------------------------------------------------------- 98 99 !! * local declarations … … 105 106 zphi0, zbeta, znorme, & ! 106 107 zarg, zf0 108 REAL(wp) :: & 109 zlam1, zcos_alpha, zim1 , zjm1 , ze1, ze1deg, & 110 zphi1, zsin_alpha, zim05, zjm05 107 111 !!---------------------------------------------------------------------- 108 112 … … 280 284 ! Latitude 281 285 gphit(ji,jj) = 1./rad * ASIN ( TANH( ppe1_deg *rad* ztj ) ) 282 gphiu(ji,jj) = 1./rad * ASIN ( TANH( ppe1_deg *rad* z tj ) )283 gphiv(ji,jj) = 1./rad * ASIN ( TANH( ppe1_deg *rad* z tj ) )284 gphif(ji,jj) = 1./rad * ASIN ( TANH( ppe1_deg *rad* z tj ) )286 gphiu(ji,jj) = 1./rad * ASIN ( TANH( ppe1_deg *rad* zuj ) ) 287 gphiv(ji,jj) = 1./rad * ASIN ( TANH( ppe1_deg *rad* zvj ) ) 288 gphif(ji,jj) = 1./rad * ASIN ( TANH( ppe1_deg *rad* zfj ) ) 285 289 ! e1 286 290 e1t(ji,jj) = ra * rad * COS( rad * gphit(ji,jj) ) * ppe1_deg … … 295 299 END DO 296 300 END DO 301 302 CASE ( 5 ) ! beta-plane with regular grid-spacing and rotated domain (GYRE configuration) 303 304 IF(lwp) WRITE(numout,*) 305 IF(lwp) WRITE(numout,*) ' beta-plane with regular grid-spacing and rotated domain (GYRE configuration)' 306 IF(lwp) WRITE(numout,*) ' given by ppe1_m and ppe2_m' 307 308 ! Position coordinates (in kilometers) 309 ! ========== 310 311 ! angle 45° and ze1=106.e+3 / jp_cfg forced -> zlam1 = -85°, zphi1 = 29°N 312 zlam1 = -85 313 zphi1 = 29 314 ze1 = 106000. / FLOAT(jp_cfg) ! resolution in meters 315 IF( nbench /= 0 ) ze1 = 106000.e0 ! benchmark: forced the resolution to be about 100 km 316 zsin_alpha = - SQRT( 2. ) / 2. 317 zcos_alpha = SQRT( 2. ) / 2. 318 ze1deg = ze1 / (ra * rad) 319 IF( nbench /= 0 ) ze1deg = ze1deg / FLOAT(jp_cfg) ! benchmark: keep the lat/+lon 320 ! ! at the right jp_cfg resolution 321 glam0 = zlam1 + zcos_alpha * ze1deg * FLOAT( jpjglo-2 ) 322 gphi0 = zphi1 + zsin_alpha * ze1deg * FLOAT( jpjglo-2 ) 323 324 IF(lwp) WRITE(numout,*) 'ze1', ze1, 'cosalpha', zcos_alpha, 'sinalpha', zsin_alpha 325 IF(lwp) WRITE(numout,*) 'ze1deg', ze1deg, 'glam0', glam0, 'gphi0', gphi0 326 327 DO jj = 1, jpj 328 DO ji = 1, jpi 329 zim1 = FLOAT( ji + nimpp - 1 ) - 1. ; zim05 = FLOAT( ji + nimpp - 1 ) - 1.5 330 zjm1 = FLOAT( jj + njmpp - 1 ) - 1. ; zjm05 = FLOAT( jj + njmpp - 1 ) - 1.5 331 332 glamf(ji,jj) = glam0 + zim1 * ze1deg * zcos_alpha + zjm1 * ze1deg * zsin_alpha 333 gphif(ji,jj) = gphi0 - zim1 * ze1deg * zsin_alpha + zjm1 * ze1deg * zcos_alpha 334 335 glamt(ji,jj) = glam0 + zim05 * ze1deg * zcos_alpha + zjm05 * ze1deg * zsin_alpha 336 gphit(ji,jj) = gphi0 - zim05 * ze1deg * zsin_alpha + zjm05 * ze1deg * zcos_alpha 337 338 glamu(ji,jj) = glam0 + zim1 * ze1deg * zcos_alpha + zjm05 * ze1deg * zsin_alpha 339 gphiu(ji,jj) = gphi0 - zim1 * ze1deg * zsin_alpha + zjm05 * ze1deg * zcos_alpha 340 341 glamv(ji,jj) = glam0 + zim05 * ze1deg * zcos_alpha + zjm1 * ze1deg * zsin_alpha 342 gphiv(ji,jj) = gphi0 - zim05 * ze1deg * zsin_alpha + zjm1 * ze1deg * zcos_alpha 343 END DO 344 END DO 345 346 ! Horizontal scale factors (in meters) 347 ! ====== 348 e1t(:,:) = ze1 ; e2t(:,:) = ze1 349 e1u(:,:) = ze1 ; e2u(:,:) = ze1 350 e1v(:,:) = ze1 ; e2v(:,:) = ze1 351 e1f(:,:) = ze1 ; e2f(:,:) = ze1 297 352 298 353 CASE DEFAULT … … 368 423 IF(lwp) WRITE(numout,*) ' Coriolis parameter varies from ', ff(1,1),' to ', ff(1,jpj) 369 424 425 CASE ( 5 ) ! beta-plane and rotated domain 426 427 zbeta = 2. * omega * COS( rad * ppgphi0 ) / ra ! beta at latitude ppgphi0 428 zphi0 = 15.e0 ! latitude of the first row F-points 429 zf0 = 2. * omega * SIN( rad * zphi0 ) ! compute f0 1st point south 430 431 ff(:,:) = ( zf0 + zbeta * ABS( gphif(:,:) - zphi0 ) * rad * ra ) ! f = f0 +beta* y ( y=0 at south) 432 433 IF(lwp) WRITE(numout,*) ' Beta-plane: Beta parameter = constant = ', ff(1,1) 434 IF(lwp) WRITE(numout,*) ' Coriolis parameter varies from ', ff(1,1),' to ', ff(1,jpj) 435 370 436 END SELECT 371 437 -
trunk/NEMO/OPA_SRC/SBC/ocesbc.F90
r84 r93 563 563 !! 564 564 !! ** Purpose : provide the thermohaline fluxes (heat and freshwater) 565 !! to the ocean at each time step.565 !! to the ocean at each time step. 566 566 !! 567 567 !! ** Method : Constant surface fluxes (read in namelist (namflx)) … … 572 572 !! ! 91-03 () Original code 573 573 !! 8.5 ! 02-09 (G. Madec) F90: Free form and module 574 !! 9.0 ! 04-05 (A. Koch-Larrouy) Add Gyre configuration 574 575 !!---------------------------------------------------------------------- 575 576 !! * Modules used 576 577 USE flxrnf ! ocean runoffs 578 USE daymod, ONLY : nyear ! calendar 577 579 578 580 !! * arguments … … 584 586 qsr0 = 0.e0, & ! solar heat flux 585 587 emp0 = 0.e0 ! net freshwater flux 588 REAL(wp) :: ztrp, zemp_S, zemp_N, zemp_sais, zTstar, zcos_sais, zconv 589 REAL(wp) :: & 590 zsumemp, & ! tampon used for the emp sum 591 zsurf, & ! tampon used for the domain sum 592 ztime, & ! time in hour 593 ztimemax, ztimemin ! 21th june, and 21th december if date0 = 1st january 594 REAL(wp), DIMENSION(jpi,jpj) :: t_star 595 INTEGER :: ji, jj, & ! dummy loop indices 596 js ! indice for months 597 INTEGER :: & 598 zyear0, & ! initial year 599 zmonth0, & ! initial month 600 zday0, & ! initial day 601 zday_year0, & ! initial day since january 1st 602 zdaymax 586 603 587 604 NAMELIST/namflx/ q0, qsr0, emp0 588 605 !!--------------------------------------------------------------------- 589 606 590 IF( kt == nit000 ) THEN 591 592 ! Read Namelist namflx : surface thermohaline fluxes 593 ! -------------------- 594 REWIND ( numnam ) 595 READ ( numnam, namflx ) 596 597 IF(lwp) WRITE(numout,*)' ' 598 IF(lwp) WRITE(numout,*)' ocesbc : Constant surface fluxes read in namelist' 599 IF(lwp) WRITE(numout,*)' ~~~~~~~ ' 600 IF(lwp) WRITE(numout,*)' Namelist namflx: set the constant flux values' 601 IF(lwp) WRITE(numout,*)' net heat flux q0 = ', q0 , ' W/m2' 602 IF(lwp) WRITE(numout,*)' solar heat flux qsr0 = ', qsr0, ' W/m2' 603 IF(lwp) WRITE(numout,*)' net heat flux emp0 = ', emp0, ' W/m2' 604 605 qt (:,:) = q0 606 qsr (:,:) = qsr0 607 q (:,:) = q0 608 emp (:,:) = emp0 609 emps (:,:) = emp0 610 qrp (:,:) = 0.e0 611 erp (:,:) = 0.e0 612 613 runoff(:,:) = 0.e0 607 !same temperature, E-P as in HAZELEGER 2000 608 609 IF( cp_cfg == 'gyre' ) THEN 610 611 zyear0 = ndate0 / 10000 612 zmonth0 = ( ndate0 - zyear0 * 10000 ) / 100 613 zday0 = ndate0 - zyear0 * 10000 - zmonth0 * 100 614 !Calculates nday_year, day since january 1st 615 zday_year0 = zday0 616 !accumulates days of previous months of this year 617 618 DO js = 1, zmonth0 619 IF(nleapy > 1) THEN 620 zday_year0 = zday_year0 + nleapy 621 ELSE 622 IF( MOD(zyear0, 4 ) == 0 ) THEN 623 zday_year0 = zday_year0 + nbiss(js) 624 ELSE 625 zday_year0 = zday_year0 + nobis(js) 626 ENDIF 627 ENDIF 628 END DO 629 ! day (in hours) since january the 1st 630 ztime = FLOAT( kt ) * rdt / (rmmss * rhhmm) & ! incrementation in hour 631 & - (nyear - 1) * rjjhh * raajj & ! - nber of hours the precedent years 632 & + zday_year0 / 24 ! nber of hours initial date 633 ! day 21th counted since the 1st January 634 zdaymax = 21 ! 21th day of the month 635 DO js = 1, 5 ! count each day until end May 636 IF(nleapy > 1) THEN 637 zdaymax = zdaymax + nleapy 638 ELSE 639 IF( MOD(zyear0, 4 ) == 0 ) THEN 640 zdaymax = zdaymax + nbiss(js) 641 ELSE 642 zdaymax = zdaymax + nobis(js) 643 ENDIF 644 ENDIF 645 END DO 646 ! 21th june in hours 647 ztimemax = zdaymax * 24 648 ! 21th december day in hours 649 ztimemin = ztimemax + rjjhh * raajj / 2 ! rjjhh * raajj / 4 = 1 seasonal cycle in hours 650 ! amplitudes 651 zemp_S = 0.7 ! intensity of COS in the South 652 zemp_N = 0.8 ! intensity of COS in the North 653 zemp_sais= 0.1 654 zTstar = 28.3 ! intemsity from 28.3 à -5° 655 zcos_sais = COS( (ztime - ztimemax) / (ztimemin - ztimemax) * rpi ) ! 1/2 period between 21th June and 21th December 656 ztrp= - 40. ! retroaction term (W/m2/K) 657 zconv = 3.16e-5 ! convert 1m/yr->3.16e-5mm/s 658 DO jj = 1, jpj 659 DO ji = 1, jpi 660 t_star (ji,jj) = zTstar * ( 1 + 1. / 50. * zcos_sais ) & ! domain from 15° to 50° 661 & * COS( rpi * (gphit(ji,jj) - 5.) & ! between 27 and 28 °C at 15N, -3 662 & / (53.5 * ( 1 + 11 / 53.5 * zcos_sais ) * 2.) ) ! and 13°C at 50N 53.5 + or - 11 663 ! ! = 1/4 period : 664 ! ! 64.5 in summer, 42.5 in winter 665 qt (ji,jj) = ztrp * ( tb(ji,jj,1) - t_star(ji,jj) ) 666 IF( gphit(ji,jj) >= 14.845 .AND. 37.2 >= gphit(ji,jj)) THEN 667 emp (ji,jj) = zemp_S * zconv & 668 & * SIN( rpi / 2 * (gphit(ji,jj) - 37.2) / (24.6 - 37.2) ) & ! zero at 37.8°, max at 24.6° 669 & * ( 1 - zemp_sais / zemp_S * zcos_sais) 670 emps (ji,jj) = emp (ji,jj) 671 ELSE 672 emp (ji,jj) = - zemp_N * zconv & 673 & * SIN( rpi / 2 * (gphit(ji,jj) - 37.2) / (46.8 - 37.2) ) & ! zero at 37.8°, max at 46.8° 674 & * ( 1 - zemp_sais / zemp_N * zcos_sais ) 675 emps (ji,jj) = emp (ji,jj) 676 ENDIF 677 qsr (ji,jj) = 230 * COS( 3.1415 * ( gphit(ji,jj) - 23.5 * zcos_sais ) / ( 0.9 * 180 ) ) ! 23.5° : tropics 678 END DO 679 END DO 680 ! compute the emp flux such as its integration on the whole domain and at each time be zero 681 zsumemp = 0. 682 zsurf = 0. 683 DO jj = 1, jpj 684 DO ji = 1, jpi 685 zsumemp = zsumemp + emp(ji, jj) * tmask(ji, jj, 1) 686 zsurf = zsurf + tmask(ji, jj, 1) 687 END DO 688 END DO 689 690 IF( lk_mpp ) CALL mpp_sum( zsumemp ) ! sum over the global domain 691 IF( lk_mpp ) CALL mpp_sum( zsurf ) ! sum over the global domain 692 693 IF( nbench /= 0 ) THEN 694 ! Benchmark GYRE configuration (to allow the bit to bit comparison between Mpp/Mono case) 695 zsumemp = 0.e0 696 ELSE 697 ! Default GYRE configuration 698 zsumemp = zsumemp / zsurf 699 ENDIF 700 DO jj = 1, jpj 701 DO ji = 1, jpi 702 emp(ji, jj)= emp(ji, jj) - zsumemp * tmask(ji, jj, 1) 703 END DO 704 END DO 705 706 ELSE 707 708 IF( kt == nit000 ) THEN 709 710 ! Read Namelist namflx : surface thermohaline fluxes 711 ! -------------------- 712 REWIND ( numnam ) 713 READ ( numnam, namflx ) 714 715 IF(lwp) WRITE(numout,*)' ' 716 IF(lwp) WRITE(numout,*)' ocesbc : Constant surface fluxes read in namelist' 717 IF(lwp) WRITE(numout,*)' ~~~~~~~ ' 718 IF(lwp) WRITE(numout,*)' Namelist namflx: set the constant flux values' 719 IF(lwp) WRITE(numout,*)' net heat flux q0 = ', q0 , ' W/m2' 720 IF(lwp) WRITE(numout,*)' solar heat flux qsr0 = ', qsr0, ' W/m2' 721 IF(lwp) WRITE(numout,*)' net heat flux emp0 = ', emp0, ' W/m2' 722 723 qt (:,:) = q0 724 qsr (:,:) = qsr0 725 q (:,:) = q0 726 emp (:,:) = emp0 727 emps (:,:) = emp0 728 qrp (:,:) = 0.e0 729 erp (:,:) = 0.e0 730 731 runoff(:,:) = 0.e0 732 ENDIF 614 733 ENDIF 615 734 -
trunk/NEMO/OPA_SRC/SBC/taumod.F90
r18 r93 13 13 USE in_out_manager ! I/O manager 14 14 USE daymod ! calendar 15 USE lbclnk ! 15 16 16 17 IMPLICIT NONE … … 105 106 !!---------------------------------------------------------------------- 106 107 !! * Arguments 107 INTEGER, INTENT( in ) :: kt ! ocean time step 108 INTEGER, INTENT( in ) :: kt ! ocean time step 109 REAL(wp) :: ztau, ztau_sais, & ! wind intensity and of the seasonal cycle 110 ztime, & ! time in hour 111 ztimemax, ztimemin, & ! 21th June, and 21th decem. if date0 = 1st january 112 ztaun ! intensity 113 INTEGER :: ji, jj, & ! dummy loop indices 114 js ! indice for months 115 INTEGER :: & 116 zyear0, & ! initial year 117 zmonth0, & ! initial month 118 zday0, & ! initial day 119 zday_year0, & ! initial day since january 1st 120 zdaymax 108 121 109 122 !! * Local declarations 110 REAL(wp) :: zfacto !123 REAL(wp) :: zfacto ! 111 124 112 125 NAMELIST/namtau/ ntau000, tau0x, tau0y 113 126 !!--------------------------------------------------------------------- 114 127 115 IF( kt == nit000 ) THEN 116 117 ! Read Namelist namtau : surface wind stress 118 ! -------------------- 119 REWIND ( numnam ) 120 READ ( numnam, namtau ) 121 122 IF(lwp) WRITE(numout,*)' ' 123 IF(lwp) WRITE(numout,*)' tau : Constant surface wind stress read in namelist' 124 IF(lwp) WRITE(numout,*)' ~~~~~~~ ' 125 IF(lwp) WRITE(numout,*)' Namelist namtau: set the constant stress values' 126 IF(lwp) WRITE(numout,*)' spin up of the stress ntau000 = ', ntau000, ' time-steps' 127 IF(lwp) WRITE(numout,*)' constant i-stress tau0x = ', tau0x , ' N/m2' 128 IF(lwp) WRITE(numout,*)' constant j-stress tau0y = ', tau0y , ' N/m2' 129 130 ntau000 = MAX( ntau000, 1 ) ! must be >= 1 131 132 ENDIF 133 134 ! Increase the surface stress to its nominal value in ntau000 time-step 135 136 IF( kt <= ntau000 ) THEN 137 zfacto = 0.5 * ( 1. - COS( rpi * FLOAT( kt ) / FLOAT( ntau000 ) ) ) 138 taux (:,:) = zfacto * tau0x 139 tauy (:,:) = zfacto * tau0y 140 tauxg(:,:) = zfacto * tau0x 141 tauyg(:,:) = zfacto * tau0y 128 IF( cp_cfg == 'gyre' ) THEN 129 130 ! same wind as in Wico 131 !test date0 : ndate0 = 010203 132 zyear0 = ndate0 / 10000 133 zmonth0 = ( ndate0 - zyear0 * 10000 ) / 100 134 zday0 = ndate0 - zyear0 * 10000 - zmonth0 * 100 135 !Calculates nday_year, day since january 1st 136 zday_year0 = zday0 137 !accumulates days of previous months of this year 138 139 DO js = 1, zmonth0 140 IF(nleapy > 1) THEN 141 zday_year0 = zday_year0 + nleapy 142 ELSE 143 IF( MOD(zyear0, 4 ) == 0 ) THEN 144 zday_year0 = zday_year0 + nbiss(js) 145 ELSE 146 zday_year0 = zday_year0 + nobis(js) 147 ENDIF 148 ENDIF 149 END DO 150 151 ! day (in hours) since january the 1st 152 ztime = FLOAT( kt ) * rdt / (rmmss * rhhmm) & ! incrementation in hour 153 & - (nyear - 1) * rjjhh * raajj & ! - nber of hours the precedent years 154 & + zday_year0 / 24 ! nber of hours initial date 155 ! day 21th counted since the 1st January 156 zdaymax = 21 ! 21th day of the month 157 DO js = 1, 5 ! count each day until end May 158 IF(nleapy > 1) THEN 159 zdaymax = zdaymax + nleapy 160 ELSE 161 IF( MOD(zyear0, 4 ) == 0 ) THEN 162 zdaymax = zdaymax + nbiss(js) 163 ELSE 164 zdaymax = zdaymax + nobis(js) 165 ENDIF 166 ENDIF 167 END DO 168 ! 21th june in hours 169 ztimemax = zdaymax * 24 170 ! 21th december day in hours 171 ztimemin = ztimemax + rjjhh * raajj / 2 ! rjjhh * raajj / 4 = 1 seasonal cycle in hours 172 173 ztau = 0.105 / SQRT(2.) ! mean intensity at 0.105 ; srqt(2) because projected with 45° angle 174 ztau_sais = 0.015 ! seasonal oscillation intensity 175 ztaun = ztau - ztau_sais * COS( (ztime - ztimemax) / (ztimemin - ztimemax) * rpi ) 176 DO jj = 1, jpj 177 DO ji = 1, jpi 178 ! domain from 15° to 50° and 1/2 period along 14° so 5/4 of half period with seasonal cycle 179 taux (ji,jj) = - ztaun * SIN( rpi * (gphiu(ji,jj) - 15.) / (29.-15.) ) 180 tauy (ji,jj) = ztaun * SIN( rpi * (gphiv(ji,jj) - 15.) / (29.-15.) ) 181 END DO 182 END DO 183 184 IF( kt == nit000 ) THEN 185 IF(lwp) WRITE(numout,*)' tau : Constant surface wind stress read in namelist' 186 IF(lwp) WRITE(numout,*)' ~~~~~~~ ' 187 IF(lwp) WRITE(numout,*)'nyear = ', nyear 188 IF(lwp) WRITE(numout,*)'nmonth = ', nmonth 189 IF(lwp) WRITE(numout,*)'nday = ', nday 190 IF(lwp) WRITE(numout,*)'nday_year = ',nday_year 191 IF(lwp) WRITE(numout,*)'ndastp = ',ndastp 192 IF(lwp) WRITE(numout,*)'adatrj = ',adatrj 193 IF(lwp) WRITE(numout,*)'ztime = ',ztime 194 IF(lwp) WRITE(numout,*)'zdaymax = ',zdaymax 195 196 IF(lwp) WRITE(numout,*)'ztimemax = ',ztimemax 197 IF(lwp) WRITE(numout,*)'ztimemin = ',ztimemin 198 IF(lwp) WRITE(numout,*)'zyear0 = ', zyear0 199 IF(lwp) WRITE(numout,*)'zmonth0 = ', zmonth0 200 IF(lwp) WRITE(numout,*)'zday0 = ', zday0 201 IF(lwp) WRITE(numout,*)'zday_year0 = ',zday_year0 202 IF(lwp) WRITE(numout,*)'nobis(2)', nobis(2) 203 IF(lwp) WRITE(numout,*)'nobis(5)', nobis(5) 204 IF(lwp) WRITE(numout,*)'nobis(6)', nobis(6) 205 IF(lwp) WRITE(numout,*)'nobis(1)', nobis(1) 206 IF(lwp) WRITE(numout,*)'nobis(zmonth0 -1)', nobis(zmonth0 - 1) 207 IF(lwp) WRITE(numout,*)'raajj = ', raajj 208 ENDIF 209 210 ELSE 211 212 IF( kt == nit000 ) THEN 213 214 ! Read Namelist namtau : surface wind stress 215 ! -------------------- 216 REWIND ( numnam ) 217 READ ( numnam, namtau ) 218 219 IF(lwp) WRITE(numout,*)' ' 220 IF(lwp) WRITE(numout,*)' tau : Constant surface wind stress read in namelist' 221 IF(lwp) WRITE(numout,*)' ~~~~~~~ ' 222 IF(lwp) WRITE(numout,*)' Namelist namtau: set the constant stress values' 223 IF(lwp) WRITE(numout,*)' spin up of the stress ntau000 = ', ntau000, ' time-steps' 224 IF(lwp) WRITE(numout,*)' constant i-stress tau0x = ', tau0x , ' N/m2' 225 IF(lwp) WRITE(numout,*)' constant j-stress tau0y = ', tau0y , ' N/m2' 226 227 ntau000 = MAX( ntau000, 1 ) ! must be >= 1 228 229 ENDIF 230 231 ! Increase the surface stress to its nominal value in ntau000 time-step 232 233 IF( kt <= ntau000 ) THEN 234 zfacto = 0.5 * ( 1. - COS( rpi * FLOAT( kt ) / FLOAT( ntau000 ) ) ) 235 taux (:,:) = zfacto * tau0x 236 tauy (:,:) = zfacto * tau0y 237 tauxg(:,:) = zfacto * tau0x 238 tauyg(:,:) = zfacto * tau0y 239 ENDIF 240 142 241 ENDIF 143 242 -
trunk/NEMO/OPA_SRC/in_out_manager.F90
r88 r93 25 25 nleapy = 0 , & !: Leap year calendar flag (0/1 or 30) 26 26 ninist = 0 !: initial state output flag (0/1) 27 nbench = 1 !: benchmark parameter (0/1) 27 28 !!---------------------------------------------------------------------- 28 29 !! Run control -
trunk/NEMO/OPA_SRC/istate.F90
r79 r93 10 10 !! istate_sal : analytical profile for initial Salinity 11 11 !! istate_eel : initial state setting of EEL R5 configuration 12 !! istate_gyre : initial state setting of GYRE configuration 12 13 !! istate_uvg : initial velocity in geostropic balance 13 14 !!---------------------------------------------------------------------- … … 98 99 adatrj = 0._wp 99 100 IF( cp_cfg == 'eel' ) THEN 100 CALL istate_eel ! EEL configuration : start from pre-defined 101 ! ! velocity and thermohaline fields 101 CALL istate_eel ! EEL configuration : start from pre-defined 102 ! ! velocity and thermohaline fields 103 ELSEIF( cp_cfg == 'gyre') THEN 104 CALL istate_gyre ! GYRE configuration : start from pre-defined temperature 105 ! ! and salinity fields 102 106 ELSE 103 ! ! Initial temperature and salinity fields107 ! ! Other configurations: Initial temperature and salinity fields 104 108 #if defined key_dtatem 105 109 CALL dta_tem( nit000 ) ! read 3D temperature data … … 375 379 376 380 381 SUBROUTINE istate_gyre 382 !!---------------------------------------------------------------------- 383 !! *** ROUTINE istate_gyre *** 384 !! 385 !! ** Purpose : Initialization of the dynamics and tracers for GYRE 386 !! configuration (double gyre with rotated domain) 387 !! 388 !! ** Method : - set temprature field 389 !! - set salinity field 390 !! 391 !! ** History : 392 !! 9.0 ! 04-05 (A. Koch-Larrouy) Original code 393 !!---------------------------------------------------------------------- 394 !! * Local variables 395 INTEGER :: ji, jj, jk ! dummy loop indices 396 !!---------------------------------------------------------------------- 397 398 IF(lwp) WRITE(numout,*) 399 IF(lwp) WRITE(numout,*) 'istate_gyre : initial analytical T and S profil deduced from LEVITUS ' 400 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 401 402 DO jk = 1, jpk 403 DO jj = 1, jpj 404 DO ji = 1, jpi 405 tn(ji,jj,jk) = ( 16. - 12. * TANH( (fsdept(ji,jj,jk) - 400) / 700 ) ) & 406 & * (-TANH( (500-fsdept(ji,jj,jk)) / 150 ) + 1) / 2 & 407 & + ( 15. * ( 1. - TANH( (fsdept(ji,jj,jk)-50.) / 1500.) ) & 408 & - 1.4 * TANH((fsdept(ji,jj,jk)-100.) / 100.) & 409 & + 7. * (1500. - fsdept(ji,jj,jk)) / 1500. ) & 410 & * (-TANH( (fsdept(ji,jj,jk) - 500) / 150) + 1) / 2 411 tn(ji,jj,jk) = tn(ji,jj,jk) * tmask(ji,jj,jk) 412 tb(ji,jj,jk) = tn(ji,jj,jk) 413 414 sn(ji,jj,jk) = ( 36.25 - 1.13 * TANH( (fsdept(ji,jj,jk) - 305) / 460 ) ) & 415 & * (-TANH((500 - fsdept(ji,jj,jk)) / 150) + 1) / 2 & 416 & + ( 35.55 + 1.25 * (5000. - fsdept(ji,jj,jk)) / 5000. & 417 & - 1.62 * TANH( (fsdept(ji,jj,jk) - 60. ) / 650. ) & 418 & + 0.2 * TANH( (fsdept(ji,jj,jk) - 35. ) / 100. ) & 419 & + 0.2 * TANH( (fsdept(ji,jj,jk) - 1000.) / 5000.) ) & 420 & * (-TANH((fsdept(ji,jj,jk) - 500) / 150) + 1) / 2 421 sn(ji,jj,jk) = sn(ji,jj,jk) * tmask(ji,jj,jk) 422 sb(ji,jj,jk) = sn(ji,jj,jk) 423 END DO 424 END DO 425 END DO 426 427 IF(lwp) THEN 428 WRITE(numout,*) 429 WRITE(numout,*) ' Initial temperature and salinity profiles:' 430 WRITE(numout, "(9x,' level gdept temperature salinity ')" ) 431 WRITE(numout, "(10x, i4, 3f10.2)" ) ( jk, gdept(jk), tn(2,2,jk), sn(2,2,jk), jk = 1, jpk ) 432 ENDIF 433 434 435 END SUBROUTINE istate_gyre 436 437 438 377 439 SUBROUTINE istate_uvg 378 440 !!---------------------------------------------------------------------- -
trunk/NEMO/OPA_SRC/par_oce.F90
r56 r93 71 71 !!--------------------------------------------------------------------- 72 72 # include "par_EEL_R6.h90" 73 #elif defined key_gyre 74 !!--------------------------------------------------------------------- 75 !! 'key_gyre' : midlatidude basin : GYRE 76 !!--------------------------------------------------------------------- 77 # include "par_GYRE.h90" 73 78 #else 74 79 !!---------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.