Changeset 14010 for NEMO/trunk/tests/ISOMIP+
- Timestamp:
- 2020-12-02T15:45:22+01:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/tests/ISOMIP+/MY_SRC/eosbn2.F90
r13982 r14010 56 56 ! !! * Interface 57 57 INTERFACE eos 58 MODULE PROCEDURE eos_insitu, eos_insitu_pot, eos_insitu_2d 58 MODULE PROCEDURE eos_insitu, eos_insitu_pot, eos_insitu_2d, eos_insitu_pot_2d 59 59 END INTERFACE 60 60 ! … … 624 624 625 625 626 SUBROUTINE eos_insitu_pot_2d( pts, prhop ) 627 !!---------------------------------------------------------------------- 628 !! *** ROUTINE eos_insitu_pot *** 629 !! 630 !! ** Purpose : Compute the in situ density (ratio rho/rho0) and the 631 !! potential volumic mass (Kg/m3) from potential temperature and 632 !! salinity fields using an equation of state selected in the 633 !! namelist. 634 !! 635 !! ** Action : 636 !! - prhop, the potential volumic mass (Kg/m3) 637 !! 638 !!---------------------------------------------------------------------- 639 REAL(wp), DIMENSION(jpi,jpj,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celsius] 640 ! ! 2 : salinity [psu] 641 REAL(wp), DIMENSION(jpi,jpj ), INTENT( out) :: prhop ! potential density (surface referenced) 642 ! 643 INTEGER :: ji, jj, jk, jsmp ! dummy loop indices 644 INTEGER :: jdof 645 REAL(wp) :: zt , zh , zstemp, zs , ztm ! local scalars 646 REAL(wp) :: zn , zn0, zn1, zn2, zn3 ! - - 647 REAL(wp), DIMENSION(:), ALLOCATABLE :: zn0_sto, zn_sto, zsign ! local vectors 648 !!---------------------------------------------------------------------- 649 ! 650 IF( ln_timing ) CALL timing_start('eos-pot') 651 ! 652 SELECT CASE ( neos ) 653 ! 654 CASE( np_teos10, np_eos80 ) !== polynomial TEOS-10 / EOS-80 ==! 655 ! 656 DO_2D( 1, 1, 1, 1 ) 657 ! 658 zt = pts (ji,jj,jp_tem) * r1_T0 ! temperature 659 zs = SQRT( ABS( pts(ji,jj,jp_sal) + rdeltaS ) * r1_S0 ) ! square root salinity 660 ztm = tmask(ji,jj,1) ! tmask 661 ! 662 zn0 = (((((EOS060*zt & 663 & + EOS150*zs+EOS050)*zt & 664 & + (EOS240*zs+EOS140)*zs+EOS040)*zt & 665 & + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt & 666 & + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt & 667 & + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt & 668 & + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 669 ! 670 ! 671 prhop(ji,jj) = zn0 * ztm ! potential density referenced at the surface 672 ! 673 END_2D 674 675 CASE( np_seos ) !== simplified EOS ==! 676 ! 677 DO_2D( 1, 1, 1, 1 ) 678 zt = pts (ji,jj,jp_tem) - 10._wp 679 zs = pts (ji,jj,jp_sal) - 35._wp 680 ztm = tmask(ji,jj,1) 681 ! ! potential density referenced at the surface 682 zn = - rn_a0 * ( 1._wp + 0.5_wp*rn_lambda1*zt ) * zt & 683 & + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs ) * zs & 684 & - rn_nu * zt * zs 685 prhop(ji,jj) = ( rho0 + zn ) * ztm 686 ! 687 END_2D 688 ! 689 CASE( np_leos ) !== ISOMIP EOS ==! 690 ! 691 DO_2D( 1, 1, 1, 1 ) 692 ! 693 zt = pts (ji,jj,jp_tem) - (-1._wp) 694 zs = pts (ji,jj,jp_sal) - 34.2_wp 695 !zh = pdep (ji,jj) ! depth at the partial step level 696 ! 697 zn = rho0 * ( - rn_a0 * zt + rn_b0 * zs ) 698 ! 699 prhop(ji,jj) = zn * r1_rho0 ! unmasked in situ density anomaly 700 ! 701 END_2D 702 ! 703 END SELECT 704 ! 705 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1=prhop, clinfo1=' eos-pot: ' ) 706 ! 707 IF( ln_timing ) CALL timing_stop('eos-pot') 708 ! 709 END SUBROUTINE eos_insitu_pot_2d 710 711 626 712 SUBROUTINE rab_3d( pts, pab, Kmm ) 627 713 !!
Note: See TracChangeset
for help on using the changeset viewer.